指定批处理

批处理作为数据库 API 的一部分实现。

  • 在 ADO 中,批处理是包含在 Command 对象的 CommandText 属性中的 Transact-SQL 语句的字符串:

    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 中,批处理是包含在 SQLPrepareSQLExecDirect 调用中的 Transact-SQL 语句的字符串:

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

有些数据访问工具(如 Microsoft Access)没有显式批处理终止符。

GO 命令

MicrosoftSQL 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);

因为一个批处理被编译到一个执行计划中,所以批处理在逻辑上必须完整。为一个批处理创建的执行计划不能引用另一个批处理中声明的任何变量。注释必须在一个批处理中开始并结束。