Doit déclarer la variable scalaire : résoudre l'erreur
Lors de l'exécution d'une requête SQL dans une procédure stockée à l'aide de T-SQL, il est courant de rencontrez l'erreur « Doit déclarer la variable scalaire » lors de l'utilisation de paramètres d'entrée globaux tels que @RowFrom et @RowTo. Ce problème survient lorsque la procédure tente d'utiliser ces paramètres dans la variable @sqlstatement.
Comprendre l'erreur
L'erreur se produit car T-SQL attend toutes les variables scalaires, y compris ceux définis comme paramètres d’entrée, à déclarer explicitement avant de pouvoir être utilisés. Dans le scénario donné, @RowFrom et @RowTo ne sont pas déclarés dans la variable @sqlstatement, ce qui entraîne l'erreur.
Solution : déclaration des paramètres
Pour résoudre cette erreur , nous devons déclarer les variables scalaires dans la variable @sqlstatement. Ceci peut être réalisé en utilisant l'instruction DECLARE, comme indiqué dans le code modifié ci-dessous :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Dans ce code, nous déclarons la variable scalaire @Rt et lui attribuons la valeur de @RowTo après l'avoir convertie en une chaîne en utilisant la fonction CONVERT. Cela garantit que @Rt est correctement déclaré et peut être utilisé dans la variable @sqlstatement.
Concat vs. Parameterization
Alors que la concaténation peut être utilisée pour créer la chaîne SQL , il est généralement recommandé d'utiliser le paramétrage pour des raisons de sécurité. En utilisant des paramètres, nous minimisons le risque d'attaques par injection SQL. Le code modifié ci-dessous illustre comment le paramétrage peut être utilisé :
SET @sql = N'SELECT @RowFrom, @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
En utilisant le paramétrage, nous fournissons les valeurs de @RowFrom et @RowTo à la procédure stockée sans les concaténer dans l'instruction SQL, garantissant ainsi la sécurité de notre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!