Вопрос по sql, function, select, sql-server – Ошибка при получении «Операторы выбора, включенные в функцию, не могут вернуть данные клиенту»

9

Получение ошибки при попытке использовать оператор Select в функции. Ошибка гласит:

Сообщение 444, уровень 16, состояние 2, процедура JDE_GetWhereClause_test, строка 26
Операторы выбора, включенные в функцию, не могут возвращать данные клиенту.

Есть идеи?

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<,/code> statement with <code>set @ResultVar ...</code> as you skip over the first row and use the last row twice Axarydax

Ваш Ответ

2   ответа
0

Нашел этоСтатья MSDN полезно, и это решило мою проблему:

RETURN (SELECT GETDATE());

Возврат значений непосредственно из оператора выбора, избегая переменных.

10

Попробуйте поиграть с чем-то вроде ...

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 .... Спасибо за вашу помощь. Ankur

Похожие вопросы