SQL Server 2005 데이터베이스 엔진 기능의 동작 변경

업데이트: 2006년 7월 17일

이 항목에서는 이전 버전의 SQL Server와 달라진 Microsoft SQL Server 2005의 데이터베이스 엔진 동작에 대해 설명합니다.

백업 및 복구

SQL Server 2005에서는 기존 데이터베이스를 복원하는 경우 전체 또는 대량 로그 복구 모델에서 복원을 수행하기 전에 비상 로그를 백업해야 합니다. RESTORE 문에 WITH REPLACE나 WITH STOPAT 절이 포함되어 있지 않은 한 비상 로그 백업을 수행하기 전에 데이터베이스를 복원하면 오류가 발생합니다. 자세한 내용은 비상 로그 백업을 참조하십시오.

커서

다음 표에서는 SQL Server 2000과 달리 SQL Server 2005에서는 발생하지 않는 암시적 커서 변환을 보여 줍니다. 해결 방법은 암시적 변환을 사용하지 않고 특정 유형의 커서를 요청하는 것입니다.

조건 SQL Server 2000의 경우 변환되는 커서 원본 변환 대상

쿼리에 인라인 테이블 값 함수가 있습니다.

동적/키 집합

정적

쿼리가 원격 개체를 참조합니다.

빠른 전진

키 집합

쿼리에 테이블이 없습니다.

빠른 전진

정적

쿼리에 테이블 함수가 있습니다.

빠른 전진

정적

쿼리에 파생 테이블이 있습니다.

빠른 전진

정적

쿼리에 다중 문 테이블 함수가 있습니다.

동적

키 집합

키 집합에서 정적으로

정적

쿼리에 가상 테이블이 있습니다.

동적/키 집합

정적

쿼리에 TOP이 있는 뷰가 있습니다.

빠른 전진

정적

쿼리에 업데이트할 수 있는 분할 뷰가 있습니다.

빠른 전진

정적

API 커서 쿼리에 고유 액세스 경로를 포함하는 인덱싱된 뷰가 있지만 기본 테이블 수준이 아닙니다.

키 집합

정적

API 커서 쿼리에 클러스터형 인덱스 또는 고유 키가 없는 테이블이 있습니다.

키 집합

정적

API 커서 결과 집합에 text, ntext 또는 image 열이 있습니다.

빠른 전진

동적

SQL Server 2005에서는 키 집합 커서 또는 정적 Transact-SQL 커서의 비동기적 생성을 지원하지 않습니다. OPEN 또는 FETCH 등의 Transact-SQL 커서 작업은 일반적으로 일괄 처리되므로 비동기적으로 Transact-SQL 커서를 생성할 필요는 없습니다. SQL Server 2005에서는 각 커서 작업에 대한 클라이언트 왕복 수 때문에 짧은 대기 시간의 OPEN이 중요한 경우를 위해 비동기 키 집합 또는 정적 API 서버 커서를 계속 지원합니다.

SQL Server 2005에서는 고유 인덱스가 없는 테이블에 대해 동적 커서를 선언하고 커서 외부에서 행이 삭제되는 경우 커서를 새로 고치면 NULL 데이터를 포함하는 행의 자리 표시자가 검색됩니다. 이전 버전의 SQL Server의 경우 커서는 영향을 받은 행을 반환하지 않습니다.

SQL Server 2005에서는 일괄 처리 또는 저장 프로시저 내의 조건부 논리를 통해 다른 커서를 선언할 수 있는 경우 커서를 통해 INSERT, UPDATE 및 DELETE 문이 실행될 때 다시 컴파일이 수행됩니다. SQL Server 2000에서는 이러한 문에 의해 다시 컴파일이 수행되지 않습니다.

다음 예에서는 UPDATE 문에 의해 모듈이 다시 컴파일됩니다.

IF(@some_condition=1)
   DECLARE c CURSOR FOR 
      SELECT region FROM db.dbo.mytable ORDER BY lastname
ELSE
   DECLARE c CURSOR FOR 
      SELECT postalcode FROM db.dbo.mytable ORDER BY firstname
...
FETCH NEXT FROM c
...
UPDATE db.dbo.mytable 
   SET  firstname='a' WHERE CURRENT OF c

다시 컴파일하지 않도록 하려면 다음과 같이 코드를 다시 작성해야 합니다.

IF (@some_condition=1)
BEGIN
   DECLARE c CURSOR FOR 
     SELECT region FROM db.dbo.mytable ORDER BY lastname
   FETCH NEXT FROM c
   UPDATE db.dbo.mytable 
     SET  firstname='a' WHERE CURRENT OF c
END
ELSE
BEGIN
  DECLARE c CURSOR FOR 
    SELECT postalcode FROM db.dbo.mytable ORDER BY firstname
  FETCH NEXT FROM c
  UPDATE db.dbo.mytable 
    SET  firstname='a' WHERE CURRENT OF c
END

SQL Server 2005에서는 쿼리에 높은 잠금 힌트가 지정되지 않은 경우 커서 스크롤 잠금에서 S(공유)부터 U(업데이트)로의 잠금 업그레이드를 확보합니다. SQL Server 2000에서는 스크롤 잠금 커서에 명시적으로 U 잠금 힌트를 추가합니다. SQL Server 2005 동작은 더 나은 동시성을 제공하지만 동시 커서에 대한 교착 상태(메시지 1205)가 발생할 우려가 있습니다. 원하는 동작을 수행하려면 UPDLOCK 힌트를 사용하십시오. 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하십시오.

