我有这个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不起作用。 为什么不起作用?
答案 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>