내 프로 시저가 2005 년 데이터베이스에서 정상적으로 작동했지만 PC가 사망하고 다시 설정할 때 2005 년이 아니라 2008 년이 설치되었습니다. 이제이 프로 시저가 결과를 반환하지 않습니다. 이전에이 논리를 사용했기 때문에 2 가지 버전의 차이점에 대한 질문을 던졌고 이후에 프로 시저를 변경하지 않고 작동 했으므로 SQL 2008을 사용하는 유일한 변경 사항이 있습니다왜 SQL2008은 내 저장 프로 시저에서 조건부 WHERE 절을 2005 년과 마찬가지로 해석하지 않습니까?
Visual Studio에서 프로 시저를 작성하고 AND 및 OR를 결합하여 표현할 수있는 각 변형을 구성 할 수 있도록 테이블의 SQL 창에 SELECT 문을 붙여 넣을 때이를 재구성하고 확장 한 것을 알았습니다.
내가 필요로하는 것은 선택적으로 두 매개 변수 중 하나를 전달하는이 프로 시저를 호출 할 수 있다는 것입니다. 따라서 componentType 만 전달하면 명령문의 마지막 명령문 부분을 평가하고 전달 된 값을 사용해야합니다. 값이 전달되지 않으면 조건의 IS NULL 측과 일치합니다.
ALTER PROCEDURE dbo.uspSel_ComponentByType(
@filterText VARCHAR(50) = NULL
, @componentType CHAR(2) = NULL)
AS
SELECT [pkComponentID], [ComponentType], [ComponentName], [fkSupplierID], [Cost], [WastageCost]
FROM [tblComponents] AS c INNER JOIN
[tblSuppliers] AS s ON [c].[fkSupplierID] = [s].[pkSupplierID]
WHERE ([ComponentName] LIKE @filterText + '%' OR [SupplierName] LIKE @filterText + '%')
AND [c].[IsDeleted] = 0
AND (@componentType IS NULL OR [ComponentType] = @componentType)
로 ANSI_NULLS 함께,이다,이 옵션을 설정하려면 인해 같아요? –
코드는 내가 작성한대로 Visual Studio (및 SSMS)가 구조를 바꿔서 다르게 배치합니다. –