【问题标题】:Receiving error "Select statements included within a function cannot return data to a client"收到错误“函数中包含的选择语句无法将数据返回给客户端”
【发布时间】:2013-04-04 07:34:47
【问题描述】:

尝试在函数中使用 Select 语句时收到错误消息。错误状态:

消息 444,级别 16,状态 2,过程 JDE_GetWhereClause_test,第 26 行
函数中包含的 Select 语句无法将数据返回给客户端。

有什么想法吗?

CREATE FUNCTION [dbo].[JDE_GetWhereClause_test]
(
@tablename as varchar
)
RETURNS varchar(max)
AS
BEGIN
-- Declare the return variable here
Declare @ResultVar as varchar(max)

-- Add the T-SQL statements to compute the return value here

set @tablename = 'F0101'
Declare @Sql nvarchar(max)
Declare my_cur cursor for
    SELECT fsuser FROM dbo.JDE_ExRowSecurity where fsuser = fsuser;

Declare @fsuser as nchar(15)
open my_cur;
fetch next from my_cur;
while @@fetch_status = 0
   begin
      fetch next from my_cur into @fsuser;    
      set @ResultVar += ',' + @fsuser;
   end;
close my_cur;
deallocate my_cur;

-- Return the result of the function
RETURN @ResultVar
END

【问题讨论】:

  • 顺便说一句,当您跳过第一行并使用最后一行两次时,您可以将第二个 fetch next 语句与 set @ResultVar ... 交换
  • 第 26 行。另外,如果我将语法与 oracle idk 进行比较,为什么你在打开光标后开始它应该在之前

标签: sql sql-server function select


【解决方案1】:

尝试玩类似...

CREATE FUNCTION [dbo].[JDE_GetWhereClause_test]
(
@tablename as varchar
)
RETURNS varchar(max)
AS
BEGIN
  -- Declare the return variable here
  Declare @ResultVar as varchar(max)

  -- Add the T-SQL statements to compute the return value here

  set @ResultVar = (select STUFF((SELECT ',', fsuser as [text()]
                    FROM dbo.JDE_ExRowSecurity 
                    FOR XML PATH ('')), 1, 1, '') as blah)

  -- Return the result of the function
  RETURN @ResultVar
END

select 'Answer is: '+[dbo].[JDE_GetWhereClause_test]('whatever')

【讨论】:

  • 嗯;我正在做一个相当复杂的选择……我在这里提出的是一个简单的版本。无论如何,我将切换到存储过程而不是函数,因为返回是一个大的 varchar 字段....感谢您的帮助。
【解决方案2】:

发现这个MSDN article 有帮助,它解决了我的问题:

RETURN (SELECT GETDATE());

直接从 select 语句返回值,避免变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多