我正在尝试创建一个脚本来创建和填充表,然后为我的应用程序创建存储过程来访问它们.我的脚本运行得很好,直到我到达存储过程.我正在尝试将.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)
像这样:
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')(如上所述).