语句“USE @dbname”不起作用,为什么?怎么做?

时间:2010-02-02 13:10:24

标签: sql-server-2005 tsql

我有这个t-sql片段:

DECLARE @db_name varchar(255);
SET @db_name = 'MY_DATABASE'; -- assuming there is database called 'my_database'
USE @db_name -- this line ends with error "Incorrect syntax near '@db'."

但是使用变量(第三行代码段)的USE不起作用。 为什么不起作用?

4 个答案:

答案 0 :(得分:8)

您无法在变量中为USE语句提供数据库的名称。

答案 1 :(得分:4)

正如您所注意到的,USE语句不接受变量作为参数。很快就会想到的另一种选择是相当粗糙,极易出错,但是你走了:

EXEC ('USE ' + @db_name + '
       SELECT * FROM some_table
       INSERT INTO some_table VALUES (1)')

我希望别人能做得更好: - )

答案 2 :(得分:3)

SQL Server不接受带有变量的USE语句。

要动态使用数据库名称,必须使用(几乎)完全限定名称创建动态SQL语句,如下所示:

Declare @SQL VarChar (100)

SET @SQL = 'SELECT * FROM ' + @DatabaseName + '.dbo.TableName'

然后使用sp_SQLExec

执行它

答案 3 :(得分:1)

我这样做的方式是使用if语句:

if @DBName = 'DB1'
    <query with DB1>
else
    <query with DB2>