指定批次

批次 (Batch) 是以資料庫 API 的一部份加以執行。

  • 在 ADO 中,批次是 Transact-SQL 陳述式的字串,內附於 Command 物件的 CommandText 屬性中:

    Dim Cmd As New ADODB.Command
    Set Cmd.ActiveConnection = Cn
    Cmd.CommandText = "SELECT * FROM Purchasing.Vendor; SELECT * FROM Production.Product"
    Cmd.CommandType = adCmdText
    Cmd.Execute
    
  • 在 OLE DB 中,批次是 Transact-SQL 陳述式的字串,內附於設定命令文字的字串中:

    WCHAR* wszSQLString =
    L"SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product";
    hr = pICommandText->SetCommandText
          (DBGUID_DBSQL, wszSQLString)
    
  • 在 ODBC 中,批次是 Transact-SQL 陳述式的字串,內附於 SQLPrepareSQLExecDirect 呼叫中:

    SQLExecDirect(hstmt1,
       "SELECT * FROM HumanResources.Employee; SELECT * FROM Production.Product",
    SQL_NTS):
    

諸如 Microsoft Access 等部份的資料存取工具並沒有明確的批次結束字元。

GO 命令

Microsoft SQL Server Management Studio、sqlcmd 公用程式以及 osql 公用程式使用 GO 命令來表示批次結束。GO 並不是 Transact-SQL 陳述式,僅是一種訊號,用以告知公用程式批次中有多少 SQL 陳述式。在 SQL Server Management Studio 和 osql 中,所有介於 GO 命令間的 Transact-SQL 陳述式均置入傳送至 SQLExecDirect 的字串內。

例如,如果在 SQL Server Management Studio 中執行這些陳述式:

SELECT @@VERSION
SET NOCOUNT ON
GO

SQL Server Management Studio 所執行的結果相當於下列程式碼所執行的結果:

SQLExecDirect(hstmt,
"SELECT @@VERSION SET NOCOUNT ON",
SQL_NTS);

因為一個批次會編譯成單一的執行計畫,所以批次的邏輯必須是完整的。為一個批次所建立的執行計畫並不能參考另一個批次所宣告的任何變數。註解必須在同一個批次中開始和結束。