2013-08-12 2 views
2

오늘 추적하기가 정말 어려웠던 버그가 우리 프로젝트에서 나타났습니다."@"/ 문자열 리터럴이없는 SQL Server 매개 변수

데이터가 삽입되거나 업데이트 될 때 여러 가지 저장 프로 시저를 호출하는 등의 특정 작업을 수행하는 트리거가 있었으며 프로그램이 올바르게 작동하는 것처럼 보였습니다. 그렇지 않은 경우를 제외하고.

헤어 테어 링이 끝난 후 EXEC 명령문에서 매개 변수 이름 앞에 누락 된 "@"가 나타납니다. 아래의 최소 예는이 문제를 보여줍니다.

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? 

이제이 사실이 궁금합니다.이를 허용하는 목적은 무엇입니까? 이전 버전과의 호환성을 위해서만 사용 되었습니까? 아니면 합법적 인 사용 사례가 있습니까? 그것은 어딘가에 문서화되어 있습니까 (내 약한 검색 결과는 공백으로 표시되지만 "@"는 모두 Google 기능이 아닙니다).

답변

6

경우에 따라 SQL Server는 이러한 매개 변수를 문자열로 해석합니다. 가장 잘 알려진 예 :이 문제가 설명되어 있지만, 코드를 작성하는이 방법은 확실히 깨지기 쉬운 이럴 경우 나도 몰라

EXEC sp_who2 'active'; 

:

EXEC sp_who2 active; 

은 동일합니다.

+0

입력 해 주셔서 감사합니다. +1. 누구든지 설명서에 대한 지침이 있거나이 기능의이면에있는 근거가 있으면 큰 도움이됩니다. 그렇지 않으면이 대답을 잠시 후 받아 들일 것입니다. – Eyvind