2016-05-09 5 views
2

Ich versuche, eine Variable als Abfrageergebnis festzulegen. Mein Problem ist, dass unter dem Code in einer Weile läuft & schemaName ist immer anders.Set Variable mit Select-Abfrage mit dynamischen 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 

Wie schemaName as variable so einzustellen, dass es dynamisch in der while-Schleife sein kann.

+2

Sie würden dynamische SQL verwenden. –

Antwort

1

So etwas helfen:

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