2009-11-30 10 views
3

J'ai examiné ce tableau un certain nombre de fois ce matin et je ne trouve pas le problème. C'est probablement mort simple et je me sentirai comme un idiot quand quelqu'un le fait remarquer. Qu'est-ce que ce SQL échouerait?Echec de l'ajout d'une colonne à une table temporaire

-- Get CurrentRowCount 
DECLARE @MaxID INT 

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0) 
FROM caWorkType 

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1) 

erreur que je reçois est: « syntaxe incorrecte près de « @MaxID » » J'ai vérifié et @MaxID est mis en 45 par l'instruction select. La table temporaire #WorkType n'a pas non plus une colonne nommée « _rowid »

+0

Motif: JIT-SQL, composer l'instruction SQL dans une variable SQL, puis exécutez l'instruction. – Don

Répondre

2

Ce n'est pas l'acte d'essayer d'ajouter une colonne à une table temporaire qui échoue, mais vous ne pouvez pas utiliser une variable en spécifiant les valeurs pour IDENTITY:

PAS OK:

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1) 

OK:

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(55,1) 

Marc

+0

ah ok! Merci un million, le code m'a été donné par une personne âgée et j'ai pensé que je le bourrais. Merci encore. – StevenMcD

4

La clause IDENTITY n'aime pas les variables. Utilisez sp_executesql pour exécuter l'instruction ALTER:

-- Get CurrentRowCount 
DECLARE @MaxID INT 

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0) 
FROM caWorkType 

DECLARE @sql varchar(max); 
SET @sql = 'ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(' + 
     CAST(@MaxID as varchar) + 
     ',1)'; 
EXEC sp_executesql @statement = @sql; 
+0

bonne idée, merci – StevenMcD

Questions connexes