如何从db变量名称中获取表名? (SQL)
我有一个变量来根据数据库环境获取数据库名称。传递DBName,我需要获取表名。
如何从分配给变量的DB名称中获取表名。
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
你需要一点动态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)