컬럼 Default 값 수정 쿼리

 | SQL
2010. 2. 10. 17:37

컬럼의 기존 Default값을 수정 하기 위해서는 기존에 있던 Default를 지워주고 재생성 해야 한다.

ALTER TABLE tbl_general DROP CONSTRAINT DF_tbl_general_BagNum
GO
ALTER TABLE [dbo].[tbl_general] ADD
CONSTRAINT [DF_tbl_general_BagNum] DEFAULT (3) FOR [BagNum]
GO

-- EXEC sp_unbindefault 'tbl_general.BagNum'
-- DROP DEFAULT DF_tbl_general_BagNum


 

'SQL' 카테고리의 다른 글

IDENTITY 가 걸려있는 Table에 데이터 삽입  (0) 2009.09.03
xp_cmdshell 사용  (2) 2009.08.12
xp_cmdshell (MS SQL Server 2005)  (0) 2009.08.12
sp_configure xp_cmdshell 옵션  (0) 2009.08.12
SQL Server 2005 서버 구성 옵션 설정  (0) 2009.08.12
Posted by ProjectGhost
 ID 열이 있는 테이블에 데이터 로드

처음의 두 INSERT 문은 새 행에 대해 ID 값을 생성할 수 있습니다.
세 번째 INSERT 문은 SET IDENTITY_INSERT 문으로 열에 대한 IDENTITY 속성을 덮어쓰고
ID 열에 명시적인 값을 삽입합니다.

IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'T1')
   DROP TABLE T1
GO
CREATE TABLE T1 ( column_1 int IDENTITY, column_2 varchar(30))
INSERT T1 VALUES ('Row #1')
INSERT T1 (column_2) VALUES ('Row #2')
SET IDENTITY_INSERT T1 ON 
INSERT INTO T1 (column_1,column_2) 
   VALUES (-99,'Explicit identity value')
SELECT * FROM T1



테이블에 IDENTITY가 걸려 있는 컬럼에 데이터를 삽일 할때는

SET IDENTITY_INSERT [Table Name] ON

문을 사용 하여 IDENTITY 속성을 비활성화 시켜 줘야 컬럼에 명시적인 값 삽입이 가능하다.

DB작업 중에 테이블 컬럼의 데이터 형을 바꾸는 작업이 있었는데 데이터 형을 바꾸면서

여러가지 계산에 필요 한 값들을 같이 테이블에 컬럼을 추가 하여 데이터를 넣게 되었는데

이때 기존 테이블에서의 작업은 문제가 있어서 테이블을 새로 생성 하고 데이터를 복사 후

데이터 형변환 계산 후 계산에 필요 한 데이터 컬럼과 기존 데이터 값 컬럼을 삭제 하고

새로 만든 컬럼의 이름과 테이블의 이름을 예전 테이블과 컬럼의 이름으로 변경 하는

작업으로 진행이 되었다.


그런데 여기서 문제가 하나 발생 하였는데 ID값으로 들어가는 데이터가 변경이 되면 안되는

상황 이었는데 그 컬럼에는 IDENTITY가 걸려 있어야 했기 때문에 우선 그 테이블을 생성 할때

IDENTITY 를 뺀 상태에서 테이블 생성한 후 데이터 복사 그리고 컬럼 이름 등의 변경 작업 후

IDENTITY를 추가 하려고 하니 데이터가 들어있는 상태에서는 IDENTITY를 추가 할 수 없는

상황이 되어버렸다. 그래서 Enterprise Manager의 테이블 디자인에서 ID값을 활성화 해서 

문제를 해결 할 수 있었다.


하지만 SET IDENTITY_INSERT 문을 사용 했다면

처음에 테이블 생성 과정에서 굳이 IDENTITY를 빼지 않아도 ID값을 명시 적으로 넣을 수 있었기

때문에 추가 적인 작업이 필요 없었을 것이다.

그리고 SET IDENTITY_INSERT 문을 사용 하지 않는 방법은

종종 새로 테이블을 생성하고 데이터 복사 후 테이블 이름을 이전 테이블 이름으로 교체 후

IDENTITY를 추가 하지 않아서 프로시저 등에서 오류가 발생 하기 도 해서 주의가 필요하다.

'SQL' 카테고리의 다른 글

컬럼 Default 값 수정 쿼리  (0) 2010.02.10
xp_cmdshell 사용  (2) 2009.08.12
xp_cmdshell (MS SQL Server 2005)  (0) 2009.08.12
sp_configure xp_cmdshell 옵션  (0) 2009.08.12
SQL Server 2005 서버 구성 옵션 설정  (0) 2009.08.12
Posted by ProjectGhost

xp_cmdshell 사용

 | SQL
2009. 8. 12. 07:05
이번에 디비 작업을 하면서 저장 프로시저를 쿼리로 실행 시키는 방법을 발견 하면서 좀더 많은

dts활용 방법을 알게 되었습니다.

그런데 이 xp_cmdshell 을 사용 하려면  MS SQL Server 2000 특별히 추가 작업이 필요 없이

바로 사용이 가능 했지만 SQL Server 2005 에서는 xp_cmdshell 을 사용 하기 위한 사전 작업이

필요 해서 처음에는 난감 했습니다.. 

찾아본 결과 SQL Server 2005 에서는 최초에는  xp_cmdshell 확장 저장 프로시저를 실행 여부가

비활성화 되어  있으며 시스템 관리자가 sp_configurexp_cmdshell 옵션을 활성화 하여

사용 가능하도록 설정 할 수 있었습니다.

그리고 실적용 에서도 sp_configurexp_cmdshell 옵션을 활성화 하니 xp_cmdshell을 사용 할 수

있었고 작업을 무사히 마칠수 있었습니다.

sp_configure 를 이용한  xp_cmdshell 옵션 설정 방법은 여기에 ...^^

2000과 2005는 바뀐 내용이 많아서 아직은 좀 더 공부가 필요 할것 같네요 .. ㅠㅠ
Posted by ProjectGhost

xp_cmdshell (MS SQL Server 2005)

 | SQL
