来自VBA的SQL查询字符串中的换行符

时间:2014-11-17 13:56:12

标签: sql sql-server sql-server-2008

我正在VBA中构建一个命令字符串,以便移交给Microsoft SQL Server Management Studio,如下所示:

IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp   
GO
CREATE TABLE #temp

但是,VBA中的命令字符串不包含GO语句所需的换行符,这会导致执行失败。有什么想法吗?

3 个答案:

答案 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