2008-10-24 9 views
4

J'essaie d'obtenir la valeur de sql générée dans une procédure stockée.
L'exécution de cetteTSQL: Comment remplir une variable à l'aide d'une chaîne de commande sql générée sans curseur

DECLARE @sSQL varchar(5000), @retval int 
    DECLARE @tablename varchar(50) 

    SELECT @tablename = 'products' 

    SELECT @sSQL = 'SELECT @retval = MAX(ID)' 
    SELECT @sSQL = @sSQL + ' FROM ' + @tablename 
    EXEC (@sSQL) 

    SELECT @retval 

Je reçois

Must declare the variable '@retval'. 

Comment puis-je obtenir la valeur sans l'aide d'un curseur (que j'essaie d'éviter)?

Répondre

10

Vous devez utiliser sp_executesql:

DECLARE @retval int 
DECLARE @sSQL nvarchar(500); 
DECLARE @ParmDefinition nvarchar(500); 

DECLARE @tablename nvarchar(50) 
SELECT @tablename = N'products' 

SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename; 
SET @ParmDefinition = N'@retvalOUT int OUTPUT'; 

EXEC sp_executesql @sSQL, @ParmDefinition, @[email protected] OUTPUT; 

SELECT @retval; 
Questions connexes