我正在VBA中构建一个命令字符串,以便移交给Microsoft SQL Server Management Studio,如下所示:
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
GO
CREATE TABLE #temp
但是,VBA中的命令字符串不包含GO语句所需的换行符,这会导致执行失败。有什么想法吗?
答案 0 :(得分:1)
在构建命令字符串时,使用vbCrLf
创建新行。
示例:
Dim strMyCommand As String
strMyCommand = "IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp" & vbCrLf & _
"GO" & vbCrLf & _
"CREATE TABLE #temp"
Debug.Print strMyCommand
答案 1 :(得分:0)
你不能在一个sql字符串中使用GO,即使用回车符和换行符分隔...这是一个只有SQLCMD和SQL Server Management Studio才知道的批处理分隔符。 对于上述查询,您必须对数据库连接发出两次调用。
例如,这适用于(在本地SQL Server实例上):
Sub test()
Dim oConn As ADODB.Connection
Set oConn = New Connection
oConn.ConnectionString = "Provider=SQLNCLI11;Server=(local);Integrated Security=SSPI;"
oConn.Open
oConn.Execute "IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp"
oConn.Execute "Create table #temp(somecolumn int)"
oConn.Close
End Sub
答案 2 :(得分:0)
我们可以用分号分隔SQL查询。以下应该没有任何问题,您只需要调用一次数据库连接。
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;CREATE TABLE #temp(ID INT);
这适用于本地SQL Server实例:
Sub MyTest()
Dim con As ADODB.Connection
Set con = New Connection
con.ConnectionString = "Provider=SQLNCLI11;Server=(local);Integrated Security=SSPI;"
con.Open
con.Execute "IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;Create table #temp(somecolumn int);"
con.Close
End Sub