2016-04-26 9 views
0

列が値を持つかどうかをチェックするストアドプロシージャを作成しました。カラムに値がある場合は1を返し、そうでない場合は-1を返します。ここで
コードは次のとおりです。別のプロシージャで1つのプロシージャを呼び出す

CREATE PROCEDURE [dbo].[sp_addPermissions](@groupName NVARCHAR(20), @column NVARCHAR(20)) 
AS 
    DECLARE @SQL NVARCHAR(MAX) 
    DECLARE @CountDef NVARCHAR(MAX) 
    DECLARE @FieldCount INT 

    IF EXISTS(SELECT * FROM addPermissions WHERE groupName = @groupName) 
    BEGIN 
     IF EXISTS(SELECT * FROM sys.columns WHERE NAME = @column AND OBJECT_ID = OBJECT_ID(N'addPermissions')) 
     BEGIN 
       SET @SQL=N'SELECT @Count=count(*) 
         FROM addPermissions 
         WHERE '+ quotename(@column) + ' IS NOT NULL 
         AND groupName = @groupName' 

         EXEC sys.sp_executesql @SQL, N'@groupName VARCHAR(20), @Count INT OUTPUT' , 
          @groupName= @groupName, 
          @Count = @FieldCount OUTPUT 
         --SELECT(@SQL) 
         select @FieldCount 
         IF(@FieldCount = 0) 
         BEGIN 
           RETURN -1 
         END 
         ELSE 
         BEGIN 
           RETURN 1 
         END 
     END 
     ELSE 
     BEGIN 
      RAISERROR('Column does not exist', 16, 1) 
     END 
    END 
    ELSE 
    BEGIN 
     RAISERROR('Group do not have permission', 16, 1) 
    END 

私は最初のプロシージャを呼び出す2番目の手順を作成しました。
コード:私はそれが正常に動作します最初の手順を実行したとき

CREATE PROCEDURE getAddPermissions(@username NVARCHAR(40), @column NVARCHAR(20)) 
AS 
    DECLARE @sSQL NVARCHAR(20) 
    IF EXISTS(SELECT * FROM userLogin WHERE username = @username) 
    BEGIN 
     SELECT @sSQL = userGroup.groupName FROM userGroup 
     INNER JOIN userLogin 
     ON userGroup.groupName = userLogin.groupName 
     WHERE userLogin.username = @username 

     EXEC sp_addPermissions @sSQL, @column 
    END 
    ELSE 
    BEGIN 
     PRINT 'User ' + @username + ' does not exist.' 
    END 

、それが1または-1を返します。しかし、私が2番目の手続きで最初の手続きを実行すると0を返し、1または-1を返しません。

答えて

1
EXEC @ReturnValue = sp_addPermissions @sSQL, @column 
関連する問題