SQL Server 2000에서는 커서 인출 버퍼에 한 번 이상 나타나는 열 또는 행은 업데이트되는 반면 인출 버퍼의 크기 또는 버퍼 내 행의 위치에 의해 다른 동작은 업데이트로 반영되지 않을 수 있습니다. SQL Server 2005에서는 인출 버퍼의 크기 또는 행의 위치와 관계없이 항상 일관적으로 인출 버퍼의 행이 업데이트됩니다.

SQL Server 2000에서는 UNION ALL 문과 연관된 커서가 UNION의 첫 번째 집합에 따른 업데이트 가능성 정보를 잘못 반환합니다. 그러므로 일부 커서에서는 업데이트할 수 없는 경우에도 할 수 있는 것으로 보고됩니다. SQL Server 2005에서는 UNION ALL 결과를 계산하여 보고하므로 업데이트할 수 없습니다. 단일 테이블 또는 뷰에서 모든 커서 행을 가져오는 경우 UNION 대신 IN 또는 OR 절을 사용하도록 쿼리를 수정하여 업데이트할 수 있는 커서를 정의할 수 있습니다.

SQL Server 2000에서는 CURSOR_CLOSE_ON_COMMIT 옵션이 ON으로 설정된 경우 트랜잭션이 커밋될 때 연결 내의 모든 커서가 닫힙니다. SQL Server 2005에서는 트랜잭션을 커밋할 때 현재 트랜잭션에서 연 커서만 닫힙니다. 트랜잭션이 시작되기 전에 열린 커서는 열린 상태로 유지됩니다.

SQL Server 2000에서는 유효하지 않은 일부 커서를 선언할 수 있으며 이러한 커서가 다른 유형의 커서로 변환됩니다. SQL Server 2005에서는 유효하지 않은 선언을 수행할 수 없습니다. 예를 들어 업데이트 가능성과 민감도가 모두 필요한 커서는 SQL Server 2005에서 유효하지 않으므로 오류 발생과 함께 실패합니다.

데이터베이스, 데이터 및 로그 파일

SQL Server 2000 동작 SQL Server 2005 동작

AUTO_CLOSE 데이터베이스 옵션은 데이터베이스 엔진에 연결 및 연결 해제를 반복하는 응용 프로그램이 데이터베이스에 액세스하는 경우 성능을 저하시킬 수 있는 동기 프로세스입니다.

AUTO_CLOSE는 비동기 프로세스입니다. 데이터베이스에 대한 연결 및 연결 해제를 반복하는 경우에도 성능을 저하시키지 않습니다.

원시 파티션의 파일은 자동 증가하지 않으므로 os_file_name에 원시 파티션을 지정하는 경우 MAXSIZE 및 FILEGROWTH 매개 변수는 필요하지 않습니다.

원시 파티션의 파일은 자동 증가할 수 있으므로 MAXSIZE 및 FILEGROWTH 매개 변수를 지정할 수 있습니다.

각 데이터베이스의 데이터 및 로그 파일에는 사용 권한이 설정되지 않습니다.

데이터베이스에 다음 작업이 수행될 때마다 데이터 및 로그 파일에 사용 권한이 설정됩니다.

생성새 파일 추가를 위해 수정
연결백업
분리복원

이러한 사용 권한을 설정하면 누구나 액세스할 수 있는 디렉터리에 있는 파일이 실수로 변경되는 것을 막을 수 있습니다. 자세한 내용은 데이터 및 로그 파일 보안을 참조하십시오.

ms143359.note(ko-kr,SQL.90).gif참고:

Microsoft SQL Server 2005 Express Edition에서는 데이터 및 로그 파일 권한을 설정하지 않습니다.

연결 서버 및 분산 쿼리

공급자 이름에 'SQLOLEDB'를 사용하여 정의된 연결 서버는 업그레이드 시 'SQLNCLI'(SQL 네이티브 클라이언트 OLE DB 공급자)로 수정됩니다. sys.sysservers 호환성 뷰는 'SQLNCLI'를 'SQLOLEDB'로 사용하는 연결된 서버를 보여 줍니다. SQL Server 2005 카탈로그 뷰 sys.servers는 'SQLNCLI'를 'SQLNCLI'로 사용하는 연결 서버를 보여 줍니다.

SQL Server가 파이버 모드에서 실행 중인 경우 유형이 다른 쿼리 및 OLE DB 공급자 사용이 지원되지 않습니다. 파이버 모드는 lightweight pooling 고급 구성이 1로 설정된 경우 활성화됩니다.

SQL 네이티브 클라이언트 OLE DB 공급자는 Out-of-process로 인스턴스화할 수 없습니다.

SQL Server 2005의 연결 서버에서 발생한 경고 메시지는 클라이언트로 전파되지 않습니다. 이러한 경고 중 중요한 범주는 다음과 같습니다.

  • 집계 계산에서 NULL 값이 제거되었음을 알리는 ANSI 호환 경고
  • 산술 오버플로 경고

예를 들어 col1에 NULL 값이 있는 경우 다음 Transact-SQL 문에서 경고 메시지를 생성할 수 있습니다.

SELECT SUM(col1)
FROM <Table>
GROUP BY col2 

SQL Server 2000 및 이전 버전에서는 연결 서버가 클라이언트로 경고 메시지를 전파했습니다. SQL Server 2005의 연결 서버는 경고 메시지를 전파하지 않습니다.

SQL Server 2000에서는 잘못된 매개 변수 바인딩 등의 컴파일 오류에 의해 원격 저장 프로시저가 제대로 실행되지 않는 경우 반환 값/상태가 0으로 설정됩니다. SQL Server 2005에서는 이 같은 시나리오가 발생하는 경우 반환 값/상태가 NULL로 설정됩니다.

쿼리 프로세서 아키텍처