2009. 8. 12. 06:18

Windows 명령 셸을 생성하고 실행을 위해 문자열로 전달합니다. 모든 출력은 텍스트 행으로 반환됩니다.

 Transact-SQL 구문 표기 규칙

구문

xp_cmdshell { 'command_string' } [ , no_output ]

인수

'command_string'

운영 체제로 전달할 명령이 포함된 문자열입니다. command_string은 기본값 없이 varchar(8000) 또는 nvarchar(4000)입니다. command_string에는 두 쌍 이상의 큰 따옴표가 포함될 수 없습니다. command_string에서 참조하는 프로그램 이름이나 파일 경로에 공백이 있는 경우 한 쌍의 따옴표가 필요합니다. 포함 공백에 문제가 있으면 해결 방법으로 FAT 8.3 파일 이름을 사용하십시오.

no_output

출력이 클라이언트에 반환되지 않도록 지정하는 선택적 매개 변수입니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

다음 xp_cmdshell 문을 실행하면 현재 디렉터리를 나열한 디렉터리를 반환합니다.

EXEC xp_cmdshell 'dir *.exe';
GO

행은 nvarchar(255) 열에서 반환됩니다. no_output 옵션을 사용하면 다음이 반환됩니다.

The command(s) completed successfully.

주의

xp_cmdshell로 생성된 Windows 프로세스는 SQL Server 서비스 계정과 같은 보안 권한을 갖습니다.

xp_cmdshell은 동기식으로 작업합니다. 명령 셸 명령이 완료되기 전에는 호출자에게 컨트롤이 반환되지 않습니다.

xp_cmdshell은 노출 영역 구성 도구를 사용하고 sp_configure를 실행하여 설정하고 해제할 수 있습니다. 자세한 내용은 노출 영역 구성xp_cmdshell 옵션을 참조하십시오.

중요:
xp_cmdshell을 일괄 처리 내에서 실행하여 오류가 반환되면 일괄 처리가 실패합니다. 이 동작은 기존 버전과 달라진 동작입니다. 이전 버전의 Microsoft SQL Server 에서는 일괄 처리가 계속 실행되었습니다.

xp_cmdshell 프록시 계정

sysadmin 고정 서버 역할의 멤버가 아닌 사용자에 의해 호출되는 경우 xp_cmdshell##xp_cmdshell_proxy_account##라는 자격 증명에 저장된 계정 이름과 암호를 사용하여 Windows에 연결합니다. 프록시 자격 증명이 없으면 xp_cmdshell이 실패합니다.

프록시 계정 자격 증명은 sp_xp_cmdshell_proxy_account를 실행하여 만들 수 있습니다. 이 저장 프로시저는 Windows 사용자 이름과 암호를 인수로 사용합니다. 예를 들어 다음 명령은 Windows 암호가 sdfh%dkc93vcMt0인 Windows 도메인 사용자 SHIPPING\KobeR에 대한 프록시 자격 증명을 만듭니다.

EXEC sp_xp_cmdshell_proxy_account 'SHIPPING\KobeR','sdfh%dkc93vcMt0'

자세한 내용은 sp_xp_cmdshell_proxy_account(Transact-SQL)를 참조하십시오.

사용 권한

CONTROL SERVER 권한이 필요합니다.

1. 실행 파일의 목록 반환

다음 예에서는 디렉터리 명령을 실행하는 xp_cmdshell 확장 저장 프로시저를 보여 줍니다.

EXEC master..xp_cmdshell 'dir *.exe'

2. Windows net 명령 사용

다음 예에서는 저장 프로시저에서 xp_cmdshell을 사용하는 것을 보여 줍니다. 이 예에서는 net send를 사용하여 SQL Server 인스턴스가 종료될 것을 사용자에게 알리고 net pause를 사용하여 서버를 일시 중지한 다음 net stop을 사용하여 서버를 종료합니다.

CREATE PROC shutdown10
AS
    EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server 
        shutting down in 10 minutes. No more connections 
        allowed.', no_output
    EXEC xp_cmdshell 'net pause sqlserver'
    WAITFOR DELAY '00:05:00'
    EXEC xp_cmdshell 'net send /domain: SQL_USERS ''SQL Server 
        shutting down in 5 minutes.', no_output
    WAITFOR DELAY '00:04:00'
    EXEC xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server 
        shutting down in 1 minute. Log off now.', no_output
    WAITFOR DELAY '00:01:00'
    EXEC xp_cmdshell 'net stop sqlserver', no_output

3. 출력 반환 안 함

다음 예에서는 xp_cmdshell을 사용하여 클라이언트에게 출력을 반환하지 않고 명령 문자열을 실행하는 것을 보여 줍니다.

USE master;
EXEC xp_cmdshell 'copy c:\SQLbcks\AdvWorks.bck
    \\server2\backups\SQLbcks, NO_OUTPUT';
GO

4. 반환 상태 사용

다음 예에서는 xp_cmdshell 확장 저장 프로시저 또한 상태를 반환하도록 제안합니다. 반환 코드 값은 @result 변수에 저장됩니다.

DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
   PRINT 'Success'
ELSE
   PRINT 'Failure'

5. 파일에 변수 내용 기록

다음 예에서는 @var 변수의 내용을 현재 서버 디렉터리에 있는 var_out.txt라는 파일에 기록합니다.

DECLARE @cmd sysname, @var sysname
SET @var = 'Hello world'
SET @cmd = 'echo ' + @var + ' > var_out.txt'
EXEC master..xp_cmdshell @cmd

6. 명령 결과를 파일로 캡처

다음 예에서는 현재 디렉터리의 내용을 현재 서버 디렉터리에 있는 dir_out.txt라는 파일에 기록합니다.

DECLARE @cmd sysname, @var sysname
SET @var = 'dir/p'
SET @cmd = @var + ' > dir_out.txt'
EXEC master..xp_cmdshell @cmd
Posted by ProjectGhost

sp_configure xp_cmdshell 옵션

 | SQL
2009. 8. 12. 06:14

