sql - 在标量值函数中使用 Xquery

标签 sql sql-server sql-server-2008 xquery

我有以下查询返回我需要的信息,但我需要在标量值函数中使用此查询以使用计算列中的返回值。

XML 列位于同一个表中,我需要将“设置”中的值插入到名为“方向”的列中

;WITH XMLNAMESPACES ( 'http://www.w3.org/2001/XMLSchema' AS als )
SELECT
 a.a.value('@Settings', 'VARCHAR(50)') AS [Settings]

FROM Base AS X
    CROSS APPLY X.BaseXML.nodes('als:Name') a(a)

我正在尝试但没有得到任何结果的功能是

CREATE FUNCTION [dbo].[ChooseRevision](@lineId int) Returns integer As
Begin
Return (WITH XMLNAMESPACES ( 'http://www.w3.org/2001/XMLSchema' AS als )
SELECT
 a.a.value('@Settings', 'VARCHAR(50)') AS [Settings]

FROM Base AS X
    CROSS APPLY X.BaseXML.nodes('als:Name') a(a)
Where LineId = @lideid
)
End

GO

如何将查询包含在疤痕函数中以用作计算列?

<als:Doc xmlns:als="http://www.w3.org/2001/XMLSchema" SchemaVersion="0.1" Settings="First Test" Title="Recovery Loop">
  <als:Base Rev="0" Id="201" />
  <als:Number TimeStamp="2013-01-21T15:08:00">
    <als:Member Name="Club Run" DirId="123" />
  </als:Number>
  </als:Doc>

最佳答案

假设每个 XML 值只有一个 als:Name 节点,您可以这样写:

CREATE FUNCTION [dbo].[ChooseRevision](@lineId int) 
RETURNS VARCHAR(50) 
AS
BEGIN
  DECLARE @r VARCHAR(50);
  WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema' AS als)
  SELECT
   @r = BaseXML.value('als:Doc[1]/@Settings', 'VARCHAR(50)') 
  FROM Base
  WHERE LineId = @lineId;
  RETURN @r;
END

如果您计划在 dbo.Base 表本身中使用此函数,则应使用此版本:

CREATE FUNCTION [dbo].[ChooseRevision](@xml XML) 
RETURNS VARCHAR(50) 
AS
BEGIN
  DECLARE @r VARCHAR(50);
  WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema' AS als)
  SELECT @r = @xml.value('als:Doc[1]/@Settings', 'VARCHAR(50)') 
  RETURN @r;
END

关于sql - 在标量值函数中使用 Xquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572013/

相关文章:

sql - 分区表查询性能慢?

mysql语法错误为什么?

.net - 间歇性 "batch is aborted"异常

sql - 从表中的对值中获取计数

c# - 使用 CLR 返回表

sql - 带 NULL 的 MS-SQL 平均列

sql-server-2008 - SQL Server 2008 R2 Management Studio - 没有 Intellisense

sql - 将临时表重命名为物理表

sql - 将数据从 Excel 导入到 PostgreSQL

sql - UPSERT 功能的存储过程