SQL Server 2000 및 SQL Server 2005에서는 다음 형식으로 전달된 일괄 처리를 다시 컴파일할 때 사용하는 매개 변수 값이 다릅니다.

  • 저장 프로시저
  • sp_executesql 사용
  • 준비된 문

SQL Server 2000에서 이러한 일괄 처리를 다시 컴파일할 때는 다시 컴파일의 일부로 호출된 일괄처리의 매개 변수 값을 사용합니다. SQL Server 2005에서 이러한 쿼리를 다시 컴파일할 때는 다시 컴파일을 수행하도록 한 문의 이전 매개 변수 값을 그대로 사용합니다. 이러한 값은 일괄 처리에 처음 전달된 값과 다를 수 있습니다. 자세한 내용은 매개 변수 및 실행 계획 재사용을 참조하십시오.

보안

기능 SQL Server 2000 동작 SQL Server 2005 동작

GRANT ALL

모든 적용 가능한 권한을 부여합니다.

개체와 문에 대한 ALL 권한 부여 기능은 더 이상 사용되지 않습니다. GRANT ALL을 실행하면 다음과 같은 결과가 발생합니다.

  • 명령은 성공하지만 SQL Server 2000에서 부여할 수 있는 사용 권한만 사용자에게 부여됩니다.
  • "ALL 권한은 사용되지 않으며 호환성을 위해서만 유지 관리됩니다. 항목에 정의된 모든 권한을 의미하는 것은 아닙니다" 메시지가 나타납니다.

SQL Server 2005에서는 사용자 권한 관리에 사용할 수 있는 다양한 범위의 추가 권한을 제공합니다. 예를 들어 CONTROL 권한을 사용하여 개체에 대한 소유권과 비슷한 권한을 부여할 수 있습니다.

암호 비교

SQL Server 2000은 각 SQL Server 로그인 암호의 두 버전을 유지 관리합니다. 한 버전은 사용자가 입력한 실제 암호이고 다른 버전은 SQL Server에서 모두 대문자로 변환한 암호입니다. 이렇게 하면 대/소문자를 구분하지 않고 암호의 유효성을 검사할 수 있습니다. 이 동작은 많은 사용자에게 편리하지만 가능한 암호 수가 감소하므로 암호 추측 공격이 더 쉬워집니다.

실제 암호만 저장됩니다. 사용자가 입력한 암호는 서버에 저장된 암호와 일치해야 합니다. 암호가 SQL Server에 저장된 암호와 일치하지 않으면 로그인이 실패합니다. 암호 문자의 정확한 대/소문자를 잊은 경우 암호를 다시 설정해야 합니다.

sa 계정의 기본 언어 변경

SQL Server sa 계정의 기본 언어는 설치나 업그레이드를 수행하는 동안 선택한 언어입니다.

이전 버전의 Microsoft SQL Server에서는 sp_configure를 실행하여 서버의 기본 언어를 변경하면 sa 계정의 기본 언어도 업데이트됩니다.

SQL Server 2005에서 sa 계정의 기본 언어를 변경하려면 sp_defaultlanguage 저장 프로시저를 실행하고 DBCC FREESYSTEMCACHE 명령을 실행한 다음 새 세션을 시작해야 합니다. 이때 sp_configure를 실행하여 서버의 기본 언어를 변경해도 sa 계정의 기본 언어가 업데이트되지 않습니다.

시스템 저장 프로시저

다음 표에서는 데이터베이스 엔진 시스템 저장 프로시저의 매개 변수 변경 내용을 나열합니다.

저장 프로시저 매개 변수 변경 내용 설명

sp_bindefault

@objname

nvarchar(517)에서 nvarchar(776)으로 크기 변경됨

sp_bindrule

@objname

nvarchar(517)에서 nvarchar(776)으로 크기 변경됨

sp_changeobjectowner

@objname

nvarchar(517)에서 nvarchar(776)으로 크기 변경됨

sp_detach_db

@keepfulltextindexfile

nvarchar(517)에서 nvarchar(776)으로 크기 변경됨

sp_fulltext_service

@action

varchar(20)에서 nvarchar(100)으로 크기 변경됨

sp_fulltext_service

@value

int에서 sql_variant로 데이터 형식 변경됨

sp_getapplock

@DbPrincipal

매개 변수 추가됨

sp_releaseapplock

@DbPrincipal

매개 변수 추가됨

sp_setapprole

@fCreateCookie

매개 변수 추가됨

sp_setapprole

@cookie

매개 변수 추가됨

sp_settriggerorder

@stmttype

varchar(10)에서 varchar(50)으로 크기 변경됨

sp_settriggerorder

@namespace

매개 변수 추가됨

sp_sproc_columns

@fUsePattern

매개 변수 추가됨

sp_stored_procedures

@fUsePattern

매개 변수 추가됨

sp_table_privileges

@fUsePattern

매개 변수 추가됨

sp_table_privileges_ex

@fUsePattern

매개 변수 추가됨

sp_tables

@fUsePattern

매개 변수 추가됨

sp_tables_ex

@fUsePattern

매개 변수 추가됨

시스템 테이블 및 뷰

다음 표에서는 시스템 테이블과 뷰의 열 변경 내용을 나열합니다.

시스템 테이블 또는 뷰 변경 내용 설명

COLUMNS

ORDINAL_POSITION

smallint에서 int로 데이터 형식 변경됨

PARAMETERS

ORDINAL_POSITION

smallint에서 int로 데이터 형식 변경됨

REFERENTIAL_CONSTRAINTS

MATCH_OPTION

varchar(4)에서 varchar(7)로 크기 변경됨

'NONE'에서 'SIMPLE'로 기본값 변경됨

REFERENTIAL_CONSTRAINTS

UPDATE_RULE

varchar(9)에서 varchar(11)로 크기 변경됨

