Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在第行的SQL语句中使用变量_Sql_Sql Server - Fatal编程技术网

如何在第行的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