2013-02-22 2 views
2

ввода как 111111 и 101,102,103,104преобразования не удалось в курсора в хранимой процедуре

Я хочу, чтобы проверить, имеет ли пользователь доступ на этом запросы или нет ...

Я попробовал курсор, как показано на рисунке, но я получаю это ошибка:

Conversion failed when converting the varchar value '101,102,103,104' to data type int.

Код:

ALTER PROCEDURE [dbo].[ValidateRqstId] 
    @UserID VARCHAR(50), 
    @RsqtIDs VARCHAR(300) 
AS 
BEGIN 
    Declare @RqstId int 
    Declare @Result int 
    Declare @UserIDToCheck VARCHAR(50) 
    Declare @RqstUserVal cursor for 
       Select RequestId 
       from REQUEST_LIST 
       where RequestId in (@RsqtIDs) 

    BEGIN 

     OPEN RqstUserVal 
     FETCH NEXT from RqstUserVal into @RqstId 

     WHILE(@@fetch_status <> -1) 
     BEGIN 
     SET @UserIDToCheck = (
       select UserId from dbo.REQUEST_LIST where RequestId = @RqstId) 

     Print(@UserIDToCheck) 

     If(@UserIDToCheck != @UserID) 
      SET @Result = 99 ; 

     --Fetch the next row from the cursor 
     FETCH RqstUserVal into @RqstId 
     END 
    END 

    CLOSE RqstUserVal 
    Deallocate RqstUserVal 

    RETURN @Result 
END 

Спасибо dvance

+1

Вы не можете автомагически расширить VARCHAR в элементы списка. – muhmud

ответ

1

В зависимости от вашего Verion SQL-сервера можно использовать таблицу-значной функции, как и в этом коротком примере

Select * from dbo.test1 
Where ID in(
Select * from dbo.F_SplitAsIntTable('1,123,234,456')) 

Функция определяется как

CREATE FUNCTION F_SplitAsIntTable 
(
@txt varchar(max) 
) 
RETURNS 
@tab TABLE 
(
ID int 
) 
AS 
BEGIN 
    declare @i int 
    declare @s varchar(20) 
    Set @i = CHARINDEX(',',@txt) 
    While @i>1 
     begin 
      set @s = LEFT(@txt,@i-1) 
      insert into @tab (id) values (@s) 
      Set @txt=RIGHT(@txt,Len(@txt)[email protected]) 
      Set @i = CHARINDEX(',',@txt) 
     end 
    insert into @tab (id) values (@txt) 
    RETURN 
END 
GO 
+0

Спасибо bummi ... я создал функцию и проблему решена ... :) – Rohit

Смежные вопросы