7

次の関数が定義されています

alter  FUNCTION [dbo].[GetXMLValues](@business_id int, @id varchar(30))
RETURNS varchar(30)
AS
BEGIN

declare @xmlValue varchar(30)

set @xmlValue =  (SELECT top 1000  T.Content.value('(/XmlDataPairDocument/dataitem[@id=sql:variable("@id")]/@value)[1]', 'VARCHAR(100)')
                    FROM tblApplications T where t.business_id =@business_id)


return @xmlValue




END

F5コマンドを押すと、正常に実行されます/ ...

しかし、次のクエリを使用して実行しようとすると:

select * from [GetXMLValues](1,'sadfj')

次のようなエラーが表示されます。Invalid object name 'GetXMLValues'.

理由は何ですか ?エラーとは何ですか??

4

5 に答える 5

21

これはスカラー関数であり、テーブル値関数ではありません。

select dbo.[GetXMLValues](1,'sadfj')

動作するはずです。

これをテーブルのように扱うことはできません。つまりselect * ...、上記のように結果を直接選択する必要があります。

詳細については、関数の種類を参照してください。

于 2013-07-31T10:24:44.870 に答える
2

関数はテーブルを返さず、varchar(30) を返しています。関数を使用する正しい構文は次のとおりです。

select [dbo].[GetXMLValues](1,'sadfj')

代わりにこれを試してください:

ALTER FUNCTION [dbo].[GetXMLValues](@business_id int, @id varchar(30))
RETURNS @t table (xmlValue varchar(30))
AS
BEGIN

insert @t (xmlValue)
SELECT top 1000  T.Content.value('(/XmlDataPairDocument/dataitem[@id=sql:variable("@id")]/@value)[1]', 'VARCHAR(100)')
FROM tblApplications T where t.business_id =@business_id

return
end

次に、この方法で関数を呼び出すことができます。

select xmlValue from dbo.[GetXMLValues](1,'sadfj')
于 2013-07-31T10:26:07.887 に答える