

# Babelfish에서의 T-SQL 차이점
<a name="babelfish-compatibility.tsql.limitations"></a>

현재 Babelfish 릴리스에서 지원되는 T-SQL 기능 표와 SQL Server와의 동작 차이점에 대한 몇 가지 참고 사항을 아래에서 확인할 수 있습니다.

다양한 버전 지원에 대한 자세한 내용은 [버전별 Babelfish에서 지원되는 기능](babelfish-compatibility.supported-functionality-table.md) 단원을 참조하세요. 현재 지원되지 않는 기능에 대한 자세한 내용은 [Babelfish에서 지원되지 않는 기능](babelfish-compatibility.tsql.limitations-unsupported.md) 단원을 참조하세요.

Babelfish는 Aurora PostgreSQL-Compatible Edition과 함께 사용할 수 있습니다. Babelfish 릴리스에 대한 자세한 내용은 [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/Welcome.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/Welcome.html)를 참조하세요.


| 기능 또는 구문 | 동작 또는 차이점에 대한 설명 | 
| --- | --- | 
| \$1(줄 연속 문자) | 문자 및 16진수 문자열에 대한 줄 연속 문자(줄 바꿈 앞 백슬래시)는 현재 지원되지 않습니다. 문자열의 경우 백슬래시-줄 바꿈은 문자열의 문자로 해석됩니다. 16진수 문자열의 경우 백슬래시-줄 바꿈으로 인해 구문 오류가 발생합니다. | 
| @@version | `@@version`에서 반환하는 값의 형식은 SQL Server에서 반환하는 값과 약간 다릅니다. `@@version` 형식에 따라 코드가 올바르게 작동하지 않을 수 있습니다. | 
| 집계 함수 | 집계 함수는 부분적으로 지원됩니다(AVG, COUNT, COUNT\$1BIG, GROUPING, MAX, MIN, STRING\$1AGG 및 SUM이 지원됨). 지원되지 않는 집계 함수 목록은 [지원되지 않는 함수](babelfish-compatibility.tsql.limitations-unsupported.md#babelfish-compatibility.tsql.limitations-unsupported-list4) 단원을 참조하세요. | 
|  ALTER TABLE  | 단일 열 또는 제약 조건의 추가 또는 삭제만 지원합니다. | 
|  ALTER TABLE..ALTER COLUMN  | NULL 및 NOT NULL은 현재 지정할 수 없습니다. 열의 null 허용 여부를 변경하려면 postgreSQL 문 ALTER TABLE..\$1SET\$1DROP\$1 NOT NULL을 사용합니다. | 
|  AT TIME ZONE  | 일광 절약 시간(DST)에서 표준 시간으로 전환되는 동안 표준 시간 오프셋을 사용하여 중첩되는 기간이 표시됩니다. 명확히 이해하기 위해 다음 예제를 검토하세요. <pre>SELECT CONVERT(DATETIME2(0), '2022-10-30T02:00:00', 126) AT TIME ZONE 'Central European Standard Time';<br />GO;<br />Result: 2022-10-30 02:00:00 +01:00</pre>  | 
| 열 별칭이 없는 빈 열 이름 | `sqlcmd` 및 `psql` 유틸리티는 빈 이름이 있는 열을 다르게 처리합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/babelfish-compatibility.tsql.limitations.html)  | 
| CHECKSUM 함수 | Babelfish와 SQL Server는 CHECKSUM 함수에 대해 서로 다른 해싱 알고리즘을 사용합니다. 따라서 Babelfish의 CHECKSUM 함수에서 생성된 해시 값은 SQL Server의 CHECKSUM 함수에서 생성된 해시 값과 다를 수 있습니다. | 
| 열 기본값 | 열 기본값을 생성할 때 제약 조건 이름은 무시됩니다. 열 기본값을 삭제하려면 `ALTER TABLE...ALTER COLUMN..DROP DEFAULT...` 구문을 사용합니다. | 
| Constraint\$1name | SQL Server에서 제약 조건 이름은 표가 속한 스키마 내에서 고유해야 합니다. 그러나 Babelfish에서는 PRIMARY KEY 및 UNIQUE 제약 조건에만 적용됩니다. 다른 유형의 제약 조건에는 이 제한이 적용되지 않습니다. | 
| 제약 조건 | PostgreSQL 개별 제약 조건 켜기 및 끄기를 지원하지 않습니다. 명령문이 무시되면서 경고가 발행됩니다. | 
| IGNORE\$1DUP\$1KEY를 사용한 제약 조건 | 제약 조건은 이 속성 없이도 생성됩니다. | 
| CREATE, ALTER, DROP SERVER ROLE |  ALTER SERVER ROLE은 `sysadmin`에 대해서만 지원됩니다. 다른 모든 구문은 지원되지 않습니다. Babelfish의 T-SQL 사용자는 로그인(서버 주체), 데이터베이스 및 데이터베이스 사용자(데이터베이스 주체)의 개념에 대해 SQL Server와 유사한 경험을 합니다.  | 
| CREATE, ALTER LOGIN 절은 제한된 구문으로 지원 | CREATE LOGIN... PASSWORD 절, ...DEFAULT\$1DATABASE 절 및 ...DEFAULT\$1LANGUAGE 절은 지원됩니다. ALTER LOGIN... PASSWORD 절은 지원되지만 ALTER LOGIN... OLD\$1PASSWORD 절은 지원되지 않습니다. sysadmin 구성원인 로그인만 암호를 수정할 수 있습니다. | 
| CREATE DATABASE 대/소문자 구분하는 데이터 정렬  | 대소문자 구분하는 데이터 정렬은 CREATE DATABASE 문에서 지원되지 않습니다. | 
| CREATE DATABASE 키워드 및 절 | COLLATE 및 CONTAINMENT=NONE을 제외한 옵션은 지원되지 않습니다. COLLATE 절은 허용되며 항상 `babelfishpg_tsql.server_collation_name` 값으로 설정됩니다. | 
| CREATE SCHEMA... 지원 절 | CREATE SCHEMA 명령을 사용하여 빈 스키마를 만들 수 있습니다. 추가 명령을 사용하여 스키마 객체를 생성합니다. | 
| Babelfish에서는 데이터베이스 ID 값이 다릅니다.  |  마스터 및 tempdb 데이터베이스는 데이터베이스 ID 1과 2가 아닙니다.  | 
|  FORMAT 날짜 유형 함수는 다음과 같은 제한 사항으로 지원됩니다. | 단일 문자 오전/오후는 지원되지 않습니다. SQL 서버의 ‘yyy’ 형식은 1000 이상의 연도에 대해 4자리를 반환하지만 다른 연도에 대해서는 3자리만 반환합니다. ‘g’ 및 ‘R’ 형식은 지원되지 않습니다. ‘vi-VN’ 로케일은 번역이 약간 다릅니다. | 
| 63자를 초과하는 식별자 | PostgreSQL은 식별자에 대해 최대 63자까지 지원합니다. Babelfish는 63자보다 긴 식별자를 원래 이름의 해시를 포함하는 이름으로 변환합니다. 예를 들어, 'AB(ABC1234567890123456789012345678901234567890123456789012345678901234567890'으로 생성된 테이블이 'ABC123456789012345678901234567890123456789012345678901234567890'으로 변환될 수 있습니다. | 
| IDENTITY 열 지원 | IDENTITY 열은 tinyint, smallint, int, bigint. numeric 및 decimal과 같은 데이터 유형에 대해 지원됩니다.SQL Server는 IDENTITY 열의 `numeric` 및 `decimal` 데이터 유형에 대해 38자리까지의 정밀도를 지원합니다.PostgreSQL은 IDENTITY 열의 `numeric` 및 `decimal` 데이터 유형에 대해 19자리까지의 정밀도를 지원합니다. | 
| IGNORE\$1DUP\$1KEY가 포함된 인덱스 | IGNORE\$1DUP\$1KEY가 포함된 인덱스를 생성하는 구문은 이 속성이 생략된 것처럼 인덱스를 만듭니다. | 
| 32개 이상의 열이 포함된 인덱스 | 인덱스에는 32개 이상의 열이 포함될 수 없습니다. 포함된 인덱스 열은 PostgreSQL의 최대값으로 계산되지만 SQL Server에서는 계산되지 않습니다. | 
| 인덱스(클러스터형) | 클러스터형 인덱스는 NONCLUSTERED가 지정된 것처럼 만들어집니다. | 
| 인덱스 절 | FILLFACTOR, ALLOW\$1PAGE\$1LOCKS, ALLOW\$1ROW\$1LOCKS, PAD\$1INDEX, STATISTICS\$1NORECOMPUTE, OPTIMIZE\$1FOR\$1SEQUENTIAL\$1KEY, SORT\$1IN\$1TEMPDB, DROP\$1EXISTING, ONLINE, COMPRESSION\$1DELAY, MAXDOP, DATA\$1COMPRESSION과 같은 절은 무시됩니다. | 
| JSON 지원 |  이름-값 쌍의 순서는 보장되지 않습니다. 그러나 배열 유형은 영향을 받지 않습니다. | 
| LOGIN 객체 | PASSWORD, DEFAULT\$1DATABASE, DEFAULT\$1LANGUAGE, ENABLE, DISABLE을 제외하고 LOGIN 객체의 모든 옵션이 지원되지 않습니다. | 
| NEWERENTIALID 함수 | NEWID로 구현되고 순차적 동작은 보장되지 않습니다. `NEWSEQUENTIALID`를 호출하는 경우 PostgreSQL은 새 GUID 값을 생성합니다. | 
| OUTPUT 절은 다음 제한 사항을 통해 지원됩니다. | OUTPUT 및 OUTPUT INTO는 동일한 DML 쿼리에서 지원되지 않습니다. OUTPUT 절에서 UPDATE 또는 DELETE 작업의 대상이 아닌 테이블에 대한 참조는 지원되지 않습니다. OUTPUT... DELETED\$1, INSERTED\$1는 동일한 쿼리에서 지원되지 않습니다. | 
| 프로시저 또는 함수 파라미터 제한 | Babelfish는 프로시저 또는 함수에 대해 최대 100개의 파라미터를 지원합니다. | 
| ROWGUIDCOL | 이 절은 현재 무시됩니다. `$GUIDGOL`을 참조하는 쿼리는 구문 오류를 일으킵니다. | 
| SEQUENCE 객체 지원 | SEQUENCE 객체는 tinyint, smallint, int, bigint, numeric 및 decimal과 같은 데이터 형식에 대해 지원됩니다. Aurora PostgreSQL은 SEQUENCE에서 numeric 및 decimal과 같은 데이터 유형에 대해 19자리까지의 정밀도를 지원합니다. | 
| 서버 수준 역할 | `sysadmin` 서버 수준 역할이 지원됩니다. 다른 서버 수준 역할(`sysadmin` 이외)은 지원되지 않습니다. | 
| `db_owner`를 제외한 데이터베이스 수준 역할 | `db_owner` 데이터베이스 수준 역할과 사용자 정의 데이터베이스 수준 역할이 지원됩니다. 다른 데이터베이스 수준 역할(db\$1owner 이외)은 지원되지 않습니다. | 
| SQL 키워드 SPARSE | 키워드 SPARSE는 승인되고 무시됩니다. | 
| SQL 키워드 절 `ON filegroup` | 이 절은 현재 무시됩니다. | 
| 인덱스 및 제약 조건에 대한 SQL 키워드 `CLUSTERED` 및 `NONCLUSTERED` | Babelfish는 `CLUSTERED` 및 `NONCLUSTERED` 키워드를 수락하고 무시합니다. | 
| `sysdatabases.cmptlevel` | `sysdatabases.cmptlevel`은 항상 120으로 설정됩니다. | 
| tempdb는 다시 시작 시 다시 초기화되지 않음 | tempdb에서 생성된 영구 객체(예: 테이블 및 프로시저)는 데이터베이스를 다시 시작할 때 제거되지 않습니다. | 
| TEXTIMAGE\$1ON 파일 그룹 | Babelfish는 `TEXTIMAGE_ON` *`filegroup`* 절을 무시합니다. | 
| 시간 정밀도 | Babelfish는 소수 초에 대해 6자리 정밀도를 지원합니다. 이 동작에는 부작용이 예상되지 않습니다. | 
| 트랜잭션 격리 수준 | READUNCOMMITTED는 READCOMMITTED와 동일하게 취급됩니다. | 
| 가상 계산 열(비영구적) | 가상 계산 열은 영구적으로 생성됩니다. | 
| SCHEMABINDING 절 제외 | 이 절은 함수, 프로시저, 트리거 또는 뷰에는 지원되지 않습니다. WITH SCHEMABINDING이 지정된 것처럼 객체가 생성됩니다. | 