2

のような入力111111101,102,103,104

ユーザーがこのリクエストにアクセスできるかどうかを確認したい...

図のようにカーソルを試しましたが、次のエラーが発生します。

varchar値「101,102,103,104」をデータ型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

前もって感謝します

4

1 に答える 1

1

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)-@i)
          Set @i = CHARINDEX(',',@txt)
        end
    insert into @tab (id) values (@txt) 
    RETURN 
END
GO
于 2013-02-23T07:05:55.333 に答える