我需要根据表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”附近的语法不正确。
如何使此更新有效?
答案 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