Comment puis-je passer et utiliser le nom de colonne pour récupérer une variable bigint dans la colonne réelle?Comment transmettre une colonne en tant que paramètre dans la procédure stockée?
DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)
Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)
Le message d'erreur indique "Doit déclarer la variable '@personID'." J'ai également essayé
Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
Et a reçu le message d'erreur "Erreur lors de la conversion du type de données varchar en bigint."
Des pensées?
@OMG Ponies Il y a toujours un risque ici, même si léger: les noms de colonne ne peuvent pas être passés comme paramètres de sp_executesql et donc la raison de la concaténation dans l'entrée (mais notez que les valeurs sont paramétrées). –
J'ai du mal à comprendre ce commentaire. Le document que vous citez est excellent, et une lecture standard sur SQL dynamique. Mais indépendamment de cela, il y a un énorme point d'injection SQL dans le code donné et dans votre réécriture, sauf si @PersonColumnID est nettoyé. Il était possible que le questionneur n'était pas au courant de cela. – Yellowfog
SELECT @PersonColumnID = '1; drop database blah - '; – Yellowfog