如何在不使用'go'的情况下运行此sql脚本?

Baz*_*nga 1 sql

我正在尝试创建一个脚本来创建和填充表,然后为我的应用程序创建存储过程来访问它们.我的脚本运行得很好,直到我到达存储过程.我正在尝试将.sql文件读入我的应用程序,然后在一次执行中通过我的连接运行此脚本.有没有什么办法可以从脚本的这个块中删除'go'关键字,让它在一次执行中运行?

if object_id('GetStudentByID') is not null
drop procedure GetStudentByID;
go
create procedure GetStudentByID
(@StudentID INT)
as
select StudentID,FirstName,LastName
from Student
where StudentID = @StudentID;
Run Code Online (Sandbox Code Playgroud)

RBa*_*ung 5

像这样:

if object_id('GetStudentByID') is not null
    EXEC('drop procedure GetStudentByID;');

EXEC('create procedure GetStudentByID
(@StudentID INT)
as
select StudentID,FirstName,LastName
from Student
where StudentID = @StudentID;');
Run Code Online (Sandbox Code Playgroud)

这是一个常见问题,因为虽然它并不是很明显,但"GO" 不是 SQL Server命令.相反,它是由Management Studio(以及SQLCMD)实现的命令,允许您告诉它如何将SQL命令文本流分成单独的可编译批次.

由于SQL Server本身没有这样的命令,因此在需要SQL脚本以适应存储过程,代理作业等的情况下,必须采用不同的方式.执行此操作的SOP方法是使用sp_executeCmd通过动态SQL ( ...)EXEC('string')(如上所述).