2009-06-05 7 views
3

Salut J'écris une grande procédure stockée, qui crée une table de rapport dynamique, de n colonnes de taille, les 6 premiers sont constants le reste dépend de quelques arguments passés à la procédure pour crée la table avec les colonnes requises.TSQL ajout dynamique de colonnes dans la procédure stockée

Le problème que j'ai est la TSQL suivante

DECLARE @columnname VARCHAR(50) 
SET @columnname = 'on_' + @description 

IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports') 
     AND NAME = @columnname) 
BEGIN 
     ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END 

Je reçois des erreurs de syntaxe avec ce au @columnname dans l'instruction ALTER TABLE du code ci-dessus.

De même que je suis nouveau à ce sujet, je ne suis pas sûr que ce soit la meilleure façon de le faire, ou s'il y a de meilleurs moyens dans TSQL pour générer la table dynamique requise.

Répondre

13

Essayez ceci:

déclare @sql nvarchar (100)

ensemble @sql = 'ALTER rapports TABLE ADD '+ @ columnname +' VARCHAR (50) NULL'

exec sp_executesql @sql

2

ne peut pas se déplacer avoir à le faire de façon dynamique, je crois que votre changement BEGIN bloc à quelque chose comme ceci:

DECLARE @sql VARCHAR(8000) 

BEGIN  
    SET @sql = 'ALTER TABLE Table_1 ADD '[email protected]+' VARCHAR(50) NULL'  
    EXEC(@sql)   
END 
3

Essayez

DECLARE @columnname VARCHAR(50) 
SET @columnname = '[on_' + @description +']' 
IF NOT EXISTS(SELECT * FROM syscolumns WHERE id = OBJECT_ID('reports')  
    AND NAME = @columnname) 
BEGIN  
ALTER TABLE reports ADD @columnname VARCHAR(50) NULL 
END 
Questions connexes