2010-03-20 5 views
6

NULL 또는 임의의 int 값일 수있는 하나의 값을 보내는이 프로 시저를 호출하려고합니다.SET ANSI_NULLS를 설정 또는 해제하는 방법은 무엇입니까?

SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId [email protected] 

아래 주어진 코드에서 지금하고있는 것보다는이 단일 쿼리를 사용하고 싶습니다.

내가 검색 할 수있는 방법이 내가 할 수있는 this Link.

내가 ANSI_NULLS OFF

을 설정해야합니다 이에 따라 내 SQL 쿼리를 실행하기 전에이 절차 내에서이 설정 한 후이 일을 후에 다시 재설정 할 수 없습니다입니다.

ALTER PROCEDURE [Tags].[spOnlineTest_SubDomainSelect] 
    @SubDomainId INT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    -- Insert statements for procedure here 
    IF @SubDomainId IS NULL 
     SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId IS NULL 
    ELSE 
     SELECT DomainName, DomainCode FROM Tags.tblDomain WHERE SubDomainId [email protected] 
END 

은 무엇 ANSI_NULLS와 거래하거나 다른

답변

8

SET의 ANSI_NULLS가 편집 및 ON 또는 OFF를 설정하고 변경 업데이트 할 수 있습니다 ONY 만들 시저 저장 시간에 정의되고 런타임에 설정할 수 없습니다. SET 옵션

데이터베이스 엔진을 사용하여

From CREATE PROC

설정을 모두 SET의 QUOTED_IDENTIFIER의 을 저장하고 거래-SQL은 절차를 만들거나 수정 저장 될 때 ANSI_NULLS를 설정합니다. 이러한 원래 설정은 저장 프로 시저가 실행될 때 사용됩니다. 따라서 저장된 클라이언트 프로 시저가 실행 중일 때 모든 클라이언트 세션 설정 은 SET QUOTED_IDENTIFIER이고 SET ANSI_NULLS는 무시됩니다. 저장 프로 시저를 만들거나 수정할 때 다른 SET 옵션 (SET ARITHABORT, SET ANSI_WARNINGS 또는 SET ANSI_PADDINGS )이 저장되지 않습니다. 저장 프로 시저의 논리 이 특정 설정에 종속 된 경우 적절한 설정을 보장하기 위해 절차의 시작 부분에 SET 문을 포함시킵니다. SET 문이 저장 프로 시저에서 실행 된 일 때 설정은 실행이 완료 될 때까지만 적용됩니다.그런 다음 설정을 으로 저장 프로 시저가 호출되었을 때 이 저장된 값으로 복원됩니다. 이렇게하면 개별 클라이언트가 저장 프로 시저의 논리에 영향을주지 않고 옵션을 설정할 수 있습니다. SET ANSI_NULLS 미래에 ON 될 것이기 때문에

같은이 경우 SET QUOTED_IDENTIFIER

적용, IF ELSE 사용합니다.

또는 Peter Lang의 제안. , 솔루션 들으 현재 내가 통해 UR 솔루션에서 운동 것 : @SubDomainId이 NULL 정말 올바른 사용하지 NULL 때

는 ... 일을 SubDomainId = @SubDomainId을 기대

+0

@ gbn thx 꽤 좋은 설명을 제공합니다. –

2

는 단일 쿼리를 사용할 수없는 경우 사용 할 수있는 좋은 연습이 될 것인가?

SELECT DomainName, DomainCode 
FROM Tags.tblDomain 
WHERE (@SubDomainId IS NULL AND SubDomainId IS NULL) 
    OR (SubDomainId = @SubDomainId) 
+0

@ 피터 랭 정직합니다. 그러나 ANSI_NULLS에 대해서도 여전히 질문이 열려 있습니다. –

0

는 참고로, 난 당신이/편집을 만들 때

ANSI_NULLS OFF 

그것은 절차의 설정처럼, 절차에 적용 ... 확신 해요.

따라서 프로 시저에 ON 또는 OFF가 있습니다. 귀하의 예제는 프로 시저가 아닌 쿼리 였으므로 약간 혼란 스럽습니다.

그러나 "편집"절차를 예로 들면 SQL 2005/2008이있는 경우 새 탭에서 프로 시저를 엽니 다. 맨 위에 ANSI_NULLS OFF가 표시됩니다.

당신은 ...

+0

참고, 당신도 쿼리에서 해당 설정을 사용할 수 있습니다 ... 난 그냥 프로 시저와 어떻게 작동하는지 말하는 것입니다. –

+0

쿼리와 함께 사용하려고합니다. 프로 시저에 대해 잘 작동합니다. 즉 프로 시저에서 OFF로 설정하면됩니다. 하지만 나는 단지 그것을 쿼리를 위해서만 끄고 싶다. 어떠한 제안 ? –

관련 문제