SQL Server 2005 에 새로 추가된 xp_cmdshell 옵션은 시스템 관리자가 시스템에서 xp_cmdshell 확장 저장 프로시저를 실행할 수 있는지 여부를 제어할 수 있도록 하는 서버 구성 옵션입니다. 기본적으로 xp_cmdshell 옵션은 새 설치에서는 사용할 수 없도록 되어 있지만 다음 코드 예제에서 볼 수 있듯이 노출 영역 구성 도구를 사용하거나 sp_configure 시스템 저장 프로시저를 실행하여 사용 가능하도록 할 수 있습니다.

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
Posted by ProjectGhost

SQL Server Management Studio 또는 sp_configure 시스템 저장 프로시저를 사용하면 구성 옵션을 통해 SQL Server 리소스를 관리하고 최적화할 수 있습니다. 이들 옵션 중 일부는 SQL Server 노출 영역 구성 도구를 사용하여 구성할 수 있습니다. 자주 사용하는 서버 구성 옵션은 SQL Server Management Studio를 통해 사용할 수 있으며 모든 구성 옵션에 액세스하려면 sp_configure를 사용해야 합니다. 이러한 옵션을 변경하기 전에 시스템에 주는 영향을 신중히 고려해야 합니다.

중요:
고급 옵션은 숙련된 데이터베이스 관리자나 인증된 SQL Server 기술 지원 담당자만이 변경하도록 해야 합니다.

sp_configure 시스템 저장 프로시저 사용

sp_configure를 사용할 때는 구성 옵션을 설정한 뒤에 RECONFIGURE 또는 RECONFIGURE WITH OVERRIDE를 실행해야 합니다. RECONFIGURE WITH OVERRIDE 문은 각별한 주의가 필요한 구성 옵션에 주로 사용되지만 모든 구성 옵션에 사용할 수 있으며 RECONFIGURE 대신 사용할 수 있습니다.

참고:
RECONFIGURE는 트랜잭션 내에서 실행됩니다. 다시 구성 작업 중 하나가 실패하면 다시 구성 작업이 하나도 적용되지 않습니다.

다음 문을 사용하여 각 옵션의 값을 결정할 수 있습니다.

SELECT * FROM sys.configurations
ORDER BY name ;
GO

다음은 기본값으로 설정된 fill factor 옵션의 값을 sp_configure 설정을 통해 100으로 변경하는 스크립트의 예입니다.

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'fill factor', 100;
GO
RECONFIGURE;
GO

구성 옵션 범주

구성 옵션은 다음 경우에 적용됩니다.

  • 옵션 설정 및 RECONFIGURE(또는 경우에 따라 RECONFIGURE WITH OVERRIDE) 문 실행 후 즉시

    -또는-

  • 위의 작업을 수행하고 SQL Server 인스턴스를 다시 시작한 후

sp_configure로 고급 옵션을 구성하려면 sp_configure 명령에서 'show advanced options' 옵션을 1로 설정한 다음 RECONFIGURE를 실행해야 합니다.

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'cursor threshold', 0;
GO
RECONFIGURE;
GO

앞의 예에서 cursor threshold 옵션은 다시 구성하는 즉시 적용됩니다. cursor threshold의 새 값은 구성 옵션인 value_in_use 열 및 value 열에 표시됩니다.

SQL Server 인스턴스를 다시 시작해야 하는 옵션은 초기에 value 열에만 변경된 값이 표시되며 다시 시작한 뒤에는 value 열과 value_in_use 열 모두에 새 값이 표시됩니다.

일부 옵션은 서버를 다시 시작해야 새 구성 값이 적용됩니다. 새 값을 설정하고 sp_configure를 실행해도 서버를 다시 시작하지 않으면 구성 옵션 value 열에만 새 값이 나타나고 value_in_use 열에는 나타나지 않습니다. 서버를 다시 시작하면 value_in_use 열에도 새 값이 나타납니다.

자체 구성 옵션은 SQL Server가 시스템의 필요에 따라 조정하는 옵션입니다. 대부분의 경우 이 값을 수동으로 설정할 필요가 없습니다. 자체 구성 옵션의 예로는 min server memory, max server memoryuser connections이 있습니다.

구성 옵션 표

