2014-11-17 4 views
0

내가 VBA에서 명령 문자열을 건물입니다에서 SQL 쿼리 문자열에 휴식이 뭔가를 보이는 마이크로 소프트 SQL Server Management Studio를 넘겨합니다 실행을 실패하게하는 GO 문장에 필요한 줄 바꿈을 포함시키지 마십시오. 어떤 아이디어?라인은 VBA

답변

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 
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 
+0

_ _ "... 단지 SQLCMD 및 SQL Server Management Studio를 알고 일괄 분리가 GO."이것은이었다 내 최초의 생각 . 그렇다면 나는 fboehlandt의 질문을 다시 읽었다. 나는 "SQL 코드는 Microsoft SQL Server Management Studio로 넘겨 질 것입니다."라고 해석합니다. "SSMS에서 SQL 코드를 실행할 것입니다." – Mike

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