Je cherche à sélectionner parmi plusieurs tables (MainTbl) mais cela dépendra de l'ensemble de résultats (StateTbl) des tables à extraire.Transmettre la variable dans SELECT FROM Loop
MainTables dbo.TABLE_MO
, dbo.TABLE_CA
, dbo.TABLE_AL
, dbo.TABLE_MI
recherche uniquement à tirer basé sur resultset StateTbl MO
, CA
, WA
Declare @Loop_Count int = 0
DECLARE @State varchar(2)
DECLARE @SQL varchar(max)
DECLARE db_cursor CURSOR FOR SELECT State FROM StateTbl
OPEN db_cursor
FETCH db_cursor INTO @State
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @SQL =
'
dbo.TABLE_'+ @State +'
'
EXEC(@SQL)
SET @Loop_Count = @Loop_Count + 1
FETCH db_cursor INTO @SQL
END
CLOSE db_cursor
DEALLOCATE db_cursor
Comment est-ce que 'EXEC (@SQL)' est supposé sélectionner à partir d'une table? '@ SQL' ne contiendra que le nom d'une table. Ne devriez-vous pas faire 'SET @SQL = 'SELECT * FROM dbo.TABLE _' + @State + '''? –
Possible Dupliquer: https://stackoverflow.com/questions/20054854/tsql-select-from-different-table-based-on-a-case-value –
Vous n'avez pas besoin d'une boucle pour cela. –