Nom de colonne non valide à l'aide de SQL dynamic

J'essaye d'employer le SQL dynamic pour la 1ère fois – Maintenant je comprends l'essentiel de cela mais essayant cependant d'entrer un paramètre dans une table temporaire utilisant le SQL dynamic j'obtiens le "Nom de Colonne Invalide" quand j'essaye simplement de entrez ceci comme text n'ayant pas l'intention d'être une colonne.

Sur une note de côté, il vaut la peine que je mentionne que je cours cela sur SQL Server 2005.

C'est ma requête en cours d'exécution

SELECT ARCHV_FLAG,PATNT_REFNO,ACTIVE_NAMES,AINPT_REFNO INTO #TEMP FROM ACTIVE_NAMES WHERE PATNT_REFNO = 1 AND ARCHV_FLAG = 'C' Fix SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'''+@TABLE +''' AS [ACTIVE_NAMES],'+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' 

Merci d'avance.

 DECLARE @SQL NVARCHAR(4000), @SQL1 NVARCHAR(4000), @TABLE VARCHAR (100), @PK VARCHAR (50), @PATNT INT SET @PATNT = 1 CREATE TABLE #TEMP ( ARCHV_FLAG VARCHAR (1), PATNT_REFNO INT, TABLE_NAME VARCHAR (100), PRIMARY_KEY INT ) CREATE TABLE #TABLE (NAME VARCHAR (100)) INSERT INTO #TABLE (NAME) VALUES ('ACTIVE_NAMES') SELECT * FROM #TABLE DECLARE Cur CURSOR FOR SELECT NAME FROM #TABLE OPEN Cur FETCH NEXT FROM Cur INTO @TABLE WHILE @@FETCH_STATUS = 0 BEGIN SET @PK = (SELECT C.NAME FROM SYS.COLUMNS C JOIN SYS.tables T ON C.object_id = T.object_id WHERE T.name = @TABLE AND C.is_identity = 1) SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'+@TABLE +','+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' EXEC SP_EXECUTESQL @SQL select @sql FETCH NEXT FROM Cur INTO @TABLE END CLOSE Cur DEALLOCATE Cur SELECT * FROM #TEMP DROP TABLE #TEMP DROP TABLE #TABLE 

    Si vous souhaitez que le SQL dynamic traite votre variable comme une string littérale et non comme un nom de colonne, vous devez l'insert dans des guillemets simples:

     SET @SQL = 'SELECT ARCHV_FLAG,PATNT_REFNO,'''+@TABLE +''' AS [ACTIVE_NAMES],'+ @PK + ' INTO #TEMP FROM ' + @TABLE + ' WHERE PATNT_REFNO = '+ CAST(@PATNT AS VARCHAR (100))+ ' AND ARCHV_FLAG = ''C''' EXEC SP_EXECUTESQL @SQL