다음 표에서는 사용할 수 있는 모든 구성 옵션, 가능한 설정 범위 및 기본값을 보여 줍니다. 구성 옵션은 다음과 같은 문자 코드로 표시됩니다.

  • A= 고급 옵션이며 숙련된 데이터베이스 관리자나 인증된 SQL Server 기술 지원 담당자를 위한 옵션입니다. show advanced options를 1로 설정해야 이용할 수 있습니다.

  • RR = 데이터베이스 엔진을 다시 시작해야 하는 옵션입니다.

  • SC = 자체 구성 옵션입니다.

    구성 옵션 최소값 최대값 기본값

    Ad Hoc Distributed Queries(A)

    0

    1

    0

    affinity I/O mask(A, RR)

    -2147483648

    2147483647

    0

    affinity64 I/O mask(A, SQL Server 64비트 버전에만 해당)

    -2147483648

    2147483647

    0

    affinity mask(A)

    -2147483648

    2147483647

    0

    affinity64 mask(A, SQL Server 64비트 버전에만 해당)

    -2147483648

    2147483647

    0

    Agent XPs(A)

    0

    1

    0

    SQL Server 에이전트를 시작하면 1로 변경됩니다. 설치 중에 SQL Server 에이전트가 자동으로 시작되도록 설정하면 1이 됩니다.

    allow updates(구식. 사용할 수 없으며 사용할 경우 다시 구성하는 동안 오류 발생)

    0

    1

    0

    awe enabled(A, RR)

    0

    1

    0

    blocked process threshold(A)

    0

    86400

    0

    c2 audit mode(A, RR)

    0

    1

    0

    clr enabled

    0

    1

    0

    common criteria compliance enabled(A, RR)

    0

    1

    0

    cost threshold for parallelism(A)

    0

    32767

    5

    cross db ownership chaining

    0

    1

    0

    cursor threshold(A)

    -1

    2147483647

    -1

    Database Mail XPs(A)

    0

    1

    0

    default full-text language(A)

    0

    2147483647

    1033

    default language

    0

    9999

    0

    default trace enabled(A)

    0

    1

    1

    disallow results from triggers(A)

    0

    1

    0

    fill factor(A, RR)

    0

    100

    0

    ft crawl bandwidth(max), ft crawl bandwidth(A) 참조

    0

    32767

    100

    ft crawl bandwidth(min), ft crawl bandwidth(A) 참조

    0

    32767

    0

    ft notify bandwidth(max), ft notify bandwidth(A) 참조

    0

    32767

    100

    ft notify bandwidth(min), ft notify bandwidth(A) 참조

    0

    32767

    0

    index create memory(A, SC)

    704

    2147483647

    0

    in-doubt xact resolution(A)

    0

    2

    0

    lightweight pooling(A, RR)

    0

    1

    0

    locks(A, RR, SC)

    5000

    2147483647

    0

    max degree of parallelism(A)

    0

    64

    0

    max full-text crawl range(A)

    0

    256

    4

    max server memory(A, SC)

    16

    2147483647

    2147483647

    max text repl size

    0

    2147483647

    65536

    max worker threads(A, RR)

    128

    32767

    32비트 SQL Server에는 최대 1024, 64비트 SQL Server에는 최대 2048을 설정하는 것이 좋습니다.

    0

    값 0을 선택하면 32비트 SQL Server의 경우 (256+(<processors> -4) * 8) 수식을 사용하고 64비트 SQL Server의 경우 이 값의 두 배를 사용하여 프로세서 수에 따라 max worker threads의 수가 자동으로 구성됩니다.

    media retention(A, RR)

    0

    365

    0

    min memory per query(A)

    512

    2147483647

    1024

    min server memory(A, SC)

    0

    2147483647

    8

    nested triggers

    0

    1

    1

    network packet size(A)

    512

    32767

    4096

    Ole Automation Procedures(A)

    0

    1

    0

    open objects(A, RR, 구식)

    0

    2147483647

    0

    PH_timeout(A)

    1

    3600

    60

    precompute rank(A)

    0

    1

    0

    priority boost(A, RR)

    0

    1

    0

    query governor cost limit(A)

    0

    2147483647

    0

    query wait(A)

    -1

    2147483647

    -1

    recovery interval(A, SC)

    0

    32767

    0

    remote access(RR)

    0

    1

    1

    remote admin connections

    0

    1

    0

    remote login timeout

    0

    2147483647

    20

    remote proc trans

    0

    1

    0

    remote query timeout

    0

    2147483647

    600

    Replication XPs 옵션(A)

    0

    1

    0

    scan for startup procs(A, RR)

    0

    1

    0

    server trigger recursion

    0

    1

    1

    set working set size(A, RR, 구식)

    0

    1

    0

    show advanced options

    0

    1

    0

    SMO and DMO XPs(A)

    0

    1

    1

    SQL Mail XPs(A)

    0

    1

    0

    transform noise words(A)

    0

    1

    0

    two digit year cutoff(A)

    1753

    9999

    2049

    user connections(A, RR, SC)

    0

    32767

    0

    User Instance Timeout(A, SQL Server 2005 Express Edition에서만 나타남)

    5

    65535

    60

    user instances enabled(A, SQL Server 2005 Express Edition에서만 나타남)

    0

    1

    0

    user options

    0

    32767

    0

    Web Assistant Procedures(A)

    0

    1

    0

    xp_cmdshell(A)

    0

    1

    0


'SQL' 카테고리의 다른 글

xp_cmdshell (MS SQL Server 2005)  (0) 2009.08.12
sp_configure xp_cmdshell 옵션  (0) 2009.08.12
프록시 자격 증명 설정 : sp_xp_cmdshell_proxy_account(Transact-SQL)  (0) 2009.08.11
Transact-SQL 구문 규칙  (0) 2009.08.11
sp_configure  (0) 2009.08.11
Posted by ProjectGhost
sp_xp_cmdshell_proxy_account [ NULL | { 'account_name' , 'password' } ]

인수

NULL

프록시 자격 증명을 삭제하도록 지정합니다.

account_name

프록시가 될 Windows 로그인을 지정합니다.

password

Windows 계정의 암호를 지정합니다.

반환 코드 값

0(성공) 또는 1(실패)

주의

프록시 자격 증명은 ##xp_cmdshell_proxy_account##가 됩니다.

NULL 옵션을 사용하여 실행할 경우 sp_xp_cmdshell_proxy_account는 프록시 자격 증명을 삭제합니다.

사용 권한

CONTROL SERVER 권한이 필요합니다.

1. 프록시 자격 증명 만들기

다음 예에서는 ds35efg##65 암호를 사용하여 ADVWKS\Max04라는 Windows 계정에 대한 프록시 자격 증명을 만드는 방법을 보여 줍니다.

EXEC sp_xp_cmdshell_proxy_account 'ADVWKS\Max04', 'ds35efg##65";GO

2. 프록시 자격 증명 삭제

다음 예에서는 자격 증명 저장소에서 프록시 자격 증명을 제거합니다.

EXEC sp_xp_cmdshell_proxy_account NULL;GO

'SQL' 카테고리의 다른 글

sp_configure xp_cmdshell 옵션  (0) 2009.08.12
SQL Server 2005 서버 구성 옵션 설정  (0) 2009.08.12
Transact-SQL 구문 규칙  (0) 2009.08.11
sp_configure  (0) 2009.08.11
sp_executesql  (0) 2009.08.10
Posted by ProjectGhost

Transact-SQL 구문 규칙

 | SQL
2009. 8. 11. 22:03

다음 표에서는 Transact-SQL 참조의 구문 다이어그램에 사용되는 규칙을 나열하고 설명합니다.

규칙 용도

대문자

Transact-SQL 키워드입니다.

기울임꼴

사용자가 제공하는 Transact-SQL 구문 매개 변수입니다.

