如何在第行的SQL语句中使用变量
我正在尝试创建一个允许变量用作表名的过程 例如:如何在第行的SQL语句中使用变量,sql,sql-server,Sql,Sql Server,我正在尝试创建一个允许变量用作表名的过程 例如: Select Temp1, Temp2 From @var @var具有正确的表名,但随着while循环的每次迭代而改变 -- Above sets up all Variables WHILE @Count >= @I BEGIN SET @ObjectID = (SELECT ObjectID FROM @TmpTable WHERE ID = @I) SET @TableName = (SELECT TableName FRO
Select Temp1, Temp2
From @var
@var具有正确的表名,但随着while循环的每次迭代而改变
-- Above sets up all Variables
WHILE @Count >= @I
BEGIN
SET @ObjectID = (SELECT ObjectID FROM @TmpTable WHERE ID = @I)
SET @TableName = (SELECT TableName FROM @TmpTable WHERE ID = @I)
IF @I = 8
BEGIN
SELECT *
INTO ##TMPTable
FROM @TableName
-- Additional Processing
END
END
若不使用动态SQL(使用select生成一个字符串,然后执行该字符串),或者。。。你挑吧,都说我不明白。变化如何?它没有在循环中使用。更多代码-如果您能找到另一种方法,pI建议您避免使用动态sql:这里是否需要一个循环?什么是“附加处理”?这种设计拙劣的尖叫声,但没有太多的信息。当然,按照您的编码方式,循环似乎真的毫无意义,因为您只在@I=8时进行任何操作。@I=8仅用于测试,以便我可以使用一个表。主要目标是将数据复制到临时表中,以便我们可以重新创建模式。
DECLARE
@SQLString varchar(max),
@TempTableName varchar(100)
SET @TempTableName = '##TMPTable' + cast( @@spid AS varchar(5))
WHILE @Count >= @I
BEGIN
SET @ObjectID = (SELECT ObjectID FROM @TmpTable WHERE ID = @I)
SET @TableName = (SELECT TableName FROM @TmpTable WHERE ID = @I)
IF @I = 8
BEGIN
set @SQLString = '
SELECT *
INTO ' + @TempTableName + '
FROM ' + @TableName
EXECUTE ( @SQLString )
EXECUTE ( 'SELECT * from ' + @TempTableName)
-- Additional Processing
END
END