REFERENTIAL_CONSTRAINTS

DELETE_RULE

varchar(9)에서 varchar(11)로 크기 변경됨

ROUTINE_COLUMNS

ORDINAL_POSITION

smallint에서 int로 데이터 형식 변경됨

sysaltfiles

name

nchar(128)에서 sysname으로 데이터 형식 변경됨

sysaltfiles

filename

nchar(260)에서 nvarchar(260)으로 데이터 형식 변경됨

sysconfigures

config

smallint에서 int로 데이터 형식 변경됨

syscursorcolumns

data_type_sql

smallint에서 int로 데이터 형식 변경됨

sysfiles

name

nchar(128)에서 sysname으로 데이터 형식 변경됨

sysfiles

filename

nchar(260)에서 nvarchar(260)으로 데이터 형식 변경됨

sysmessages

severity

smallint에서 tinyint로 데이터 형식 변경됨

sysperfinfo

cntr_value

int에서 bigint로 데이터 형식 변경됨

sysprocesses

waittime

int에서 bigint로 데이터 형식 변경됨

sysprocesses

hostprocess

nchar(8)에서 nchar(10)으로 크기 변경됨

sysprocesses

request_id

열 추가됨

sysprotects

columns

varbinary(4000)에서 varbinary(8000)으로 크기 변경됨

sysservers

srvcollation

int에서 sysname으로 데이터 형식 변경됨

sysservers

nonsqlsub

열 추가됨

sysoledbusers

rmtpassword

NULL만 반환

sysindexes

keys

NULL만 반환

sysindexes

statblob

NULL만 반환

syscomments

compressed

0만 반환

sysdevices

size

0만 반환

sysobjects

schema_ver

0만 반환

sysremotelogins

status

0만 반환

sysservers

topologyx

0만 반환

sysservers

topologyy

0만 반환

Transact-SQL

기능 SQL Server 2000 동작 SQL Server 2005 동작

bcp 유틸리티

테이블에 대한 INSERT 및 SELECT 권한을 가진 사용자는 bcp 유틸리티를 사용하여 다음 명령으로 해당 테이블에 데이터를 대량 로드할 수 있습니다.

bcp <target table> in 
<datafile> -c -T

기본적으로 이 명령은 대상 테이블의 CHECK 제약 조건과 트리거를 해제합니다.

bcp 유틸리티를 실행하려면 대량 로드 중에 CHECK 제약 조건과 트리거가 해제된 경우 사용자에게 대상 테이블에 대한 INSERT 및 SELECT 권한과 ALTER 권한이 있어야 합니다. SQL Server 2005로 업그레이드한 후에는 사용 권한 부족으로 인해 응용 프로그램의 bcp 명령이 실패할 수 있습니다. 다음 방법 중 하나로 이 문제를 처리할 수 있습니다.

  • bcp 프로세스에 의해 영향을 받는 모든 테이블에 대해 ALTER TABLE 권한을 사용자에게 부여합니다.
  • 다음 명령과 같이 CHECK 제약 조건과 트리거를 명시적으로 적용하도록 bcp 명령을 수정합니다.

    bcp <target table> 
    in <datafile> -c -T -h 
    "CHECK_CONSTRAINTS, 
    FIRE_TRIGGERS"

기본 제공 시스템 함수

NEWID 및 RAND와 같은 기본 제공 함수에 대한 각 참조는 외부 쿼리 참조 시 각각 계산되므로 다른 결과를 생성합니다.

외부 쿼리는 뷰 또는 파생 테이블의 열을 여러 번 참조할 수 있습니다. 그러나 NEWID 및 RAND와 같은 함수를 호출하여 이러한 열을 정의하면 여러 번 참조해도 뷰 또는 파생 테이블 내부의 각 실제 호출에 대해 함수가 한 번만 계산됩니다.

해당 열을 하위 쿼리에서 여러 번 참조해도 함수가 여러 번 계산되지 않으므로 이러한 함수에 의해 생성된 값을 하위 쿼리에서 다시 사용할 수 있습니다.

예를 들어 SQL Server 2000에서 다음 쿼리는 두 개의 다른 값을 반환하지만 SQL Server 2005에서는 단일 값을 반환합니다.

SELECT Column1, Column1
      FROM (
            SELECT RAND() Column1
            FROM (
            SELECT 1 c
            UNION
            SELECT 2 c
                  ) s
            ) t

BULK INSERT

BULK INSERT에서는 과학적 표기법을 사용한 숫자 값을 나타내는 문자열을 변환하기 위한 문자열에서 10진수 형식으로의 변환을 지원합니다.

BULK INSERT에서는 Transact-SQL CONVERT 함수와 동일한 문자열에서 10진수로의 형식 변환을 규칙을 따릅니다. 이 함수는 과학적 표기법을 사용하는 숫자 값을 나타내는 문자열을 거부합니다. 그러므로 BULK INSERT에서는 이러한 문자열을 유효하지 않은 값으로 처리하고 변환 오류를 보고합니다. 자세한 내용은 BULK INSERT(Transact-SQL)를 참조하십시오.

datetime 변환

문자열에서 datetime으로의 변환은 결정적인 것으로 표시됩니다. 그러나 다음 표에 나열된 스타일에는 해당되지 않습니다. 이러한 스타일의 경우 언어 설정에 따라 변환이 달라집니다.

다음 표에서는 문자열에서 datetime으로의 변환이 비결정적인 스타일을 나열합니다.

1001 아래의 모든 스타일106
107109
113130

스타일 20 및 21 제외한 1

SQL Server 2005에서는 문자열에서 datetime으로의 변환을 비결정적인 것으로 표시합니다.

DBCC CHECKFILEGROUP

