2016-05-09 8 views
2

変数をクエリ結果として設定しようとしています。私の問題は、以下のコードがwhileループで実行されていることです。& schemaNameは常に異なっています。動的なスキーマ名を持つ選択クエリで変数を設定する

WHILE (@i <= (SELECT MAX(idx) FROM @schema_table)) 

BEGIN 
SET @userid = (SELECT AspNetUsers.Id 
       FROM schemaName.AspNetUsers 
       LEFT JOIN schemaNameAspNetUserRoles ON AspNetUserRoles.UserId = AspNetUsers.Id 
       LEFT JOIN schemaName.AspNetRoles ON AspNetRoles.Id = AspNetUserRoles.RoleId 
       WHERE AspNetRoles.Name = 'SuperAdmin') 
END 

schemaName as variableを設定する方法は、whileループで動的になるように設定してください。このような

+2

あなたは、動的SQLを使用しなければならないでしょう。 –

答えて

1

何かが役立ちます:

DECLARE @sql nvarchar(4000), 
     @schemaName nvarchar(200), 
     @i int = 1, 
     @vParams nvarchar(100) 

SET @vParams = '@uid int OUTPUT' 


WHILE (@i <= (SELECT MAX(idx) FROM @schema_table)) 

BEGIN 

    SELECT @schemaName = schemaName 
    FROM @schema_table 
    WHERE idx = @i 


    SELECT @sql = ' 
        SELECT @userid = AspNetUsers.Id 
        FROM schemaName.AspNetUsers 
        LEFT JOIN schemaNameAspNetUserRoles ON AspNetUserRoles.UserId = AspNetUsers.Id 
        LEFT JOIN [' [email protected] + '].AspNetRoles ON AspNetRoles.Id = AspNetUserRoles.RoleId 
        WHERE AspNetRoles.Name = ''SuperAdmin'';' 


    EXEC sp_executesql @sql, @vParams, @[email protected] OUTPUT 
    -- here you hot @userid with value you need and can do something with it 
    SET @i = @i + 1 

END 
関連する問題