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

问题描述 投票:-1回答:1

如何从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 tsql
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.