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 server 需要将select的输出存储到mssql中的变量数组中_Sql Server - Fatal编程技术网

Sql server 需要将select的输出存储到mssql中的变量数组中

Sql server 需要将select的输出存储到mssql中的变量数组中,sql-server,Sql Server,我有一个名为Structure1的表,我想将Structure\u name值存储到一个数组中,并与另一个表Structure2进行比较,其中列item并显示匹配的值 DECLARE @Structure1 TABLE ( Structure_name VARCHAR[128] ) select Structure_name FROM Structure1 SELECT COUNT(*) into xyz FROM Structure1

我有一个名为
Structure1
的表,我想将
Structure\u name
值存储到一个数组中,并与另一个表
Structure2
进行比较,其中列
item
并显示匹配的值

DECLARE  @Structure1  TABLE
    (
        Structure_name VARCHAR[128]
    )
    select Structure_name FROM Structure1
    SELECT COUNT(*) into xyz FROM Structure1 

    FOR i=1..xyz
        SELECT Structure_name FROM Structure2 WHERE ITEM = Structure[i]
    print Structure_name values..
    END FOR 

似乎您来自另一种编程语言背景。在大多数(如果不是全部的话)关系数据库中,您的操作是在一组基础上完成的,而不是一个接一个地完成的。它们也经过优化,可以以这种方式工作

您可以简单地联接两个表并显示所有匹配的值

SELECT
    S2.Structure_name
FROM
    Structure2 AS S2
    INNER JOIN Structure1 AS S1 ON S2.Structure_name = S1.Structure_name

编辑:如果您真的想使用循环,可以使用
光标
。基本语法如下所示:

DECLARE StructureCursor CURSOR FOR
    SELECT
        S.Structure_name
    FROM
        Structure2 AS S

OPEN StructureCursor

DECLARE @StructureName VARCHAR(200)

FETCH NEXT FROM StructureCursor INTO @StructureName

WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @MatchingStructureName VARCHAR(200)

    SELECT
        @MatchingStructureName = S1.Structure_name
    FROM
        Structure1 AS S1
    WHERE
        S1.Structure_name = @StructureName

    PRINT (@MatchingStructureName)

    FETCH NEXT FROM StructureCursor INTO @StructureName

END

CLOSE StructureCursor
DEALLOCATE StructureCursor

似乎您来自另一种编程语言背景。在大多数(如果不是全部的话)关系数据库中,您的操作是在一组基础上完成的,而不是一个接一个地完成的。它们也经过优化,可以以这种方式工作

您可以简单地联接两个表并显示所有匹配的值

SELECT
    S2.Structure_name
FROM
    Structure2 AS S2
    INNER JOIN Structure1 AS S1 ON S2.Structure_name = S1.Structure_name

编辑:如果您真的想使用循环,可以使用
光标
。基本语法如下所示:

DECLARE StructureCursor CURSOR FOR
    SELECT
        S.Structure_name
    FROM
        Structure2 AS S

OPEN StructureCursor

DECLARE @StructureName VARCHAR(200)

FETCH NEXT FROM StructureCursor INTO @StructureName

WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @MatchingStructureName VARCHAR(200)

    SELECT
        @MatchingStructureName = S1.Structure_name
    FROM
        Structure1 AS S1
    WHERE
        S1.Structure_name = @StructureName

    PRINT (@MatchingStructureName)

    FETCH NEXT FROM StructureCursor INTO @StructureName

END

CLOSE StructureCursor
DEALLOCATE StructureCursor

这就是联接在RDBMS中的作用

这将提供两个表之间的所有匹配行

SELECT
   *
FROM
  @Structure1 s1
  JOIN
  Structure2 s2 ON s1.Structure_name  = s2.ITEM 

这就是联接在RDBMS中的作用

这将提供两个表之间的所有匹配行

SELECT
   *
FROM
  @Structure1 s1
  JOIN
  Structure2 s2 ON s1.Structure_name  = s2.ITEM 

我想使用数组概念并执行..但在mssql中没有数组概念,所以我使用临时表并希望执行..必须执行许多验证..所以需要使用此数组概念。谢谢。@学习者:很少有情况需要在SQL或“使用数组”中循环。我们也回答了你的问题。如果你想在你真正的问题上得到帮助,那么就告诉我们真正的问题。我想使用数组概念并执行..但是在mssql中没有数组概念,所以我使用临时表并执行..必须执行许多验证..因此需要使用此数组概念。谢谢。@学习者:很少有情况需要在SQL或“使用数组”中循环。我们也回答了你的问题。如果你想在你真正的问题上得到帮助,那就给我们真正的问题。