Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SQL中的函数中存在无效的对象名称错误_Asp.net_Sql_Sql Server - Fatal编程技术网

Asp.net SQL中的函数中存在无效的对象名称错误

Asp.net SQL中的函数中存在无效的对象名称错误,asp.net,sql,sql-server,Asp.net,Sql,Sql Server,我定义了以下函数 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")]/

我定义了以下函数

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')
它显示一个错误,提示:无效的对象名称“GetXMLValues”

原因是什么?这是一个标量函数,不是表值函数

select dbo.[GetXMLValues](1,'sadfj')
应该有用

您不能将其视为一个表,即选择*..,您只需按上述方式直接选择结果即可


有关详细信息,请参阅。

您的函数不是返回表,而是返回varchar30。使用函数的正确语法为:

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')

或者,如果您确实想要一个表函数,请尝试将您的函数更改为类似这样的函数-然后您可以使用select*from

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

    INSERT @outputTbl_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


GO

正如t-clausen.dk和Ian Preston所提到的,这是因为您有一个标量函数,而不是表值函数

select dbo.[GetXMLValues](1,'sadfj')
我只是想扩展t-clausen.dk的文章,它将函数转换为多语句表值函数。我将更进一步,实际使用一个内联表值函数:

ALTER FUNCTION [dbo].[GetXMLValues](@business_id int, @id varchar(30))
RETURNS TABLE
AS
RETURN (
    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
)
然后以相同的方式使用:

select xmlValue from dbo.[GetXMLValues](1,'sadfj')
退房:

执行


在我的例子中,问题不是使用dbo,但我并不真正了解这些规则。虽然这段代码可以解决这个问题,但确实有助于提高您的帖子质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
DECLARE @dateim DATETIME=Getdate() 
SELECT dbo.Isnulldate(NULL, NULL, @dateim)