SQL Server 2008 - 返回连接条目和“无法绑定多部分标识符”错误的用户定义函数
Posted
技术标签:
【中文标题】SQL Server 2008 - 返回连接条目和“无法绑定多部分标识符”错误的用户定义函数【英文标题】:SQL Server 2008 - User-defined function returning concatenate entries and "multi-part identifier could not be bound" error 【发布时间】:2014-11-21 13:00:13 【问题描述】:我正在尝试创建一个特定的函数来从三个单独的列返回三个随机条目(这些可能来自未来的三个单独的表,但目前它们都来自同一个源表)。
我的用户定义函数如下,当在 T-SQL 中测试指定变量时,它完美地工作。当创建一个函数来做完全相同的事情时,这会产生错误
无法绑定多部分标识符
代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create function dbo.Example
(@field1 varchar(50), @field2 varchar(50), @field3 varchar(50))
returns varchar(100)
as
begin
Select @field1 = Fieldexample1
from DatabaseExample1
Order by (select newid from Newidworkaroundview)
Select @field2 = Fieldexample2
from DatabaseExample2
Order by (select newid from Newidworkaroundview)
Select @field3 = Fieldexample3
from DatabaseExample3
Order by (select newid from Newidworkaroundview)
Return (Select top 1 @field1)+' '+(Select top 1 @field2)+' '+(select top 1 @field3)
end
Newidworkaroundview 中的newid
列只是我用来按newid()
对列进行排序但无法使用newid()
函数的解决方法。
我认为问题源于我如何返回结果,但我想不出为什么在这种情况下这会在 T-SQL 中起作用。
如果有人以前经历过这种情况或能给我一些建议,我将不胜感激!
【问题讨论】:
【参考方案1】:您的函数被定义为返回 VARCHAR,因此将您的 RETURN 语句修改为
Return @field1+' '+@field2+' '+@field3
【讨论】:
【参考方案2】:您正在尝试在字段变量中设置多个值。以这种方式使用。
set @field1 = (select top 1 Fieldexample1
from DatabaseExample1
Order by (select newid from Newidworkaroundview))
set @field2 = (select top 1 Fieldexample2
from DatabaseExample2
Order by (select newid from Newidworkaroundview))
set @field3 = (select top 1 Fieldexample3
from DatabaseExample3
Order by (select newid from Newidworkaroundview))
return @field1 + ' ' + @field2 + ' ' + @field3
【讨论】:
感谢您的帮助,但是在做出您建议的更改后,我仍然收到无法绑定多部分标识符的错误。【参考方案3】:BEGIN
DECLARE @sql varchar(50)
set @field1 = select top 1 stFieldexample1
from DatabaseExample1
Order by (select newid from Newidworkaroundview)
sett @field2 = select top 1 Fieldexample2
from DatabaseExample2
Order by (select newid from Newidworkaroundview)
set @field3 = select top 1 Fieldexample3
from DatabaseExample3
Order by (select newid from Newidworkaroundview)
set @sql=(select concat(@field1,' ',@field2,' ',@field3))
Return @sql
end
使用
select [dbo].[Example] ('x',' y',' z') fieldx
【讨论】:
以上是关于SQL Server 2008 - 返回连接条目和“无法绑定多部分标识符”错误的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章
通过 *** 与 SQL Server 2008 的 ODBC 连接失败
如何用SQL SERVER 2005连接SQL SERVER 2008
无法通过 T4 模板访问我的 SQL Server 2008 错误返回给我如何获取表?