SQL Server : Change current database via variable

标签 sql sql-server sql-server-2008 tsql

我正在使用 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/

相关文章:

sql - 如何按日期查询结果调整 SQL 聚合以合并同一级别中某些列存在空值的值

sql - 查找连续序列并建议序列中的下一个数字

sql - SQL Server 中数值、 float 和小数之间的区别

sql - 禁用 SQLCMD 语法检查

sql - 条件查询

sql - 如何更新数据库中所有表的列值的特定字符

mysql - 无法创建预期的查询

MySQL。通过从每行获取输入值的子查询更新表中特定列的所有行

c# - Sql查询按日期搜索数据库

mysql - 频率加入声明