Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
T-SQL:使用类似while循环的数组_Sql_Arrays_Tsql_While Loop_Do While - Fatal编程技术网

T-SQL:使用类似while循环的数组

T-SQL:使用类似while循环的数组,sql,arrays,tsql,while-loop,do-while,Sql,Arrays,Tsql,While Loop,Do While,我想在WHILE循环中循环一个字符数组(只有两个值:“C”和“p”),并在SQL语句中使用这个变量 伪代码: WHILE SELECT 'C' UNION SELECT 'P' BEGIN SELECT @Var -- Do real sql-statement here END 我有这个工作代码,但我想知道是否可以写得更好/更容易/更优雅 DECLARE @Var CHAR(1) DECLARE @counter INT SET @counter = 0 WHILE @counter

我想在WHILE循环中循环一个字符数组(只有两个值:“C”和“p”),并在SQL语句中使用这个变量

伪代码:

WHILE SELECT 'C' UNION SELECT 'P'
BEGIN
    SELECT @Var -- Do real sql-statement here
END

我有这个工作代码,但我想知道是否可以写得更好/更容易/更优雅

DECLARE @Var CHAR(1)
DECLARE @counter INT
SET @counter = 0
WHILE @counter < 2
BEGIN
  SELECT @Var = 
    CASE @counter
        WHEN 0 THEN 'C'
        ELSE 'P'
    END

  SELECT @Var -- Do real sql-statement here
  SET @counter = @counter + 1
END
只需使用:

INSERT INTO MyTable
    SELECT * FROM AnotherTable WHERE ExportStatus 
        IN (SELECT 'C' UNION ALL SELECT 'P')

只要把它插入表中就行了

Set操作在SQL中性能更好
数组可以放入表中,并且可以在表上执行操作。

这确实取决于您尝试执行的
real sql
。通常,您应该能够避免循环,但并非总是如此。如果这确实需要一个循环,那么您所拥有的就可以了。或者,你可以考虑一个<代码> FASTHORD只读光标,并用它循环输入数据。
INSERT INTO MyTable
    SELECT * FROM AnotherTable WHERE ExportStatus 
        IN (SELECT 'C' UNION ALL SELECT 'P')