如何从db变量名获取表名? (SQL)
我有一个变量可以根据数据库环境获取数据库名称。传递DBName,我需要获取表名。
如何从分配给变量的数据库名称中获取表名称。
Declare @DBName nvarchar(1000)
set @DBName = ( select
CASE WHEN @@SERVERNAME='MyProdServer' THEN 'MyDB_Production'
WHEN @@SERVERNAME='MyTestServer' THEN 'MyDB_Test'
ELSE '(Unknown)' End as DBName )
select * from @DBName.dbo.MyTestTable
答案 0 :(得分:1)
您需要一点动态SQL
Declare @script varchar(max)
Set @script = 'select name from ' + @dbname + '.sys.tables'
exec(@script)
或者您可以使用
SELECT TABLE_CATALOG
, TABLE_SCHEMA
, TABLE_NAME
, TABLE_TYPE
FROM INFORMATION_SCHEMA.TABLES where table_catalog=@dbname
除非继续使用动态sql,否则您将无法切换到表:
Set @script - 'select * from # + @dbname + '.dbo.mytesttable'
Exec (@script)
我使用了另一种方法来解决此问题,即使用占位符将要运行的脚本存储在表中。
CREATE myscripts as table (script varchar(max), upk int)
INSERT INTO myscripts
Select 'Select * from #10#.dbo.mytable', 1
Set @script=(Select script from mytable where upk=1)
Set @script=REPLACE(@script,'#10#', @dbname)
Exec(@script)