SQL Server 대/소문자 구분 검사?
SQL Server의 데이터베이스가 대소문자를 구분하는지 확인하려면 어떻게 해야 합니까?이전에 쿼리를 실행했습니다.
SELECT CASE WHEN 'A' = 'a' THEN 'NOT CASE SENSITIVE' ELSE 'CASE SENSITIVE' END
하지만 이것이 실제로 과거에 저에게 문제를 주었기 때문에 저는 다른 방법을 찾고 있습니다.
- 더 정보 된 저장입니다.기존 제품에는 많은 사전 작성된 저장 프로시저가 있습니다. 프로시저에서는@test != @TEST
서버 자체의 민감도에 따라 달라집니다.그래서 제가 찾고 있는 것은 서버의 민감도를 확인하는 가장 좋은 방법입니다.
데이터 정렬은 다양한 수준에서 설정할 수 있습니다.
- 서버
- 데이터베이스
- 기둥.
따라서 대/소문자 구분 열을 대/소문자 구분 데이터베이스에 둘 수 있습니다.데이터 열 하나의 대/소문자 구분을 위한 비즈니스 사례가 만들어질 수 있는 상황은 아직 보지 못했지만, 있을 수 있다고 생각합니다.
서버 데이터 정렬 확인
SELECT SERVERPROPERTY('COLLATION')
데이터베이스 정렬 확인
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
열 조합 검사
select table_name, column_name, collation_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = @table_name
기본 정렬 옵션을 사용하여 SQL Server를 설치한 경우 다음 쿼리에서 동일한 결과를 반환할 수 있습니다.
CREATE TABLE mytable
(
mycolumn VARCHAR(10)
)
GO
SET NOCOUNT ON
INSERT mytable VALUES('Case')
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
열 수준에서 강제로 정렬하여 쿼리를 변경할 수 있습니다.
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'case'
SELECT myColumn FROM myTable
WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case'
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'
SELECT DATABASEPROPERTYEX('<database name>', 'Collation')
이 설정을 변경하면 응용프로그램 및 SQL 쿼리에 영향을 줄 수 있으므로 먼저 이 테스트를 분리합니다.SQL Server 2000에서는 ALTER TABLE 문을 쉽게 실행하여 특정 열의 정렬 순서를 변경할 수 있으므로 대소문자를 구분해야 합니다.먼저 다음 쿼리를 실행하여 다시 변경해야 할 항목을 결정합니다.
EXEC sp_help 'mytable'
두 번째 레코드 세트에는 기본 시나리오에서 다음 정보가 포함되어야 합니다.
열_이름 조합
mycolumn SQL_Latin1_General_CP1_CI_AS
이제 'Collation' 열이 반환되는 것이 무엇이든 간에 대소문자를 구분하는 다음과 같은 변경을 수행한 후에는 무엇으로 다시 변경해야 하는지 알게 되었습니다.
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE Latin1_General_CS_AS
GO
SELECT mycolumn FROM mytable WHERE mycolumn='Case'
SELECT mycolumn FROM mytable WHERE mycolumn='caSE'
SELECT mycolumn FROM mytable WHERE mycolumn='case'
이렇게 하면 문제가 해결되지 않으면 새 ALTER TABLE 문을 실행하여 다시 변경할 수 있습니다(내 COLLATE 식별자를 이전에 찾은 식별자로 교체하십시오).
ALTER TABLE mytable
ALTER COLUMN mycolumn VARCHAR(10)
COLLATE SQL_Latin1_General_CP1_CI_AS
SQL Server 7.0을 사용하지 않는 경우 다음 해결 방법을 시도할 수 있습니다. 이 경우 성능이 다소 저하될 수 있습니다(첫 번째 일치에 대해서만 결과를 얻을 수 있음).
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10))
SELECT mycolumn FROM mytable WHERE
mycolumn = 'case' AND
CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10))
-- if myColumn has an index, you will likely benefit by adding
-- AND myColumn = 'case'
는 대/ Server에서 결정합니다.COLLATION
.
COLLATION
다양한 수준에서 설정할 수 있습니다.
- 서버 수준
- 데이터베이스 수준
- 열 수준
- 식 수준
확인할 수 있습니다.COLLATION
Raj More의 답변에 언급된 것처럼 각 수준에서.
서버 데이터 정렬 확인
SELECT SERVERPROPERTY('COLLATION')
데이터베이스 정렬 확인
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
열 조합 검사
select table_name, column_name, collation_name
from INFORMATION_SCHEMA.COLUMNS
where table_name = @table_name
식 조합 검사
식 수준의 경우COLLATION
당신은 그 표현을 볼 필요가 있습니다.:)
일반적으로 아래 예제와 같이 식의 끝에 있습니다.
SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;
데이터 정렬 설명
각 항목에 대한 설명 가져오기COLLATION
가치 이것을 시도해 보세요.
SELECT * FROM fn_helpcollations()
그리고 여러분은 이것과 같은 것을 봐야 합니다.
언제든지 입력할 수 있습니다.WHERE
필터링하고 사용자에 대한 설명만 볼 절COLLATION
.
여기에서 데이터 정렬 목록을 찾을 수 있습니다.
수집에 관심이 있으시군요.다음 스니펫을 기반으로 무언가를 만들 수 있습니다.
SELECT DATABASEPROPERTYEX('master', 'Collation');
갱신하다
편집 내용을 기준으로 - 다음과 같은 경우@test
그리고.@TEST
SQL Server가 아닌 두 개의 다른 변수를 참조할 수 있습니다.동일한 변수가 자신과 동일하지 않은 문제가 발견되면 해당 변수가NULL
,왜냐면NULL = NULL
false를 반환합니다.
이미 만든 테이블로 작업하는 가장 좋은 방법은 SQL Server 쿼리 편집기로 이동하는 것입니다.
유형:sp_help <tablename>
표의 구조가 표시됩니다. COLLATE 열에서 원하는 필드에 대한 세부 정보를 참조하십시오.
그런 다음 다음과 같은 쿼리를 입력합니다.
SELECT myColumn FROM myTable
WHERE myColumn COLLATE SQL_Latin1_General_CP1_CI_AS = 'Case'
다른 문자 스키마일 수 있습니다 <SQL_Latin1_General_CP1_CI_AS
>, 그래서 그 열에 대해 사용된 정확한 스키마를 찾는 것이 더 낫습니다.
SQL Server의 데이터베이스가 대소문자를 구분하는지 확인하려면 어떻게 해야 합니까?
아래 쿼리를 사용하여 정보가 제공된 데이터베이스가 대소문자를 구분하는지 여부 또는 이진 정렬(null 결과 포함)인지 여부를 반환할 수 있습니다.
;WITH collations AS (
SELECT
name,
CASE
WHEN description like '%case-insensitive%' THEN 0
WHEN description like '%case-sensitive%' THEN 1
END isCaseSensitive
FROM
sys.fn_helpcollations()
)
SELECT *
FROM collations
WHERE name = CONVERT(varchar, DATABASEPROPERTYEX('yourDatabaseName','collation'));
자세한 내용은 이 MSDN 정보를 참조하십시오.
SQL Server는 대소문자를 구분하지 않습니다. SELECT * FROM SomeTable
와 동일합니다.SeLeCT * frOM soMetaBLe
.
언급URL : https://stackoverflow.com/questions/1411161/sql-server-check-case-sensitivity
'programing' 카테고리의 다른 글
쉼표로 구분된 값으로 가득 찬 막대를 SQL Server IN 함수에 전달 (0) | 2023.06.21 |
---|---|
표를 파괴하지 않고 표 내용을 선택하는 방법은 무엇입니까? (0) | 2023.06.21 |
다른 클라우드 함수에서 클라우드 함수 호출 (0) | 2023.06.21 |
재할당 사용과 무료 사용의 차이점 -> malloc 함수 (0) | 2023.06.11 |
가장 많이 사용되지 않는 데이터 시각화 (0) | 2023.06.11 |