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 값을 인식하는 데이터베이스 시스템은 "3개 값 로직"을 구현합니다. 즉, 항목은 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 Product
-
SQL 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에서 첫 번째 인수를 간격이라고 하고, 이는 따옴표가 필요한 문자열 식입니다.
-
SQL Server에서 첫 번째 인수를 날짜 부분이라고 하며 이는 따옴표가 필요하지 않은 키워드 값을 사용합니다.
구성 요소
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 데이터베이스 함수란?을 참조하세요.
다음 표에서는 대응하는 TSQL 함수가 있는 Access 함수를 보여 줍니다.
Access 범주 |
Access 함수 |
TSQL 함수 |
변환 |
||
변환 |
||
변환 |
||
변환 |
||
변환 |
||
변환 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
날짜/시간 |
||
도메인 집계 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
수학 |
||
프로그램 흐름 |
||
프로그램 흐름 |
||
통계 |
||
SQL 집계 |
||
SQL 집계 |
||
SQL 집계 |
||
SQL 집계 |
||
SQL 집계 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |
||
텍스트 |