지정된 파일 그룹의 비클러스터형 인덱스가 다른 파일 그룹의 테이블과 연결되어 있는 경우 해당 파일 그룹의 인덱스 및 기본 테이블이 검사됩니다.

지정된 파일 그룹의 비클러스터형 인덱스가 다른 파일 그룹의 테이블과 연결되어 있는 경우 기본 테이블의 유효성을 검사할 수 없으므로 인덱스가 검사되지 않습니다.

DBCC SHOW_STATISTICS

DBCC SHOW_STATISTICS가 반환한 행 집합에는 Name 열이 없습니다.

DBCC SHOW_STATISTICS에서 반환된 첫 번째 행 집합에 Name이라는 추가 열이 있습니다. 이 열은 결과 집합에서 첫 번째 열로 나타납니다. DBCC SHOW_STATISTICS에서 반환된 열에 서수 위치로 액세스하는 응용 프로그램이 있는 경우 이름으로 열에 액세스하도록 수정합니다.

DROP LOGIN

DROP LOGIN을 실행할 때 데이터베이스 사용자가 로그인에 매핑된 경우 로그인이 삭제되지 않습니다.

DROP LOGIN을 실행할 때 데이터베이스 사용자가 로그인에 매핑된 경우에도 로그인이 삭제됩니다.

계산된 열의 식, CHECK 제약 조건 및 DEFAULT 제약 조건

공백을 포함한 식의 원본 텍스트는 카탈로그 메타데이터에 유지됩니다. 예를 들어 c1 + c2 + 1이라고 입력한 계산된 열 식은 syscomments 시스템 테이블의 텍스트 열에 입력한 대로 동일하게 표시됩니다.

식의 원본 텍스트는 디코딩 및 정규화되고 이 작업의 출력은 카탈로그 메타데이터에 저장됩니다. 디코딩된 식의 의미는 원본 텍스트와 동일하지만 구문은 동일하지 않을 수 있습니다. 예를 들어 c1 + c2 + 1이라고 입력한 계산된 열 식은 sys.computed_columns 시스템 카탈로그 뷰의 정의 열에 (([c1]+[c2])+(1))로 표시됩니다.

쿼리에 있는 식

쿼리에 있는 안전하지 않은 식은 항상 런타임 예외를 생성하지는 않습니다.

경우에 따라 SQL Server 2005에서는 쿼리의 식을 SQL Server 2000보다 빨리 계산할 수 있습니다. 이 경우 다음과 같은 중요한 이점이 있습니다.

  • 계산 열 식과 동일한 쿼리의 식에 계산 열의 인덱스를 일치시킬 수 있습니다.
  • 식 결과의 중복 계산을 방지할 수 있습니다.

그러나 쿼리에 안전하지 않은 기존 식이 포함된 경우 쿼리 및 데이터베이스 데이터의 특성에 따라 SQL Server 2005에서 런타임 예외가 발생할 수 있습니다. 이러한 런타임 예외는 다음과 같습니다.

  • 산술 예외: 0 나누기, 오버플로 및 언더플로
  • 전체 자릿수 손실 및 숫자가 아닌 문자열을 숫자로 변환하려는 시도와 같은 변환 실패
  • Null일 수도 있는 값들의 집계

SQL Server 2000에서 특정 데이터를 사용하는 특정 응용 프로그램에서는 이러한 예외가 발생하지 않을 수도 있습니다. 그러나 통계 변경 때문에 변경되는 쿼리 계획으로 인해 SQL Server 2000에서 예외가 발생할 수 있습니다. NULLIF 또는 CASE와 같은 조건 식을 포함하도록 쿼리를 수정하면 이러한 런타임 예외를 방지할 수 있습니다. 자세한 내용은 쿼리 식에서의 오류 및 경고 문제 해결을 참조하십시오.

fn_servershareddrives

public 역할의 멤버는 fn_servershareddrives 시스템 함수에서 반환한 데이터를 볼 수 있습니다.

변경된 사용 권한: fn_servershareddrives의 경우 서버에 대해 VIEW SERVER STATE 권한이 있어야 합니다.

ms143359.note(ko-kr,SQL.90).gif중요:

이 SQL Server 2000 시스템 기능은 이전 버전과의 호환성을 위해 제공됩니다. 대신 sys.dm_io_cluster_shared_drives를 사용하는 것이 좋습니다.

fn_virtualfilestats

public 역할의 멤버는 fn_virtualfilestats 시스템 함수에서 반환한 데이터를 볼 수 있습니다.

변경된 사용 권한: fn_virtualfilestats의 경우 서버에 대해 VIEW SERVER STATE 권한이 있어야 합니다.

fn_virtualservernodes

public 역할의 멤버는 fn_virtualservernodes 시스템 함수에서 반환한 데이터를 볼 수 있습니다.

변경된 사용 권한: fn_virtualservernodes의 경우 서버에 대해 VIEW SERVER STATE 권한이 있어야 합니다.

ms143359.note(ko-kr,SQL.90).gif중요:

이 SQL Server 2000 시스템 기능은 이전 버전과의 호환성을 위해 제공됩니다. 대신 sys.dm_os_cluster_nodes를 사용하는 것이 좋습니다.

HOST_ID

HOST_ID는 char(8) 값을 반환합니다.

HOST_IDchar(10) 값을 반환합니다.

인덱스

"SQL Server 2005 동작" 열에서 설명한 인덱스를 사용할 수 있습니다.

