创建数据库,并使用语句在一个脚本
问题描述:
请看下面的代码:创建数据库,并使用语句在一个脚本
DECLARE @path varchar(MAX)
DECLARE @script varchar(MAX)
SET @path = (SELECT physical_name FROM sys.master_files where name = 'master');
SET @path = REPLACE(@path, 'master.mdf', '');
SELECT @path;
SET @script =
'CREATE DATABASE test
ON PRIMARY
(NAME = test_primary,
FILENAME = ''' + @path + 'test_primary.mdf'',
SIZE = 10MB,
FILEGROWTH = 10MB)';
exec(@script);
USE test
当我尝试一次我得到一个错误,运行它:
Msg 911, Level 16, State 1, Line 31
Database 'test' does not exist. Make sure that the name is entered correctly.
如果我先运行exec和然后单独运行使用它一切正常。
问题是,我该如何解决它,以便可以一次运行整个脚本而没有错误?
答
SQL Server一次编译一个批处理的代码。编译代码时,数据库不存在。
在use test
之前加上batch separator。
DECLARE @path varchar(MAX)
DECLARE @script varchar(MAX)
SET @path = (SELECT physical_name FROM sys.master_files where name = 'master');
SET @path = REPLACE(@path, 'master.mdf', '');
SELECT @path;
SET @script =
'CREATE DATABASE test
ON PRIMARY
(NAME = test_primary,
FILENAME = ''' + @path + 'test_primary.mdf'',
SIZE = 10MB,
FILEGROWTH = 10MB)';
exec(@script);
GO
USE test
答
如果您正在执行从SQL Server查询工具之一(例如企业管理器,Management Studio或sqlcmd
)中的语句,然后插入之前USE test
命令语句GO
。这将命令分成单独的批次。如果您通过其中一个编程客户端执行脚本,则必须分开执行批处理脚本。
+0
谢谢你的正确答案,但对我来说,Mikael Eriksson的答案似乎更精确一些。 +1无论如何) – noname
谢谢,它现在可行。 – noname