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)