굵게

표시된 그대로 입력해야 하는 데이터베이스 이름, 테이블 이름, 열 이름, 인덱스 이름, 저장 프로시저, 유틸리티, 데이터 형식 이름 및 텍스트입니다.

밑줄

밑줄 친 값이 포함된 절이 문에 지정되지 않을 때 적용되는 기본값을 나타냅니다.

|(세로 막대)

대괄호 또는 중괄호 내에서 구문 항목을 구분합니다. 항목 중 하나만 사용할 수 있습니다.

[ ](대괄호)

선택적 구문 항목입니다. 대괄호는 입력하지 않습니다.

{}(중괄호)

필수 구문 항목입니다. 중괄호는 입력하지 않습니다.

[,...n]

앞의 항목이 n번 반복될 수 있음을 나타냅니다. 각 항목은 쉼표로 구분됩니다.

[...n]

앞의 항목이 n번 반복될 수 있음을 나타냅니다. 각 항목은 공백으로 구분됩니다.

[;]

Transact-SQL 문 종결자(옵션)입니다. 대괄호는 입력하지 않습니다.

<레이블> ::=

구문 블록의 이름입니다. 이 규칙은 문에서 한 번 이상 사용될 수 있는 긴 구문의 섹션 또는 구문 단위를 그룹화하고 레이블을 붙일 때 사용됩니다. 구문 블록이 사용될 수 있는 위치는 <레이블>과 같은 모양의 레이블로 표시됩니다.

다중 부분 이름

다른 지침이 없으면 데이터베이스 개체 이름에 대한 모든 Transact-SQL 참조는 다음 형식과 같이 네 부분으로 된 이름으로 구성됩니다.

server_name.[database_name].[schema_name].object_name

| database_name.[schema_name].object_name

| schema_name.object_name

| object_name

server_name

연결된 서버 이름 또는 원격 서버 이름을 지정합니다.

database_name

개체가 SQL Server의 로컬 인스턴스에 있을 때 SQL Server 데이터베이스의 이름을 지정합니다. 개체가 연결된 서버에 있으면 database_name에 OLE DB 카탈로그를 지정합니다.

schema_name

개체가 SQL Server 데이터베이스에 있을 경우 해당 개체가 포함된 스키마의 이름을 지정합니다. 개체가 연결된 서버에 있으면 schema_name에 OLE DB 스키마 이름을 지정합니다. 스키마에 대한 자세한 내용은 사용자와 스키마 분리를 참조하십시오.

object_name

개체의 이름을 참조합니다.

특정 개체를 참조할 때 SQL Server 2005 데이터베이스 엔진에서 개체를 식별하기 위해 항상 서버, 데이터베이스 및 스키마를 지정할 필요는 없습니다. 하지만 개체를 찾을 수 없으면 오류가 반환됩니다.

참고:
이름 확인 오류를 방지하기 위해서는 스키마 범위 개체를 지정할 때 항상 스키마를 지정하는 것이 좋습니다.

중간 노드를 생략하려면 마침표를 사용해 이 위치를 표시하십시오. 다음 표에서는 개체 이름의 유효한 형식을 보여 줍니다.

개체 참조 형식 설명

server.database.schema.object

네 부분으로 이루어진 이름입니다.

server.database..object

스키마 이름이 생략됩니다.

server..schema.object

데이터베이스 이름이 생략됩니다.

server...object

데이터베이스 및 스키마 이름이 생략됩니다.

database.schema.object

서버 이름이 생략됩니다.

database..object

서버 및 스키마 이름이 생략됩니다.

schema.object

서버 및 데이터베이스 이름이 생략됩니다.

object

서버, 데이터베이스 및 스키마 이름이 생략됩니다.

코드 예 표기 규칙

특별한 언급이 없으면 Transact-SQL 참조에서 제공되는 예는 다음 옵션에 대해 기본 설정을 사용하여 SQL Server Management Studio에서 테스트되었습니다.

  • ANSI_NULLS

  • ANSI_NULL_DFLT_ON

  • ANSI_PADDING

  • ANSI_WARNINGS

  • CONCAT_NULL_YIELDS_NULL

  • QUOTED_IDENTIFIER

Transact-SQL 참조에 있는 대부분의 코드 예는 정렬 시 대/소문자를 구분하는 서버에서 테스트되었으며 일반적으로 테스트 서버에서는 ANSI/ISO 1252 코드 페이지가 실행됩니다.

많은 코드 예에서 Transact-SQL 문 종결자로 세미콜론(;)을 사용합니다. 세미콜론 사용이 필수적인 것은 아니지만 사용하는 것이 바람직합니다.

많은 코드 예에서 문자 N을 유니코드 문자열 상수의 접두사로 사용합니다. 접두사 N이 없으면 문자열이 데이터베이스의 기본 코드 페이지로 변환됩니다. 이 기본 코드 페이지는 일부 문자를 인식하지 않을 수 있습니다. 자세한 내용은 유니코드를 사용한 서버측 프로그래밍을 참조하십시오.


'SQL' 카테고리의 다른 글

SQL Server 2005 서버 구성 옵션 설정  (0) 2009.08.12
프록시 자격 증명 설정 : sp_xp_cmdshell_proxy_account(Transact-SQL)  (0) 2009.08.11
sp_configure  (0) 2009.08.11
sp_executesql  (0) 2009.08.10
xp_cmdshell (MS SQL Server 2000)  (0) 2009.08.03
Posted by ProjectGhost

sp_configure

 | SQL
2009. 8. 11. 21:41

구문
sp_configure [ [ @configname = ] 'option_name' 
    [ , [ @configvalue = ] 'value' ] ] 

인수

[ @configname = ] 'option_name'

구성 옵션의 이름입니다. option_namevarchar(35)이며 기본값은 NULL입니다. SQL Server 2005 데이터베이스 엔진에서는 구성 이름의 일부인 고유 문자열을 모두 인식합니다. 이 인수를 지정하지 않으면 옵션의 전체 목록이 반환됩니다.

