bestsource

SQL Server 데이터베이스 이름에 사용할 수 있는 문자는 무엇입니까?

bestsource 2023. 7. 18. 21:49
반응형

SQL Server 데이터베이스 이름에 사용할 수 있는 문자는 무엇입니까?

고객에게 새로운 SQL Server 데이터베이스를 생성하는 도구를 제공할 예정이며, 제공하는 데이터베이스 이름에 대해 기본적인 검증을 수행할 수 있기를 원합니다. SQL Server 설명서에서는 데이터베이스 이름에 사용할 수 있는 문자에 대해 설명합니다.그러나 이름이 문서화된 규칙을 위반하는 데이터베이스를 성공적으로 만들 수 있기 때문에 문서가 잘못된 것 같습니다.

SQL Server의 CREATE DATABASE 설명서에 따르면 데이터베이스 이름은 식별자 규칙을 준수해야 하며 식별자 규칙은 데이터베이스 호환성 수준에 따라 다릅니다.호환성 수준이 100인 경우(SQL Server Management Studio에 따르면 "SQL Server 2008"을 의미함) 이름은 유니코드 문자로 시작해야 합니다._,@또는#의 문자, 하이의문자상나, 자숫,,@,$,#또는_설명서에는 포함된 공백이나 특수 문자가 허용되지 않음이 명시되어 있습니다.

이 SQL Server Management Studio인 할 수 있기 가능한 증거를 할 수 .This & That | "Other"포함되어 만 아니라 되어 있습니다.|,"파일 이름으로도 유효하지 않습니다.확인해보니 데이터베이스의 호환성 수준은 해당 호환성 수준에서 이름이 유효하지 않은 것으로 문서화되어 있음에도 불구하고 실제로 "SQL Server 2008 (100)"입니다.

나는 장젠, 나할수있요도 할수요.CREATE DATABASE " "(예, 단일 공백입니다.) 이는 첫 번째 문자가 문자, 밑줄, 기호 또는 파운드 기호일 필요가 없음을 증명합니다.

SQL Server 데이터베이스 이름에서 사용할 수 있는 문자는 무엇입니까?SQL Server의 실제 동작과 일치하는 문서화된 규칙이 있습니까?

식별자에 대한 규칙은 끝에 다음과 같이 명시되어 있습니다.

Transact-SQL 문에 식별자를 사용하는 경우 이러한 규칙을 준수하지 않는 식별자는 큰따옴표 또는 괄호로 구분해야 합니다.

이러한 규칙과 일치하지 않는 데이터베이스 이름을 선택하면 항상 큰따옴표 또는 괄호로 묶어야 합니다.

일반 식별자에 대한 규칙을 준수하는 경우 따옴표/괄호 없이 데이터베이스 이름을 사용할 수 있습니다.

다음 지침은 정상입니다.

CREATE DATABASE [conformingName]
CREATE DATABASE conformingName
CREATE DATABASE [This & That | "Other"]

하지만 아닙니다.

CREATE DATABASE This & That | "Other"

편집:

저는 이것이 링크된 설명서를 이해하는 방법이 아니라는 것에 동의합니다.식별자가 동봉되는 즉시 규칙이 더 이상 적용되지 않는 경우 식별자 규칙을 준수해야 한다는 것은 무엇을 의미합니까?부적합 식별자를 포함하는 점은 규칙의 일부여야 합니다.

일반 식별자와 구분 식별자 사이에는 차이가 있습니다.일반 식별자는 언급한 제한 사항에 따라 제한되지만 구분 기호는 구분 기호를 제외한 모든 문자를 포함할 수 있습니다.

식별자 주위에 따옴표를 사용하기 때문에 구분된 식별자이며 일반 식별자 규칙에 제한되지 않습니다.

구분 기호 없이 일반 식별자 규칙을 따르는 식별자로만 데이터베이스를 작성할 수 있습니다.

create database db_name

구분 기호를 사용하면 거의 모든 항목을 사용할 수 있습니다.

create database "That's a funny name, isn't it?"

create database [)(/%Q)/#&%¤)Q/#)!]

개인적으로 저는 그것들을 알파벳과 숫자로 제한하고 다른 것은 아무것도 하지 않을 것입니다(아마도 _일 것입니다).공간, 재미있는 기호, 마차 반환 등이 없습니다.이것이 당신이 할 수 있는 가장 안전합니다.

구분자 이름(괄호 또는 큰따옴표로 둘러싸인 경우)은 기본적으로 구분자 자체가 아닌 다른 이름을 포함할 수 있습니다.일부 이스케이프 논리를 사용하여 이름 내의 구분 기호를 사용할 수도 있습니다.종료 이스케이프 문자만 이스케이프해야 합니다.아래의 첫 번째 예에서는 이름에 있는 여는 이스케이프 문자의 단일 인스턴스를 이스케이프할 필요가 없는 반면 닫는 이스케이프 문자는 이스케이프해야 합니다(단일 인스턴스를 두 개로 대체).여기서 논리는 이러한 문장을 구문 분석하는 코드가 닫는 이스케이프 문자를 찾고 있으며 중첩된 여는 이스케이프 문자에는 관심이 없다는 것입니다.

  • [시험[시험] -> 시험[시험]
  • [시험] -> 시험]시험

다음은 SQL Server 2012에서 따옴표로 묶이지 않은(따옴표로 묶이지 않은) 식별자 이름과 관련된 규칙에 대한 설명입니다.MySQL에서 SQL Server 2012로 마이그레이션 안내서의 발췌본입니다.

스키마 개체 이름

SQL Server 2012에서 개체 이름은 최대 128자까지 사용할 수 있습니다.

따옴표로 묶지 않은 식별자 이름은 다음 규칙을 따라야 합니다.

  • 첫 번째 문자는 영숫자, 밑줄(_), 앳 마크(@) 또는 숫자 기호(#)여야 합니다.
  • 이후 문자에는 영숫자, 밑줄, at(@) 기호, 숫자 기호 또는 달러 기호가 포함될 수 있습니다.
  • 식별자는 Transact-SQL 예약 단어가 아니어야 합니다.MySQL에서 SQL Server 2012로 마이그레이션 안내서 8
  • 포함된 공백이나 특수 문자는 허용되지 않습니다.

@ 또는 숫자 기호로 시작하는 식별자는 특별한 의미를 가집니다.@로 시작하는 식별자는 로컬 변수 이름입니다.숫자 기호로 시작하는 것은 임시 테이블 이름입니다.

Transact-SQL에서 식별자 이름을 따옴표로 묶으려면 대괄호([])를 사용해야 합니다.

언급URL : https://stackoverflow.com/questions/4200351/what-characters-are-valid-in-an-sql-server-database-name

반응형