我正在使用 SQL Server 2008,并尝试将当前数据库名称更改为变量中的名称。我通常使用语句 USE myDatabaseName
明确执行此操作。
出现这个问题是因为如果我正在运行一个脚本并且如果我不更改数据库名称,它会在 [master]
数据库中创建所有表。
我尝试了以下方法,但似乎不起作用,因为它不断将其余的创建表
代码应用于[master]
。
DECLARE @dbName CHAR(50)
DECLARE @SqlQuery varchar(50)
SET @dbName = 'MyNewDatabaseName'
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = @dbName)
BEGIN
SELECT @SqlQuery = 'CREATE DATABASE ' + @dbName + 'COLLATE SQL_Latin1_General_CP1_CI_AS'
EXEC(@SqlQuery)
END
Select @SqlQuery = 'Use ' + @dbName
EXEC(@SqlQuery)
go
最佳答案
在动态 SQL 中执行 USE some_db
确实有效,但不幸的是,当范围退出时,数据库上下文会变回原来的状态。
您可以使用sqlcmd
模式(在 Management Studio 中的“查询”菜单上启用此功能)。
:setvar dbname "MyNewDatabaseName"
IF DB_ID('$(dbname)') IS NULL
BEGIN
DECLARE @SqlQuery NVARCHAR(1000);
SET @SqlQuery = N'CREATE DATABASE ' + QUOTENAME('$(dbname)') + '
COLLATE SQL_Latin1_General_CP1_CI_AS'
EXEC(@SqlQuery)
END
GO
USE $(dbname)
GO
关于SQL Server : Change current database via variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9165513/