SQL Server连接表中的值,然后使用这些值更新其他表中的字段

时间:2019-03-28 16:14:05

标签: sql sql-server sql-update

我需要根据表1中的AuthorID用来自表2的串联数据填充表1中的一个字段。表1中的ID是用;分隔的字符串。例如'234; 242; 54'

我找到了一个将CSV转换为表格的函数,然后可以使用这些值来获取与这些ID关联的GUID并将它们连接起来

SELECT TOP 100 *,
  stuff((
        select ';' + convert(varchar(200),AuthorGuid)
        from 
            (select t.AuthorGuid
            from Table2 t
            where t.AuthorID in (select * from dbo.CSVToTable(REPLACE(w.Authors,';',',')))
            ) auths
        for xml path('')), 1, 1, '') as AuthorGUIDStemp
  FROM Table1 w

上面的查询将GUIDS放在Table1的临时字段中,但我需要更新Table1

update Table1 w set AuthorGUIDs = 
    stuff((
        select ';' + convert(varchar(200),AuthorGuid)
        from 
            (select t.AuthorGuid
            from Table2 t
            where t.AuthorID in (select * from dbo.CSVToTable(REPLACE(Authors,';',',')))
            ) auths
        for xml path('')), 1, 1, '')

这不适用于更新字段并引发错误。 Msg 102,第15级,状态1,第15行 'w'附近的语法不正确。 信息156,第15层,州1,第23行 关键字“ for”附近的语法不正确。

如何使此更新有效?

1 个答案:

答案 0 :(得分:0)

您的更新语法似乎已关闭。我相信您正在尝试使用XML类型更新AuthorGuid。

假设您想要的结果是文本,请尝试以下操作:

 UPDATE  w
  SET   AuthorGUIDs = STUFF((   SELECT  ';' + CONVERT(VARCHAR(200), AuthorGuid)
                                  FROM
                                    (   SELECT  t.AuthorGuid
                                          FROM  Table2 t
                                          WHERE t.AuthorID IN(SELECT    * FROM  dbo.CSVToTable(REPLACE(Authors, ';', ',')) ))auths
                                FOR XML PATH(''), TYPE).value('.', 'varchar(max'), 1, 1, '')

  FROM  Table1 w