我正在尝试编写T-SQL脚本来创建数据库和相应的表。我遇到了一个问题,其中USE
语句抱怨我刚刚创建的数据库不存在。如果我在SQL Server Management Studio中运行脚本,以便可以使用GO
语句,则不会出现此问题。
是否有可以用来确保CREATE DATABASE
在USE
之前被执行的GO的T-SQL?
我尝试了BEGIN
/ COMMIT TRANSactION
和BEGIN
/ END
,但它们没有帮助。
是否有T SQL等效的GO,可以用来确保在USE前执行CREATE DATABASE?
是的。动态SQL。每个动态SQL调用都是作为单独的批处理进行解析,编译和执行的。
EG:
exec ('
create database foo
')
exec ('
use foo
create table bar(id int)
')
请注意,在动态SQL use database
中使用时,仅更改动态批处理的数据库上下文。当控制权返回到调用批处理时,将还原数据库上下文。
在C#中,您应该为每个批次使用对SqlComand的单独调用。
高级步骤。