-1

次のテーブル値関数に XML 名前空間を含めることができません。xpath 結合を実行するには、この名前空間が必要です。問題はWITHメソッドの使用にあるようですが、この構文は、クエリをストレート SQL で実行するときに必要です。

正確なエラーは次のとおりです。

「'default' 付近の構文が正しくありません。ID または QUOTED_ID が必要です。」

この T-SQL テーブル値関数本体に XML 名前空間を含めるための正確な構文を知っている人はいますか? T-SQL コードは次のとおりです。

USE [コンテキスト] GO

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

これで構文エラーが解決するとは思いませんが、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 に答える