有没有办法在不将sql转换为字符串并调用exec
的情况下执行此类操作DECLARE @source_database varvhar(200)
SELECT @source_database = 'wibble'
SELECT * FROM SELECT @source_database.dbo.mytable
答案 0 :(得分:3)
没有。我不敢。
必须使用动态sql才能将变量用于数据库或列名。
答案 1 :(得分:2)
仅适用于未使用链接服务器或动态SQL的存储过程
DECLARE @myProc varchar(200)
SELECT @myProc = 'wibble.dbo.foobar'
EXEC @myProc
答案 2 :(得分:0)
还有另一种(不一定非常漂亮)的选择:
IF (@source_database = 'wibble')
USE wibble;
ELSE IF (@source_database = 'wibble2')
USE wibble2;
ELSE
RAISERROR(....)
SELECT * FROM dbo.myTable
如果您有任何实际数量的数据库,这可能会很烦人。但它仍然是一种选择。