다음 인덱스는 업그레이드 중에 비활성화되거나 SQL Server 2005에서의 변경 내용으로 인해 다시 작성해야 할 수 있습니다.

  • CHECKSUM(some_timestamp_column)을 사용하는 계산 열의 인덱스는 timestamp 열을 인수로 사용하는 Transact-SQL CHECKSUM 함수에 대한 동작이 변경되었기 때문에 비활성화됩니다.
  • 터키어 기반 데이터 정렬을 사용하는 nvarchar 또는 nchar 열에 문자 값 0x3390, 0x33ca 또는 0x33cb가 포함된 인덱스는 이러한 데이터 정렬의 정렬 동작이 변경되었기 때문에 다시 작성해야 할 수 있습니다.
  • 뷰나 계산 열 식에 string에서 datetime 또는 smalldatetime으로의 암시적 변환이나 string에서 datetime 또는 smalldatetime으로의 명시적, 비결정적 변환이 포함된 계산 열 또는 뷰의 인덱스는 비활성화됩니다.

앞에서 설명한 처음 두 개 항목의 변경 내용 때문에 인덱스를 다시 작성해야 하는 경우 다음 절차를 따르십시오.

  1. SQL Server 오류 로그에서 경고 메시지 3801, 3803 또는 3804를 검사합니다.

  2. 기본 테이블에 대해 DBCC CHECKTABLE을 실행하여 문제가 있는지 확인합니다.

  3. DBCC 문의 결과에서 문제가 있음을 나타내면 다음 방법 중 하나를 사용하여 인덱스를 다시 작성합니다.

    • REBUILD 절과 함께 ALTER INDEX 문
    • DROP_EXISTING 절과 함께 CREATE INDEX
    • DBCC DBREINDEX
  4. 다음 문을 사용하여 비활성화된 FOREIGN KEY 제약 조건을 확인합니다.

    SELECT * FROM sys.foreign_keys 
    WHERE is_disabled=1;
    
  5. ALTER TABLE CHECK CONSTRAINT 문을 사용하여 FOREIGN KEY 제약 조건을 활성화합니다.
    연관된 인덱스를 다시 작성하여 PRIMARY KEY 및 UNIQUE 제약 조건을 활성화합니다. PRIMARY KEY 또는 UNIQUE 제약 조건을 참조하는 FOREIGN KEY 제약 조건을 활성화하기 전에 이 인덱스를 다시 작성해야 합니다.

앞에서 설명한 3번째 항목의 변경 내용 때문에 인덱스가 비활성화된 경우 다음 절차를 따르십시오.

  1. 다음 문을 사용하여 비활성화된 계산 열의 인덱스를 확인합니다.

    SELECT object_name(i.object_id) AS
     object_name, i.*
    FROM sys.indexes AS i
    JOIN sys.index_columns AS ic 
    ON i.index_id = ic.index_id 
      AND i.object_id = ic.object_id
    JOIN sys.computed_columns AS
     cc
    ON ic.object_id = cc.object_id 
      AND ic.column_id = cc.column_id
    WHERE i.is_disabled = 1
    
  2. 계산 열 인덱스의 경우 인덱스를 삭제하고 명시적 CONVERT 함수를 결정적 날짜 스타일과 함께 사용하도록 계산 열 정의를 변경합니다.

  3. 인덱싱된 뷰의 경우 뷰를 삭제하고 명시적 CONVERT 함수를 결정적 날짜 스타일과 함께 사용하여 뷰를 다시 정의합니다.

  4. 수정된 계산 열 또는 뷰의 인덱스를 다시 만듭니다.

인덱스

병렬 인덱스 작업은 SQL Server 2000 Developer, SQL Server 2000 Standard 및 SQL Server 2000 Enterprise 버전에서 지원됩니다.

인덱스를 생성, 삭제 또는 다시 작성하는 병렬 인덱스 작업은 SQL Server 2005 Developer 및 SQL Server 2005 Enterprise 버전에서만 지원됩니다.

SQL Server 2000 Standard Edition에서 SQL Server 2005 Standard Edition으로 업그레이드하는 경우 SQL Server 2005 Standard Edition에서는 인덱스를 생성, 삭제 또는 다시 작성하는 작업이 순차적으로 실행되므로 완료하는 데 시간이 오래 걸릴 수 있습니다.

SELECT, INSERT, UPDATE 및 DELETE 문은 영향을 받지 않으며 SQL Server 2005 Standard Edition에서 병렬로 작동합니다.

SQL Server 2005 Standard Edition으로 업그레이드한 후 인덱스를 생성, 삭제 또는 다시 작성하는 작업을 모니터링합니다. 이러한 작업에 필요한 추가 시간을 허용하기 위해 유지 관리 스크립트 또는 계획된 유지 관리 작업을 조정해야 할 수도 있습니다.

병렬 인덱스 작업을 실행하려면 SQL Server 2005 Enterprise Edition를 설치하십시오.

ORDER BY 절

ORDER BY 절에 있는 열 이름은 정규화 여부에 관계없이 SELECT 목록에 나열된 열로 확인됩니다.

예를 들어 다음 쿼리는 오류 없이 실행됩니다.

USE pubs
SELECT au_fname AS 'FName',
  au_lname AS 'LName'
FROM authors a
ORDER BY a.LName

SQL Server에서는 ORDER BY 절에서 a 한정자를 무시하고 LName 열 이름을 SELECT 목록으로 확인합니다.

정규화된 열 이름과 별칭은 FROM 절에 나열된 테이블의 열로 확인합니다. 정규화되지 않은 경우 order_by_expression은 SELECT 문에 나열된 모든 열 사이에서 고유해야 합니다.

예를 들어 다음 쿼리는 오류를 반환합니다.

USE AdventureWorks
SELECT FirstName AS 'FName',
    LastName AS 'LName'
FROM Person.Contact p
ORDER BY p.LName

