-1

我在以下表值函数中包含 XML 命名空间时遇到问题。我需要这个命名空间来执行 xpath 连接。问题似乎是我使用WITH方法,但是当我在直接 SQL 中执行查询时需要这种语法。

确切的错误是:

“‘默认’附近的语法不正确。预期的 ID 或 QUOTED_ID。”

有谁知道在这个 T-SQL 表值函数体中包含 XML 命名空间的确切语法?这是 T-SQL 代码:

使用 [上下文] 去

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetStuff]()
RETURNS @X TABLE(
  DisplayName NVARCHAR(250) NULL,
  StandardCode NVARCHAR(250) NULL
)
--WITH RETURNS NULL ON NULL INPUT
AS      
BEGIN

DECLARE @MyTempTable  TABLE ( 
  DisplayName NVARCHAR(250) NULL,
  StandardCode NVARCHAR(250) NULL
);

;WITH XMLNAMESPACES (default 'http://www.mynamespace.org/someSchema')

INSERT INTO @MyTempTable (DisplayName, StandardCode)
    SELECT Distinct OI.DisplayName, OI.StandardCode
    FROM db..Actor B
    JOIN db..Part DP ON B.Id = DP.Id
    JOIN db..Intent OI ON OI.StandardCode = DP.XML.value('(/US/California/Orange/LA/Pizza)[1]','nvarchar(max)')
    JOIN db..Status PS ON B.Id = PS.Id
    WHERE PS.StandardCode in ('Happy','Employed')
    AND OI.Active = 1
    ORDER BY OI.DisplayName

  RETURN;

  END
4

1 回答 1

2

我认为这不能解决语法错误,但是您正在创建第二个表变量。这:

ALTER FUNCTION [dbo].[GetStuff]()
RETURNS @X TABLE(
  DisplayName NVARCHAR(250) NULL,
  StandardCode NVARCHAR(250) NULL
)
--WITH RETURNS NULL ON NULL INPUT
AS      
BEGIN

DECLARE @MyTempTable  TABLE ( 
  DisplayName NVARCHAR(250) NULL,
  StandardCode NVARCHAR(250) NULL
);

;WITH ... INSERT @MyTempTable ...

应该:

ALTER FUNCTION [dbo].[GetStuff]()
RETURNS @X TABLE(
  DisplayName NVARCHAR(250) NULL,
  StandardCode NVARCHAR(250) NULL
)
--WITH RETURNS NULL ON NULL INPUT
AS      
BEGIN

;WITH ... INSERT @X ...
于 2013-01-24T16:50:55.957 回答