【问题标题】:SQL cannot insert variable into XML columnSQL 无法将变量插入 XML 列
【发布时间】:2014-03-07 18:22:25
【问题描述】:

我有一个数据库,它有一个带有 xml 列的表 Date,该列使用默认 xml 数据进行初始化

<data>

</data>

我正在尝试使用变量插入该 XML 列

DECLARE @UserID INT;
SET @UserID = 10    

DECLARE @DataXML XML;
SET @DataXML = (SELECT TOP 1 d.DataXML 
                FROM [Data] AS d
                WHERE d.UserID = @UserID
                ORDER BY d.LastUpdate DESC );
SELECT @DataXML

DECLARE @Data VARCHAR(MAX) 
SET @Data = '<point>15</point>'

DECLARE @XmlQuery NVARCHAR(max) 
SET @XmlQuery = 'insert ' + @Data + ' as last into (/data)[1]';

DECLARE @sql NVARCHAR(max) 
SET @sql='set @DataXML.modify('''+ @XmlQuery + ''')'

EXEC sp_executesql @sql , N'@DataXML XML OUT', @DataXML OUT

SELECT @DataXML

它更新具有未更新列的单元格芽的变量

有人可以帮我吗?

我正在使用 SQL Server 2012

【问题讨论】:

  • SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...很多事情都是特定于供应商的 - 所以我们真的需要知道您正在使用什么数据库系统(以及哪个版本)(请相应地更新标签)......
  • 您只是在修改变量。您已使用变量更新表或直接修改表中的列。

标签: sql-server xml sql-server-2012 sqlxml


【解决方案1】:
-- Setup data...
create table dbo.Data (
  DataID int,
  DataXML xml,
  UserID int,
  LastUpdate datetime
);
insert dbo.Data (DataID, DataXML, UserID, LastUpdate)
values
  (1, N'<data></data>', 10, datetimefromparts(2014, 3, 7, 18, 21, 0, 0)),
  (2, N'<data></data>', 10, datetimefromparts(2014, 3, 7, 18, 22, 0, 0));

-- Find row ID...
declare @UserID int = 10;
declare @DataID int = (
  select top 1 DataID
  from dbo.Data
  where UserID = @UserID
  order by LastUpdate desc
);

-- Update row...
declare @Point int = 15;
update dbo.Data
set DataXML.modify(N' insert <point>{sql:variable("@Point")}</point> into (/data)[1] ')
where DataID = @DataID;

-- Result...
select * from dbo.Data;
DataID DataXML UserID LastUpdate
1 <data /> 10 2014-03-07 18:21:00.000
2 <data><point>15</point></data> 10 2014-03-07 18:22:00.000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多