사용 가능한 구성 옵션 및 해당 설정에 대한 자세한 내용은 서버 구성 옵션 설정을 참조하십시오.

[ @configvalue = ] 'value'

새로운 구성 설정입니다. valueint이며 기본값은 NULL입니다. 최대값은 개별 옵션에 따라 달라집니다.

각 옵션의 최대값을 보려면 sys.configurations 카탈로그 뷰의 maximum 열을 참조하십시오.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

sp_configure를 매개 변수 없이 실행하면 열이 5개인 결과 집합이 반환되고 다음 표와 같이 옵션이 알파벳 오름차순으로 정렬됩니다.

config_valuerun_value의 값은 자동으로 일치되지 않습니다. sp_configure를 사용하여 구성 설정을 업데이트한 후 시스템 관리자는 RECONFIGURE 또는 RECONFIGURE WITH OVERRIDE를 사용하여 실행 중인 구성 값을 업데이트해야 합니다. 자세한 내용은 주의 섹션을 참조하십시오.

열 이름 데이터 형식 설명

name

nvarchar(35)

구성 옵션의 이름입니다.

minimum

int

구성 옵션의 최소값입니다.

maximum

int

구성 옵션의 최대값입니다.

config_value

int

sp_configure를 사용하여 설정한 구성 옵션 값(sys.configurations.value에 있는 값)입니다. 이러한 옵션에 대한 자세한 내용은 서버 구성 옵션 설정sys.configurations(Transact-SQL)를 참조하십시오.

run_value

int

현재 실행 중인 구성 옵션 값(sys.configurations.value_in_use에 있는 값)입니다.

자세한 내용은 sys.configurations(Transact-SQL)를 참조하십시오.

주의

서버 수준의 설정을 표시하거나 변경하려면 sp_configure를 사용합니다. 데이터베이스 수준의 설정을 변경하려면 ALTER DATABASE를 사용합니다. 현재 사용자 세션에만 적용되는 설정을 변경하려면 SET 문을 사용합니다.

실행 중인 구성 값 업데이트

option에 새 value를 지정하면 결과 집합의 config_value 열에 이 값이 표시됩니다. 처음에 이 값은 현재 실행 중인 구성 값을 표시하는 run_value 열의 값과 다릅니다. run_value 열에서 실행 중인 구성 값을 업데이트하려면 시스템 관리자가 RECONFIGURE 또는 RECONFIGURE WITH OVERRIDE를 실행해야 합니다.

RECONFIGURE와 RECONFIGURE WITH OVERRIDE는 둘 다 모든 구성 옵션에 사용할 수 있습니다. 그러나 기본 RECONFIGURE 문은 적당한 범위 밖에 있는 옵션 값이나 옵션 간에 충돌을 일으킬 수 있는 옵션 값을 거부합니다. 예를 들어 recovery interval 값이 60분보다 크거나 affinity mask 값이 affinity I/O mask 값과 겹치는 경우 RECONFIGURE는 오류를 생성합니다. 이와 달리 RECONFIGURE WITH OVERRIDE는 데이터 형식만 맞으면 모든 옵션 값을 허용하며 지정된 값으로 다시 구성합니다.

주의:
옵션 값을 잘못 설정하면 역으로 서버 인스턴스 구성에 영향을 줄 수 있습니다. RECONFIGURE WITH OVERRIDE는 매우 주의를 기울여 사용해야 합니다.

RECONFIGURE 문은 일부 옵션을 동적으로 업데이트합니다. 그외의 옵션을 업데이트하려면 서버를 중지하고 다시 시작해야 합니다. 예를 들어 min server memorymax server memory 서버 메모리 옵션은 데이터베이스 엔진에서 동적으로 업데이트되므로 서버를 다시 시작하지 않고 변경할 수 있습니다. 그러나 실행 중인 fill factor 옵션 값을 다시 구성하려면 데이터베이스 엔진을 다시 시작해야 합니다.

구성 옵션에서 RECONFIGURE를 실행한 후 sp_configure 'option_name'을 실행하면 옵션이 동적으로 업데이트되었는지 확인할 수 있습니다. 동적으로 업데이트되는 옵션으로서 run_value 열과 config_value 열의 값은 일치해야 합니다. 또한 sys.configurations 카탈로그 뷰의 is_dynamic 열을 보면 동적으로 업데이트되는 옵션을 확인할 수 있습니다.

참고:
옵션에 지정한 value가 너무 높을 경우 run_value 열은 적합하지 않은 설정을 사용하는 대신 데이터베이스 엔진에서 동적 메모리에 대해 기본적으로 갖고 있는 설정을 반영합니다.

자세한 내용은 RECONFIGURE(Transact-SQL)를 참조하십시오.

고급 옵션

affinity maskrecovery interval과 같은 일부 구성 옵션은 고급 옵션으로 지정됩니다. 기본적으로 이 옵션은 보거나 변경할 수 없습니다. 이 옵션을 사용하려면 Show Advanced Options 구성 옵션을 1로 설정합니다.

구성 옵션 및 해당 설정에 대한 자세한 내용은 서버 구성 옵션 설정을 참조하십시오.

사용 권한

매개 변수 없이 또는 첫 번째 매개 변수만 사용하여 sp_configure를 실행할 수 있는 권한은 기본적으로 모든 사용자에게 부여됩니다. 구성 옵션을 변경하는 두 매개 변수를 사용하여 sp_configure를 실행하려면 ALTER SETTINGS 서버 수준 권한이 있어야 합니다. sysadminserveradmin 고정 서버 역할은 ALTER SETTINGS 권한을 암시적으로 보유하고 있습니다. RECONFIGURE 문을 실행하려면 ALTER SETTINGS 서버 수준 권한이 있어야 합니다. sysadmin 고정 서버 역할과 serveradmin 고정 서버 역할은 ALTER SETTINGS 권한을 암시적으로 보유하고 있습니다.

1. 고급 구성 옵션 나열

