我正在MSSQL中创建存储过程,并在此存储过程中声明一个临时表(我们称该表为@TempTable
)并在其中插入一些内容。到现在为止还挺好。但是在此过程的稍后阶段,我需要使用动态sql,因为过程的一些参数是现有表的列名。 而这个动态SQL语句我需要一个像动态SQL中的临时表(SQL-Server)
DECLARE @SQLString nvarchar(500)
SET @SQLString = N'SELECT A.ColumnA FROM RealTable A, ' + @TempTable + ' B
WHERE A.' + @ColumnParameter + ' = B.ColumnA'
EXEC (@SQLString)
但在这种情况下,SQL认为@TempTable
是一个标量以比较真实的表的一些价值观和@TempTable
所以语句看起来内,需要申报。我也试着这样说:
DECLARE @SQLString nvarchar(500)
SET @SQLString = N'SELECT A.ColumnA FROM RealTable A, @TempTable B
WHERE A.' + @ColumnParameter + ' = B.ColumnA'
EXEC (@SQLString)
但是,当然在这种情况下,表变量@TempTable需要声明,因为它不知道,这是一个表,我之前声明(超出此声明)。所以,我的问题是,如何正确使用动态sql中的临时表?
您可以简单地将表声明为数据库中的实际表(暂时),然后在完成时删除它 – Takarii
您正在使用的SQL Server版本是什么? – gofr1
SQL Server 2008 R2 – Echelon