SQL Server에서는 ORDER BY 절에서 p 한정자를 무시하지 않고 LName 열 이름을 FROM 절에 나열된 테이블로 확인합니다. 하지만 FROM 절에서는 LName 열이 p 테이블의 열 별칭임을 인식하지 못합니다.

SERVERPROPERTY 함수

SERVERPROPERTY 함수에 있는 ProductVersion 속성의 반환 형식은 varchar입니다.

SERVERPROPERTY 함수에 있는 ProductVersion 속성의 반환 형식은 nvarchar입니다.

sp_addtype

모든 사용자가 sp_addtype을 실행할 수 있습니다.

sp_addtype을 실행하려면 사용자가 db_ddladmin 또는 db_owner 데이터베이스 역할의 멤버여야 합니다.

사용자가 별칭 데이터 형식을 만들 수 있도록 하려면 다음 중 한 가지 변경을 수행해야 합니다.

  • sp_addtype을 사용하려면 db_ddladmin 또는 db_owner 데이터베이스 역할에 사용자를 추가합니다.
  • CREATE TYPE을 사용하여 별칭 데이터 형식을 만들려면 사용자에게 CREATE TYPE 권한을 부여하고 대상 스키마의 사용자에 대한 ALTER 권한을 부여합니다.

sp_altermessage

sp_altermessage는 시스템 메시지(메시지 ID < 50000을 포함하는 메시지)를 Windows 응용 프로그램 로그에 기록할지 여부를 지정하는 데 사용됩니다.

시스템 메시지(50000 미만의 메시지 ID를 포함하는 메시지)의 로깅 동작을 변경하는 데 sp_altermessage를 사용할 수 없습니다. 시스템 메시지를 감사하려면 SQL Trace 및 User Error Message 이벤트 클래스를 사용해야 합니다. 자세한 내용은 SQL Trace 소개를 참조하십시오.

sp_changedbowner

sysadmin 고정 서버 역할, db_owner 고정 데이터베이스 역할 또는 db_ddladmindb_securityadmin 고정 데이터베이스 역할의 멤버만 sp_changeobjectowner를 실행할 수 있습니다.

db_ddladmindb_securityadmin 고정 데이터베이스 역할의 멤버로서 이 저장 프로시저를 실행할 수 있는 사용자에게 보안 개체에 대한 CONTROL 권한도 부여해야 합니다. 대상 개체에 대한 CONTROL 권한 없이 sp_changeobjectowner를 실행하면 실패하고 다음과 같은 오류 메시지가 생성됩니다.

"메시지 15247, 수준 16, 상태 1, 프로시저 sp_changeobjectowner, 줄 17

사용자에게 이 동작을 수행할 권한이 없습니다."

sp_help

sp_help는 함수에 대해 한 개의 결과 집합을 반환합니다.

sp_help는 함수에 대해 두 개의 결과 집합을 반환합니다. 추가 결과 집합은 함수 매개 변수에 대한 것입니다.

sysindexes

 

sys.sysindexes는 이전 버전과의 호환성을 위해 포함됩니다. 그러나 SQL Server 2005에서의 변경 내용 때문에 뷰가 이전 버전의 SQL Server와 완벽하게 호환되지 않습니다.

시스템 메타데이터

public 역할의 멤버는 시스템 테이블을 쿼리하고 카탈로그에서 메타데이터를 표시할 수 있습니다.

카탈로그를 쿼리하는 사용자는 자신의 소유이거나 일부 사용 권한이 있는 개체 또는 역할 멤버 자격으로 인해 보기 권한이 있는 개체의 메타데이터 행만 볼 수 있습니다. 자세한 내용 및 권장 수정 작업은 메타데이터 표시 유형 구성메타데이터 표시 유형 문제 해결을 참조하십시오.

시스템 테이블

시스템 테이블의 유형은 'S'입니다.

시스템 테이블을 호환성 뷰로 사용할 수 있으며 'V' 유형입니다. 시스템 테이블을 쿼리하고 검색 조건 type = 'S'를 포함하는 문은 실패합니다.

문 검색 조건을 type = 'V'로 수정합니다.

또는

새 카탈로그 뷰나 동적 관리 뷰로 마이그레이션합니다. 자세한 내용은 SQL Server 2000 시스템 테이블을 SQL Server 2005 시스템 뷰로 매핑을 참조하십시오.

bcp, BULK INSERT 또는 OPENROWSET(BULK...)을 사용하여 대량 가져오기 수행 시의 TABLOCK

비어 있지 않은 클러스터형 인덱스가 있는 테이블에 대량 가져오기를 수행하는 경우 TABLOCK 힌트가 무시됩니다.

비어 있지 않은 클러스터형 인덱스가 있는 테이블에 대량 가져오기를 수행하는 경우 TABLOCK 힌트가 테이블에서 X 잠금을 획득합니다. 따라서 데이터 대량 가져오기가 병렬로 수행되지 않습니다. 이 경우 병렬 대량 가져오기를 수행하려면 TABLOCK을 사용하지 마십시오. 병렬 대량 로드 방법은 대량 가져오기 최적화 지침을 참조하십시오.

트리거

트리거의 직접 재귀는 트리거가 같은 트리거를 다시 시작하는 작업을 시작하고 수행하는 경우에만 발생합니다.

트리거의 직접 재귀는 다음 상황 중 하나에서 발생합니다.

  • 트리거가 같은 트리거를 다시 시작하는 작업을 시작하고 수행하는 경우
  • 같은 트리거를 다시 호출했지만 다른 유형(AFTER 또는 INSTEAD OF)의 트리거를 호출한 다음 호출한 경우

간접 재귀는 트리거가 같은 유형(AFTER 또는 INSTEAD OF)의 다른 트리거를 시작하는 작업을 시작하고 수행하는 경우 발생합니다. 이 두 번째 트리거는 원래 트리거를 다시 시작하는 작업을 수행합니다.