다음 예에서는 모든 구성 옵션을 설정하고 나열하는 방법을 보여 줍니다. 먼저 show advanced option1로 설정하면 고급 구성 옵션이 표시됩니다. 이 옵션을 변경한 다음 매개 변수 없이 sp_configure를 실행하면 모든 구성 옵션이 표시됩니다.

USE master;
GO
EXEC sp_configure 'show advanced option', '1';

메시지는 다음과 같습니다. "구성 옵션 'show advanced options'이(가) 0에서 1(으)로 변경되었습니다. RECONFIGURE 문을 실행하여 설치하십시오."

RECONFIGURE를 실행하여 모든 구성 옵션을 표시합니다.

RECONFIGURE;
EXEC sp_configure;

2. 구성 옵션 변경

다음 예에서는 시스템 recovery interval3분으로 설정합니다.

USE master;
GO
EXEC sp_configure 'recovery interval', '3';
RECONFIGURE WITH OVERRIDE;

'SQL' 카테고리의 다른 글

프록시 자격 증명 설정 : sp_xp_cmdshell_proxy_account(Transact-SQL)  (0) 2009.08.11
Transact-SQL 구문 규칙  (0) 2009.08.11
sp_executesql  (0) 2009.08.10
xp_cmdshell (MS SQL Server 2000)  (0) 2009.08.03
TABLE 정리 스크립트  (0) 2009.07.24
Posted by ProjectGhost

sp_executesql

 | SQL
2009. 8. 10. 15:40

sp_executesql

여러 번 사용할 수 있거나, 동적으로 만들어진 Transact-SQL문 또는 일괄 처리를 실행합니다. Transact-SQL문 또는 일괄 처리는 포함 매개 변수를 포함할 수 있습니다.

구문

sp_executesql [@stmt =] stmt
[
    
{, [@params =] N'@parameter_name  data_type [,...n]' }
     {, [@param1 =] 'value1' [,...n] }
]

인수

[@stmt =] stmt

Transact-SQL문 또는 일괄 처리를 포함한 유니코드 문자열입니다. stmt는 암시적으로 ntext로 변환될 수 있는 변수 또는 유니코드 상수여야 합니다. + 연산자로 두 개의 문자열을 연결한 식 등과 같은 보다 복잡한 유니코드식은 사용할 수 없습니다. 문자 상수도 사용할 수 없습니다. 상수가 지정된 경우에는 N이라는 접두사가 있어야 합니다. 예를 들어, N'sp_who'라는 유니코드 상수는 사용할 수 있지만 'sp_who'는 사용할 수 없습니다. 문자열의 크기는 사용 가능한 데이터베이스 서버의 메모리의 용량에 따라서만 제한됩니다.

stmt는 변수 이름과 동일한 형식의 매개 변수를 포함할 수 있습니다. 예를 들면 다음과 같습니다.

N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'

stmt에 포함된 각 매개 변수에는 @params 매개 변수 정의 목록과 매개 변수 값 목록 모두에 해당되는 항목이 있어야 합니다.

[@params =] N'@parameter_name  data_type [,...n]'

stmt에 포함된 모든 매개 변수의 정의를 포함하는 하나의 문자열입니다. 문자열은 암시적으로 ntext로 변환될 수 있는 변수 또는 유니코드 상수여야 합니다. 각 매개 변수의 정의는 매개 변수 이름과 데이터 형식으로 구성됩니다. n은 추가 매개 변수 정의를 나타내는 자리 표시자입니다. stmt에서 지정된 모든 매개 변수는 반드시 @params에서 정의되어야 합니다. stmt의 Transact-SQL문 또는 일괄 처리에 매개 변수가 없는 경우에는 @params가 필요하지 않습니다. 이 매개 변수의 기본값은 NULL입니다.

[@param1 =] 'value1'

매개 변수 문자열에서 정의된 첫번째 매개 변수의 값입니다. 값은 상수 또는 변수가 될 수 있습니다. stmt에 포함된 모든 매개 변수에 대해 제공되는 매개 변수 값이 있어야 합니다. stmt의 Transact-SQL문 또는 일괄 처리에 매개 변수가 없는 경우에는 값이 필요하지 않습니다.

n

추가 매개 변수의 값에 대한 자리 표시자입니다. 값은 상수 또는 변수만 가능합니다. 값은 함수 또는 연산자를 사용하여 작성된 표현식 등과 같이, 보다 복잡한 표현식이 될 수 없습니다.

반환 코드 값

0(성공) 또는 1(실패)

결과 집합

SQL 문자열에 작성된 모든 SQL문에서 결과 집합을 반환합니다.

비고

sp_executesql은 일괄 처리, 이름의 범위 및 데이터베이스 컨텍스트면에서 EXECUTE와 동작이 동일합니다. sp_executesql stmt 매개 변수의 Transact-SQL문 또는 일괄 처리는 sp_executesql이 실행될 때까지 컴파일되지 않습니다. stmt의 내용은 sp_executesql이라는 일괄 처리의 실행 계획과 별도로 컴파일되고 실행됩니다. sp_executesql 일괄 처리는 sp_executesql을 호출하는 일괄 처리에서 선언된 변수를 참조할 수 없습니다. sp_executesql 일괄 처리의 로컬 커서 또는 변수는 sp_executesql을 호출하는 일괄 처리에는 보이지 않습니다. 데이터베이스 컨텍스트 내의 변경 사항은 sp_executesql문이 종료될 때까지만 지속됩니다.

문에 대한 매개 변수의 변경 사항이 변형뿐인 경우, Transact-SQL문을 여러 번 실행하기 위해 저장 프로시저 대신 sp_executesql을 사용할 수 있습니다. Transact-SQL문 자체에 상수가 남아 있으며 매개 변수 값만이 변경되었으므로 Microsoft® SQL Server™ 쿼리 최적화 프로그램이 첫번째 실행에 대해 생성된 실행 계획을 다시 사용할 확률이 높습니다.

참고  
문의 문자열에 있는 개체 이름이 정식으로 규정되지 않은 경우에는 실행 계획이 다시 사용되지 않습니다.

