Access 데이터를 SQL Server 마이그레이션하거나 SQL Server 백 엔드 데이터베이스로 사용하여 Access 솔루션을 만드는 경우 Access SQL과 SQL Server TSQL(Transact SQL)의 차이점을 알고 있는 것이 중요합니다. 다음에 이어지는 내용은 솔루션이 예상대로 작동할 수 있도록 알아야 하는 중요한 변동 사항입니다.
자세한 내용은 Access SQL: 기본 개념, 어휘 및 구문 및Transact-SQL 참조를 참조하세요.
구문 및 표현식 차이점
변환이 필요한 몇 가지 구문 및 표현식 차이가 있습니다. 다음 표에는 가장 일반적인 내용이 요약되어 있습니다.
| 차이 | Access SQL | SQL Server TSQL |
|---|---|---|
| 관계형 데이터베이스 특성 | 일반적으로 필드라고 합니다. | 일반적으로 열이라고 합니다. |
| 문자열 리터럴 | 따옴표(")(예: "Mary Q. Contrary") | 아포스트로피(')(예: 'Mary Q. Contrary') |
| 날짜 리터럴 | 파운드 기호(#)(예: #1/1/2019#) | 아포스트로피(')(예: '1/1/2019') |
| 여러 개의 와일드 카드 문자 | 별표(*)(예: "Cath*") | 백분율(%)(예: 'Cath%') |
| 단일 와일드 카드 문자 | 물음표(?)(예: "Cath?") | 밑줄(_)(예: "Cath_") |
| 모듈로 연산자 | MOD 연산자(예: Value1 MOD Value2) | 퍼센트(%)(예: Value1 % Value2) |
| 부울 값 | WHERE Bitvalue = [True | False] 또는 WHERE Bitvalue = [-1 | 0] |
WHERE Bitvalue = [1 | 0] |
| 매개 변수 | [<정의된 열>이 아닌 이름] 또는 SQL 보기에서 SQL 매개 변수 선언을 사용합니다. |
@ParamName |
참고
Access에서는 테이블 이름과 개체 주위에 따옴표 문자(")를 사용합니다. T-SQL은 공백이 포함된 테이블 이름에 이 문자를 사용할 수 있지만, 표준 명명 방법이 아닙니다. 대부분의 경우 공백 없이 개체 이름을 변경해야 하지만, 새 테이블 이름을 반영하도록 쿼리도 다시 작성해야 합니다. 이름을 바꿀 수 없지만 명명 표준을 따르지 않는 테이블에 대괄호([])를 사용하세요. 또한 Access는 쿼리의 매개 변수 주위에 추가 괄호를 추가하지만, T-SQL에서 이를 제거할 수 있습니다.
여러 데이터베이스에서 날짜를 일관되게 표시하고 날짜 정렬 순서를 유지하는, 문자로 저장된 날짜의 ODBC 표준인 정식 날짜 형식(yyyy-mm-dd hh:nn:ss)을 사용하는 것이 좋습니다.
부울 값을 비교할 때 혼동을 피하기 위해 다음과 같은 Access 및 SQL Server 비교를 사용할 수 있습니다.
- false 값 테스트 WHERE Bitvalue = 0
- true 값 테스트 WHERE Bitvalue <> 0
Null 값
null 값은 "전혀 값 없음"을 의미하는 빈 필드가 아닙니다. Null 값은 데이터가 없거나 알 수 없음을 나타내는 자리 표시자입니다. null 값을 인식하는 데이터베이스 시스템은 "세 가지 값의 논리"를 구현합니다. 이는 true, false 또는 unknown일 수 있음을 의미합니다. null 값을 제대로 처리하지 않으면 같음 비교를 하거나 WHERE 절을 평가할 때 잘못된 결과를 얻을 수 있습니다. 다음은 Access와 SQL Server에서 Null 값을 처리하는 방법입니다.
표에서 Null 값을 사용하지 않도록 설정
Access 및 SQL Server에서 기본 환경은 Null 값을 사용하는 것입니다. 테이블 열에서 Null 값을 비활성화하려면 다음을 실행합니다.
- Access에서 필드의 필수 속성을 예로 설정합니다.
- SQL Server에서 NOT NULL 특성을 CREATE TABLE 문에 있는 열에 추가합니다.
WHERE 절의 Null 값 테스트
IS NULL 및 IS NOT NULL 비교 조건 사용:
Access에서 IS NULL 또는 IS NOT NULL을 사용합니다. 예:
SELECT … WHERE column IS NULL.SQL Server에서 IS NULL 또는 IS NOT NULL을 사용합니다. 예:
SELECT … WHERE field IS NULL
함수를 사용하여 Null 값 변환
표현식을 보호하고 대체 값을 반환하는 데 Null 함수 사용:
Access에서 0 또는 다른 값을 반환하는 NZ (value, [valueifnull]) 함수를 사용합니다. 예:
SELECT AVG (NZ (Weight, 50) ) FROM ProductSQL Server에서 0 또는 다른 값을 반환하는 ISNULL(Value, replacement_value) 함수를 사용합니다. 예:
SELECT AVG (ISNULL (Weight, 50)) FROM Product
데이터베이스 옵션 이해
일부 데이터베이스 시스템에는 독점적 메커니즘이 있습니다.
- Access에는 Null과 관련된 데이터베이스 옵션이 없습니다.
- SQL Server = 및 <> 연산자를 사용하여 NULL과의 직접 같음 비교에 SET ANSI_NULLS OFF 옵션을 사용할 수 있습니다. 이 옵션은 더 이상 사용되지 않으므로 사용 하지 않는 것이 좋습니다. 이 옵션을 사용하면 ISO 규격 Null 처리를 사용하는 다른 사용자가 혼동될 수 있습니다.
변환 및 캐스팅
데이터 또는 프로그래밍과 관련하여 작업할 때마다, 한 데이터 형식을 다른 데이터 형식으로 변환해야 합니다. 변환 프로세스는 간단할 수도 있고 복잡할 수도 있습니다. 고려해야 하는 일반적인 문제: 암시적 또는 명시적 변환, 현재 날짜 및 시간 지역 설정, 숫자 반올림 또는 잘림, 데이터 유형 크기. 철저한 테스트와 결과 확인을 대체할 수 있는 것은 없습니다.
Access에서는 형식 변환 함수 중에 C 문자로 시작하고 각 데이터 유형에 속하는 11개의 함수를 사용합니다. 예를 들어, 부동 소수점 숫자를 문자열로 변환하려면 다음을 실행 합니다.
CStr(437.324) returns the string "437.324".
SQL Server 특수 요구 사항에 대한 다른 변환 함수가 있지만 주로 CAST 및 CONVERT TSQL 함수를 사용합니다. 예를 들어, 부동 소수점 숫자를 문자열로 변환하려면 다음을 실행 합니다.
CONVERT(TEXT, 437.324) returns the string "437.324"
DateAdd, DateDiff 및 DatePart 함수
일반적으로 사용되는 날짜 함수는 Access 및 TSQL에서 유사하지만(DateAdd, DateDiff 및 DatePart), 첫 번째 인수의 사용은 다릅니다.
Access에서 첫 번째 인수를 interval이라고 하며 따옴표가 필요한 문자열 식입니다.
SQL Server 첫 번째 인수를 datepart라고 하며 따옴표가 필요하지 않은 키워드(keyword) 값을 사용합니다.
구성 요소 Access SQL Server 연도 "yyyy" year, yy, yyyy 분기 "q" quarter, qq, q 월 "m" month, mm, m 일년 중 몇째날 "y" dayofyear, dy, y 일 "d" day, dd, d 주 "ww" wk, ww 요일 "w" weekday, dw 시간 "h" hour, hh 분 "n" minute, mi, n 초 "s" second, ss, s 밀리초 millisecond, ms
함수 비교
Access 쿼리에는 때때로 Access 함수를 사용하여 결과를 구하는 계산된 열이 포함될 수 있습니다. 쿼리를 SQL Server로 마이그레이션하는 경우, 가능한 경우 Access 함수를 등가의 TSQL 함수로 대체해야 합니다. 해당하는 TSQL 함수가 없는 경우 일반적으로 계산 열(계산 열 에 사용되는 TSQL 용어)을 만들어 원하는 작업을 수행할 수 있습니다. TSQL에는 다양한 함수가 있으며 사용 가능한 기능을 확인할 수 있습니다. 자세한 내용은 SQL Database 함수란?을 참조하세요.
다음 표에서는 대응하는 TSQL 함수가 있는 Access 함수를 보여 줍니다.