1

我需要加入另一个数据库中的表,但不知道它的名称,我只能从过程参数中获取它。所以我想做这样的事情:

select * from [DB1].dbo.[Table1] t1 
inner join [@DBName].dbo.[Table2] t2 on t1.ID = t2.ID and t1.status = @status;

甚至

select * from [DB1].dbo.[Table1] t1 
inner join [@DBNameAndTableName] t2 on t1.ID = t2.ID and t1.status = @status;

有可能吗?还是我必须使用字符串脚本和 EXECUTE(@SQL_SCRIPT)

4

1 回答 1

4

试试这个——

询问:

DECLARE 
      @db_name NVARCHAR(150) = 'DB2'
    , @status INT = 0

DECLARE @SQL NVARCHAR(MAX) = '
SELECT *
FROM [DB1].[dbo].[table1] t1 
JOIN [' + @db_name +'].[dbo].[table1] t2 ON t1.ID = t2.ID 
WHERE t1.status = ' + CAST(@status AS VARCHAR(5))

PRINT @SQL
EXEC sys.sp_executesql @SQL

输出:

SELECT *
FROM [DB1].[dbo].[table1] t1 
JOIN [DB2].[dbo].[table1] t2 ON t1.ID = t2.ID 
WHERE t1.status = 0
于 2013-05-20T10:33:47.797 回答