2017-05-17 1 views
0

J'utilise une variable locale pour faire défiler les différentes bases de données. J'essaie de faire apparaître la valeur de la variable actuelle dans le jeu de résultats. Il fonctionne bien lorsque la variable utilisée uniquement comme préfixe DB, mais quand je change de nom hardcoded DB deVariable locale en SQL dynamique utilisée comme préfixe et valeur

SET @sqlqueryNILS = 'SELECT ''A1'' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable' 

à

SET @sqlqueryNILS = 'SELECT ' + @ODSname + ' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable' 

il échoue avec l'erreur suivante, peu importe combien de citations supplémentaires J'utilise .

'Msg 207, Level 16, State 1, Line 1 
Invalid column name 'A1'. 
Msg 207, Level 16, State 1, Line 1 
Invalid column name 'B2'. 
Msg 207, Level 16, State 1, Line 1 
Invalid column name 'C3'' 

Requête:

CREATE TABLE #ODS_NILS(SourceDB NVARCHAR(6), NilConts INT) 
CREATE TABLE A1..MyTable(NilConts INT) 
INSERT INTO A1..MyTable SELECT 22 
CREATE TABLE B2..MyTable(NilConts INT) 
INSERT INTO B2..MyTable SELECT 24 
CREATE TABLE C3..MyTable(NilConts INT) 
INSERT INTO C3..MyTable SELECT 25 

DECLARE @odslist TABLE (id INT IDENTITY(1,1),ODSDB NVARCHAR(20))       
DECLARE @count INT = 1      
DECLARE @total INT      
INSERT INTO @odslist SELECT 'A1' UNION SELECT 'B2' UNION SELECT 'C3'      

SELECT @total = MAX(id) FROM @odslist      
WHILE @count <= @total      
BEGIN      
DECLARE @ODSname NVARCHAR(20), @sqlqueryNILS NVARCHAR(max)    
SELECT @ODSname = ODSDB FROM @odslist WHERE id = @count 


SET @sqlqueryNILS = 'SELECT ''A1'' AS SourceDB, NilConts FROM ' + @ODSname + '..MyTable' 

INSERT INTO #ODS_NILS EXEC(@sqlqueryNILS)  
SET @sqlqueryNILS = NULL   
SET @[email protected]+1;     
END; 

SELECT * FROM #ODS_NILS 
+0

Il n'y a pas de table appelé 'MyTable' dans votre script! –

+0

pour quoi + '..MyTable'? – maSTAShuFu

+0

Cela n'a pas vraiment d'importance car il existe dans différentes bases de données, mais ok, a ajouté celui-ci. – Mchief

Répondre

0

sqlqueryNILS est nvarchar si

SET @sqlqueryNILS = N'SELECT