动态SQL是正确的,但SP_EXECUTESQL不会执行它?

Bor*_*yev 0 t-sql sql-server sql-server-2008

以下代码执行SQL n次.

PRINT 'X'
GO 10
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下查询使其成为动态代码 -

DECLARE @rows int 
DECLARE @sql nvarchar(max)
SET @rows = 10
SET @sql =
'INSERT INTO MultiInsert(Name)
VALUES(NULL)
GO ' + CAST(@rows as NVARCHAR(50))
PRINT @sql
EXEC SP_EXECUTESQL @sql
Run Code Online (Sandbox Code Playgroud)

SQL是正确的,但SP_EXECUTESQL给我一个错误,如下所示 -

INSERT INTO MultiInsert(Name)
VALUES(NULL)
GO 10
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'GO'.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

sir*_*ide 6

您不能GO在动态SQL表达式中使用.GO是管理工作室或其他客户端工具的关键字.

这是关于MSDN的文档GO,它解释了它只是一个客户关键字:http://technet.microsoft.com/en-us/library/ms188037.aspx.特别注意这一行:"基于ODBC或OLE DB API的应用程序在尝试执行GO命令时会收到语法错误.SQL Server实用程序从不向服务器发送GO命令."