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
Il n'y a pas de table appelé 'MyTable' dans votre script! –
pour quoi + '..MyTable'? – maSTAShuFu
Cela n'a pas vraiment d'importance car il existe dans différentes bases de données, mais ok, a ajouté celui-ci. – Mchief