如何使用 T-SQL 内置函数的值更新 XML 列?
我有一个 MS SQL 2008 R2 标准数据库。我有一个包含 varchar(250)
数据的列和一个包含 xml
的列。
CREATE TABLE [dbo].[art](
[id] [int] IDENTITY(1,1) NOT NULL,
[idstr] [varchar](250) NULL,
[rest] [xml] NOT NULL,
CONSTRAINT [PK_art] PRIMARY KEY CLUSTERED ([id] ASC)
)
问题是我想将字符串函数的结果插入到 xml 中,大约 140 条记录。我尝试将 xml.modify 与动态生成的文本一起使用。
UPDATE [pwi_new].[dbo].[art]
SET rest.modify('insert <e><k>link</k><v>'
+ my_string_function(idstr) + '</v></e> into (/root)[1]')
WHERE parent = 160
AND idstr LIKE '%&%'
GO
但是,我遇到了这个错误:
The argument 1 of the XML data type method "modify" must be a string literal.
有什么想法吗?我想避免使用时态字段、外部语言并从生成的字符串执行 TSQL? (我听说过 sql:variable
和 sql:column
,但这是 tsql 函数的结果。)
I have a MS SQL 2008 R2 Standard database. I have a column with varchar(250)
data and a column with xml
.
CREATE TABLE [dbo].[art](
[id] [int] IDENTITY(1,1) NOT NULL,
[idstr] [varchar](250) NULL,
[rest] [xml] NOT NULL,
CONSTRAINT [PK_art] PRIMARY KEY CLUSTERED ([id] ASC)
)
The problem is I want to insert result of a string function into into xml, in about 140 records. I've tried to use xml.modify
with dynamically generated text.
UPDATE [pwi_new].[dbo].[art]
SET rest.modify('insert <e><k>link</k><v>'
+ my_string_function(idstr) + '</v></e> into (/root)[1]')
WHERE parent = 160
AND idstr LIKE '%&%'
GO
However, I've got this error:
The argument 1 of the XML data type method "modify" must be a string literal.
Any ideas? I'd like to avoid using temporal fields, external languages and executing TSQL from generated string? (I've heard of sql:variable
and sql:column
, but this is a result of tsql function.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不确定你想在这里做什么。您提到了一个 TSQL 函数,如果这是替换 &到&这是没有必要的。它由 SQL Server 为您处理。
使用表变量
@art
进行测试:结果:
更新
对于不那么简单的情况,您可以使用交叉应用将所需的值获取到列中。
结果:
Not sure what you want to do here. You mention a TSQL function and if that is the replace & to & it is not necessary. It is taken care of by SQL Server for you.
A test using a table variable
@art
:Result:
Update
For the not so trivial situations you can use a cross apply to get the values you need into a column.
Result:
假设你的表有一个键:
Assuming your table has a key: