Неверный синтаксис в теле IF - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь создать эту функцию, которая объединяет все строки в одну строку:

CREATE function [dbo].[fn_GetProjectDevelopers] ( 
  @ProjectId         varchar(100)
)
returns varchar
as
begin

DECLARE @DevList varchar

DECLARE @DevName varchar(50)
SET @DevList = '';
DECLARE my_cursor CURSOR FOR
SELECT DISTINCT ServiceAppointment.OwnerIdName as Name 
                    FROM ServiceAppointment

OPEN my_cursor

FETCH NEXT FROM my_cursor INTO @DevName 

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @DevName NOT LIKE '%' + @DevList +  '%'
        BEGIN
            @DevList = @DevName+ ' ' + @DevList
        END
    FETCH NEXT FROM my_cursor INTO @DevName
END

CLOSE my_cursor
DEALLOCATE my_cursor


  return @DevList
end

Я получаю эти ошибки:

Incorrect syntax near '@DevList'.
Incorrect syntax near the keyword 'CLOSE'.
Incorrect syntax near 'end'.

Это @DevList в части BEGIN ... END в теле IF.

Ответы [ 3 ]

1 голос
/ 22 июля 2011

Вы пропустили SET из оператора IF:)

BEGIN
IF @DevName NOT LIKE '%' + @DevList +  '%'
    BEGIN
        SET @DevList = @DevName+ ' ' + @DevList
    END
FETCH NEXT FROM my_cursor INTO @DevName
END
1 голос
/ 22 июля 2011

Ошибка в этом

 @DevList = @DevName+ ' ' + @DevList

должно быть это

SET  @DevList = @DevName+ ' ' + @DevList

Ваша другая проблема

DECLARE @DevList varchar

Где размер?это будет только 1 символ !!

однако есть лучшие способы сделать это

Вот способ без курсора

DECLARE @DevList varchar(8000)
SET @DevList = '';

SELECT   @DevList = @DevList +  OwnerIdName + ' '
from (select distinct OwnerIdName 
                    FROM ServiceAppointment where OwnerIdName  is not null ) x 

SELECT @DevList

Пример запуска

DECLARE @DevList varchar(8000)
SET @DevList = '';

SELECT   @DevList = @DevList +  name + ' '
from (select distinct name  FROM sysobjects) x 

SELECT @DevList
0 голосов
/ 22 июля 2011

Вам не хватает ключевого слова SET:

SET @DevList = @DevName+ ' ' + @DevList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...