Aujourd'hui, un bogue qui était vraiment difficile à traquer s'est manifesté dans notre projet.Paramètres SQL Server sans "@"/littéraux de chaîne
Nous avions un déclencheur qui effectuait certaines actions lorsque les données étaient insérées ou mises à jour, y compris l'appel de plusieurs procédures stockées, et le programme semblait fonctionner correctement. Sauf quand ce n'est pas le cas. Après des heures de coiffure, nous avons finalement trouvé le coupable: un "@" manquant devant un nom de paramètre dans une instruction EXEC. L'exemple minimal suivant montre le problème:
CREATE PROCEDURE EchoString @TheString nvarchar(30)
AS
SELECT @TheString
GO
declare @MyString char(10) = 'FooBar!'
exec EchoString @MyString
exec EchoString MyString -- Why does this work?
Maintenant, cela m'a fait me demander: quel est le but de permettre cela? Est-ce seulement pour la rétrocompatibilité, ou y a-t-il des cas d'utilisation légitimes pour cela? Est-il documenté quelque part (mon googling faible est vide, mais "@" n'est pas tout ce que google-able.)
Merci de votre participation. +1 Si quelqu'un a des indications sur la documentation ou une justification de cette fonctionnalité, ce serait formidable; sinon j'accepterai cette réponse dans un petit moment. – Eyvind