자세한 내용은 중첩 트리거 사용의 재귀적 트리거 섹션을 참조하십시오.

트리거

UPDATE 또는 DELETE 문을 로컬 또는 분산 분할된 뷰에 대해 실행하는 경우 해당 뷰의 기본 테이블에 정의된 모든 UPDATE 또는 DELETE 트리거가 시작됩니다. 여기에는 업데이트 또는 삭제 작업의 영향을 받지 않는 테이블의 트리거도 포함됩니다.

UPDATE 또는 DELETE 문을 분할 뷰에 대해 실행하는 경우 트리거가 정의된 기본 테이블이 업데이트 또는 삭제 작업의 영향을 받는 경우에만 UPDATE 또는 DELETE 트리거가 시작됩니다. 자세한 내용은 DML 트리거 실행을 참조하십시오.

UPDATE() 함수

UPDATE() 함수가 timestamp 열의 변경을 감지하지 못합니다. 이 열에 대해서는 열의 업데이트 여부와 관계없이 트리거 내의 IF UPDATE() 절이 FALSE를 반환합니다.

UPDATE() 함수가 timestamp 열의 변경을 감지합니다. 이 열에 대해서는 열이 업데이트된 경우 DML 트리거 내의 IF UPDATE() 절이 TRUE를 반환합니다.

사용자 정의 함수

사용자 정의 함수는 비결정적 기본 제공 시스템 함수를 포함할 수 없습니다.

Transact-SQL 사용자 정의 함수는 대부분의 비결정적 기본 제공 시스템 함수를 포함할 수 있습니다. 허용된 기본 제공 함수의 전체 목록은 사용자 정의 함수 만들기(데이터베이스 엔진)를 참조하십시오.

varchar, nvarcharvarbinary 데이터 형식

계산 테이블 열의 정의로 사용되는 길이가 0인 문자열 또는 이진 값이 varchar(0), nvarchar(0) 또는 varbinary(0) 유형의 열을 만듭니다.

계산 테이블 열의 정의로 사용되는 길이가 0인 문자열 또는 이진 값이 varchar(1), nvarchar(1) 또는 varbinary(1) 유형의 열을 만듭니다. 이러한 동작 변경은 계산 열 데이터 형식에만 영향을 주고 계산 값에는 영향을 주지 않습니다.

varcharvarbinary 열의 최소 길이를 1바이트로, nvarchar 열의 최소 길이를 2바이트를 예상하도록 계산 열 데이터 형식의 길이를 검사하는 응용 프로그램을 수정합니다.

가상 테이블 액세스

게스트 또는 public 역할의 멤버가 가상 테이블을 액세스할 수 있습니다.

sysprocesses와 같은 가상 테이블에 액세스하려면 VIEW SERVER STATE 권한 및 SELECT 권한이 필요합니다.

뷰에서의 WITH CHECK OPTION

삽입 및 업데이트 작업이 뷰의 SELECT 문 범위를 벗어나는 경우에도 WITH CHECK OPTION 절을 지정하고 원격 테이블에 생성된 뷰에 대해 이러한 작업을 수행할 수 있습니다.

SQL Server 2005에서는 원격 데이터 원본의 테이블에 생성된 뷰에 대해 삽입 및 업데이트 작업을 수행할 때 WITH CHECK OPTION 절을 인식합니다.

WITH CHECK OPTION 절 때문에 원격 테이블에 생성된 뷰에 대한 삽입 및 업데이트 작업이 실패하는 경우 이 동작을 사용하지 않으려면 WITH CHECK OPTION 절을 지정하지 않고 뷰를 수정합니다.

자세한 내용은 CREATE VIEW(Transact-SQL), ALTER VIEW(Transact-SQL)뷰를 통해 데이터 수정을 참조하십시오.

xp_cmdshell

xp_cmdshell 실행 중에 오류가 발생하면 오류 메시지가 생성되지만 실행은 종료되지 않습니다.

xp_cmdshell 실행 중에 오류가 발생하면 오류 메시지가 생성되고 실행이 종료됩니다.

참고 항목

참조

SQL Server 2005 데이터베이스 엔진 기능의 변경 내용 분석
SQL Server 2005 이후에는 지원되지 않는 데이터베이스 엔진 기능
SQL Server 2005에서 지원되지 않는 데이터베이스 엔진 기능

관련 자료

SQL Server 2005 데이터베이스 엔진의 이전 버전과의 호환성
sp_dbcmptlevel(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 7월 17일

새로운 내용
  • Transact-SQL 동작 변경 사항을 나열하는 테이블에서 "계산된 열의 식, CHECK 제약 조건 및 DEFAULT 제약 조건" 항목을 추가했습니다.
  • Transact-SQL 동작 변경 사항을 나열하는 테이블의 "SQL Server 2005 동작" 열 아래에서 "varchar, nvarcharvarbinary 데이터 형식" 항목에 대한 문을 변경했습니다. 계산된 테이블 열의 데이터 형식을 nvarchar(2)에서 nvarchar(1)로 변경했습니다.

2005년 12월 5일

새로운 내용
  • 유효하지 않은 커서 선언에 대한 정보를 추가했습니다.
  • "sa 계정의 기본 언어 변경" 내용을 추가했습니다.
  • "DBCC CHECKFILEGROUP" 내용을 추가했습니다.
  • "대량 가져오기 수행 시의 TABLOCK" 내용을 추가했습니다.
  • "트리거" 내용을 추가했습니다.
변경된 내용
  • "varchar, nvarcharvarbinary 데이터 형식"의 내용을 수정했습니다.