2017-10-09 14 views
-1

J'appelle une procédure à partir d'un déclencheur et passe certains paramètres du déclencheur à la procédure. Les paramètres sont:Exception de syntaxe incorrecte de SQL Server lors de l'exécution avec sp_executesql

@table_name varchar(128), @where_str varchar(200) 

A l'intérieur de la procédure, je suis l'exécution d'une commande avec sp_executesql. Je pense que j'utilise une syntaxe incorrecte, mais je n'ai pas trouvé la résolution.

Ceci est la requête exécutée:

SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str'; 
    SET @ParmDefinition = N'@ptable_name varchar(128), @pwhere_str varchar(200)'; 

    execute sp_executesql @SqlString, @ParmDefinition, 
         @ptable_name = @table_name, @pwhere_str = @where_str; 

paramètres passés sont comme ça:

+0

Et d'une manière ou d'une autre, magiquement, nous saurons quelles valeurs ont été envoyées à ces paramètres? La syntaxe ne peut pas être vérifiée sans les valeurs de paramètre. –

+0

@Used_By_Already J'ai mis à jour la question comme vous l'avez demandé. – Tunahan

Répondre

0

Qu'est-ce que vous finissez par l'exécution est quelque chose comme:

DECLARE @ptable_name VARCHAR(128) = 'your_Table' 
,  @pwhere_str VARCHAR(200) = 'Your_where_clause' 

UPDATE @ptable_name 
SET  RepSt=2 
WHERE @pwhere_str 

Cela ne fonctionne pas, vous devez remplacer la variable sql exécutée:

SET @SqlString = N'update @ptable_name set RepSt=2 @pwhere_str'; 
SET @SqlString = REPLACE(REPLACE(@SqlString, '@ptable_name', @table_name), '@pwhere_str', @where_str) 

execute sp_executesql @SqlString 

(Très sale, mais c'est l'idée.)

+0

J'utilise cette solution et je tiens à vous remercier. Pour utiliser des variables int dans une chaîne sql concaténée, le remplacement est une solution qui sauve des vies. – Tunahan

0

SET @SqlString = N'update ' + @ptable_name + 'set RepSt = 2 @pwhere_str';

+0

Ça ne marchera pas. Cela fonctionne lorsque vous avez déclaré @ptable_name avant cette clause set. – Tunahan