如何从db变量名获取表名? (SQL)

时间:2019-03-25 15:34:42

标签: sql tsql

如何从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

1 个答案:

答案 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)