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 错误返回给我如何获取表?

SQL Server 2008 - 性能慢查询

SQL Server 2008 中嵌套循环连接和哈希连接的区别

Glassfish“连接已关闭”错误与连接池、JDBC 和 SQL Server 2008