sql >> データベース >  >> RDS >> Sqlserver

SQL Server で XML 変数を反復処理する

    DECLARE @XmlVariable XML = '<parent_node>
                                  <category>Low</category>
                                  <category>Medium</category>
                                  <category>High</category>
                                </parent_node>'
    
    INSERT INTO dbo.YourTargetTable(CategoryColumn)
      SELECT 
         XTbl.Cats.value('.', 'varchar(50)')
      FROM 
         @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)
    

    更新: しなければならない場合 古いレガシー ストアド プロシージャを使用し、それを変更することはできません (これが私の好みの方法です)。テーブル変数を使用する:

    -- declare temporary work table
    DECLARE @RbarTable TABLE (CategoryName VARCHAR(50))
    
    -- insert values into temporary work table
    INSERT INTO @RbarTable(CategoryName)
      SELECT 
         XTbl.Cats.value('.', 'varchar(50)')
      FROM 
         @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)
    
    -- declare a single category
    DECLARE @CategoryNameToBeInserted VARCHAR(50)
    
    -- get the first category
    SELECT TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable
    
    -- as long as we have data
    WHILE @CategoryNameToBeInserted IS NOT NULL
    BEGIN
        -- execute your stored procedure here.....    
        EXEC sp_executesql N'dbo.YourStoredProcedure @CategoryName', 
                           N'@CategoryName VARCHAR(50)', 
                           @CategoryName = @CategoryNameToBeInserted
    
        -- delete the category we just inserted from the temporary work table
        DELETE FROM @RbarTable WHERE CategoryName = @CategoryNameToBeInserted
    
        -- see if we still have more categories to insert    
        SET @CategoryNameToBeInserted = NULL
        SELECT TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable ORDER BY CategoryName
    END
    


    1. SQL Server 2008 のいくつかの xml ノード値を合計する

    2. クエリSQLを選択するときに空白行を追加する方法

    3. ポイントテキストをジオメトリに変換する方法

    4. PostgreSQLのストアドプロシージャを学ぶための最良の方法は?