2012-10-01 1 views
1

내가 임시 절차에 봉착 제공 :이이 절차에서"NVARCHAR (255) 널은"정렬 confict

CREATE PROCEDURE 
#update_ListItemEntityNumberValueAndLocalizations(
    @modelPrefix NVARCHAR(255), 
    @definitionNeutralName NVARCHAR(255), 
    @listItemNeutralValue NVARCHAR(255),  
    @newNumberValue float, 
    @listItemEnName NVARCHAR(255), 
    @listItemDeName NVARCHAR(255)) 

을 다음 if 문 :

if(@listItemEnName is not null) 

그리고이 라인에서 다음과 같은 오류가 발생합니다.

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the is not operation.

왜 이런 일이 발생하고 그것을 피할 수 있는지 아는 사람이 있습니까?

UPDATE :는 "null의"데이터 정렬을 필요 않는 이유는 데이터베이스의 데이터 정렬 SQL_Latin1_General_CP1_CI_AS

입니까?

null을 전송하거나 매개 변수의 데이터 정렬을 설정하는 방법이 있습니까?

+0

http://stackoverflow.com/questions/1607560/cannot-resolve-the-collation-conflict-between-sql-latin1-general-cp1-ci-as-and –

+0

내 연구 중에도이 사실을 발견했지만 나는 이것이 어떻게 도움이 될지 모르겠다 ... 나는 어떤 테이블이나 컬럼, 매개 변수를 가지고 있지 않다./ –

+0

@Dominik_Kirschenhofer 데이터 정렬 충돌에 대한 나머지 코드를 확인한다. 오류의 라인 번호는 아마도 incorrct – TFD

답변

3

를 사용하여 명시 적 COLLATE 절

if(@listItemEnName COLLATE Latin1_General_CI_AS is not null) 

또는에 따라 선택적으로 의존하는 저장 프로 시저는 임시 저장 프로 시저를 만든 다음 아래와 같이 작동 할 수 있습니다 원래 데이터베이스에 다시 컨텍스트 스위칭 USE tempdb;에 컨텍스트를 전환하는 일 .

매개 변수가 tempdb의 데이터 정렬을 가진 것으로 간주되도록 임시 저장 프로 시저를 만듭니다. 그러나 tempdb에는 사용자 데이터베이스와 다른 데이터 정렬이 있어야합니다.

스토어드 프로 시저가 처음 생성 될 때 실험에서 알 수있는 한 나중에 다른 데이터베이스 컨텍스트에서 ALTER -ed가 실행되는 경우에도 사용중인 데이터베이스 컨텍스트에 바인딩됩니다.

. 예 : 나는 대소 문자를 구분 데이터 정렬 오전하지만 난

CREATE PROC#Foo2 
AS 
IF 'a' = 'A' 
    PRINT 'Yes' 
SELECT * 
FROM sys.database_files 

상관없이 소문자를 구분하지 데이터베이스에서 다음 절차를 작성하지 않는 경우 어떤 데이터베이스 나는 그것에서 실행하거나 계속 다른 데이터베이스를 -ing 때 USE 나는 그것을 변경하는 경우 "예"를 인쇄하고 원래 데이터베이스의 파일에 대한 정보를 반환합니다.

+0

이다. , 대단히 감사합니다! "in not null"이 데이터 정렬을 사용해야하는 이유를 설명해 주시겠습니까? –

+0

@DominikKirschenhofer - 이것에 대한 어떤 이유라도 생각할 수 없습니다. –

+2

@DominikKirschenhofer 'NULL'데이터 정렬 문제는 2012 년에 해결 된 버그입니다. [this connect bug report] (https://connect.microsoft.com/SQLServer/feedback/details/652116/scalar- variables-collation-bug-two-different-but-related-issues-in-one-simple-script)을 사용합니다. –