sp_executesql은 Transact-SQL 문자열과 별도로 매개 변수 값의 설정을 지원합니다.

DECLARE @IntVariable INT
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)

/* Build the SQL string once.*/
SET @SQLString =
     N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint'
/* Execute the string with the first parameter value. */
SET @IntVariable = 35
EXECUTE sp_executesql @SQLString, @ParmDefinition,
                      @level = @IntVariable
/* Execute the same string with the second parameter value. */
SET @IntVariable = 32
EXECUTE sp_executesql @SQLString, @ParmDefinition,
                      @level = @IntVariable

sp_executesql에서 매개 변수를 대치할 수 있는 경우에는 EXECUTE문을 사용하여 문자열을 실행하는 데 있어서 다음과 같은 장점이 있습니다.

  • sp_executesql 문자열에 있는 Transact-SQL문의 실제 텍스트가 실행 사이에 변경되지 않으므로 쿼리 최적화 프로그램이 두 번째 실행의 Transact-SQL문과 첫번째 실행에 대해 생성된 실행 계획을 일치시킬 가능성이 있습니다. 따라서 SQL Server가 두 번째 문을 컴파일할 필요가 없습니다.

  • Transact-SQL 문자열이 단 한 번만 작성됩니다.

  • 정수 매개 변수는 자신의 기본 형식으로 지정됩니다. 유니코드를 캐스팅할 필요가 없습니다.
사용 권한

public 역할에 대한 기본 권한을 실행합니다.

예제
A. 단순 SELECT문 실행

다음은 @level이라는 포함 매개 변수를 포함한 단순 SELECT 문을 작성하고 실행하는 예제입니다.

execute sp_executesql 
          N'select * from pubs.dbo.employee where job_lvl = @level',
          N'@level tinyint',
          @level = 35
B. 동적으로 작성된 문자열 실행

다음은 sp_executesql을 사용하여 동적으로 작성된 문자열을 실행하는 예제입니다. 예로 든 저장 프로시저는 일 년 간의 판매 데이터를 파티션으로 분리하는데 사용되는 일련의 테이블에 데이터를 삽입하는 데 사용됩니다. 일 년의 각 달에는 다음과 같은 형식의 테이블이 한 개씩 있습니다.

CREATE TABLE May1998Sales
    (OrderID      INT      PRIMARY KEY,
    CustomerID      INT      NOT NULL,
    OrderDate      DATETIME   NULL
        CHECK (DATEPART(yy, OrderDate) = 1998),
    OrderMonth      INT
        CHECK (OrderMonth = 5),
    DeliveryDate   DATETIME   NULL,
        CHECK (DATEPART(mm, OrderDate) = OrderMonth)
    )

파티션으로 분리된 테이블에서 데이터를 검색하는 것에 관한 자세한 내용은 파티션으로 분리된 데이터로 보기 사용을 참조하십시오.

각 테이블의 이름은 달 이름의 첫 세 글자, 연도를 표시하는 네 자리 수 및 상수인 Sales로 구성됩니다. 이름은 주문 날짜에서 동적으로 작성될 수 있습니다.

/* Get the first three characters of the month name. */
SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +
/* Concatenate the four-digit year; cast as character. */
CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +
/* Concatenate the constant 'Sales'. */
'Sales'

이러한 견본 저장 프로시저는 동적으로 INSERT 문을 작성하고 실행하여 새 주문을 올바른 테이블에 삽입합니다. 또한 반드시 데이터를 포함해야 하는 테이블의 이름을 작성하는 데 주문 날짜를 사용하며, 작성된 이름은 INSERT 문에 병합됩니다. 이는 sp_executesql의 단순한 예입니다. 여기에는 오류 확인 및 테이블 간에 주문 번호가 중복되지 않았는지를 확인하는 등의 업무 규칙 확인이 포함되지 않습니다.

CREATE PROCEDURE InsertSales @PrmOrderID INT, @PrmCustomerID INT,
                 @PrmOrderDate DATETIME, @PrmDeliveryDate DATETIME
AS
DECLARE @InsertString NVARCHAR(500)
DECLARE @OrderMonth INT

-- Build the INSERT statement.
SET @InsertString = 'INSERT INTO ' +
       /* Build the name of the table. */
       SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +
       CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +
       'Sales' +
       /* Build a VALUES clause. */
       ' VALUES (@InsOrderID, @InsCustID, @InsOrdDate,' +
       ' @InsOrdMonth, @InsDelDate)'

/* Set the value to use for the order month because
   functions are not allowed in the sp_executesql parameter
   list. */
SET @OrderMonth = DATEPART(mm, @PrmOrderDate)

EXEC sp_executesql @InsertString,
     N'@InsOrderID INT, @InsCustID INT, @InsOrdDate DATETIME,
       @InsOrdMonth INT, @InsDelDate DATETIME',
     @PrmOrderID, @PrmCustomerID, @PrmOrderDate,
     @OrderMonth, @PrmDeliveryDate

GO

이 프로시저에서는 EXECUTE를 실행하는 것보다 sp_executesql을 실행하여 문자열을 실행하는 것이 더 효과적입니다. sp_executesql을 실행하는 경우, 각 개월별 테이블에 대해 한 개씩, 12 버전의 INSERT 문자열만이 생성됩니다. EXECUTE의 경우, 매개 변수 값이 다르므로 각 INSERT 문자열이 고유합니다. 두 가지 방법 모두 같은 수의 일괄 처리를 생성하지만 sp_executesql에 의해 생성된 INSERT 문자열의 유사성으로 인해 쿼리 최적화 프로그램이 실행 계획을 다시 사용할 확률이 높습니다.


'SQL' 카테고리의 다른 글

Transact-SQL 구문 규칙  (0) 2009.08.11
sp_configure  (0) 2009.08.11
xp_cmdshell (MS SQL Server 2000)  (0) 2009.08.03
TABLE 정리 스크립트  (0) 2009.07.24
프로시저에서 DTS Package 실행하기  (0) 2009.07.23
Posted by ProjectGhost

BLOG main image
by ProjectGhost

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :