컬럼 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 (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_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

xp_cmdshell (MS SQL Server 2000)

 | SQL
2009. 8. 3. 09:17

xp_cmdshell

지정한 명령 문자열을 운영 체제 명령 셸로 실행하며 모든 출력을 텍스트의 행으로 반환합니다. 관리자가 아닌 사용자에게 xp_cmdshell을 실행할 수 있는 사용 권한을 부여합니다.

 

참고   Microsoft® Windows® 95 또는 Microsoft Windows 98 운영 체제에서 xp_cmdshell을 실행하는 경우, xp_cmdshell의 반환 코드는 호출된 실행 파일의 종료 코드를 처리하도록 설정되지 않습니다. 반환 코드는 항상 0이 됩니다.

구문

xp_cmdshell {'command_string'} [, no_output]

인수

'command_string'

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

no_output

지정한 command_string을 실행하고 클라이언트에 출력을 반환하지 않는 선택적 매개 변수입니다.

반환 코드 값

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

결과 집합

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

xp_cmdshell 'dir *.exe'

행은 nvarchar(255) 열에서 반환됩니다.

xp_cmdshell 문을 실행하면 다음과 같은 결과 집합이 반환됩니다.

xp_cmdshell 'dir *.exe', NO_OUTPUT

결과는 다음과 같습니다.

명령이 성공적으로 완료되었습니다.
비고

xp_cmdshell은 동기식으로 작업합니다. 명령 셸 명령이 완료될때까지는 제어가 반환되지 않습니다.

사용자에게 실행 권한을 부여하는 경우, 사용자는 Microsoft SQL Server™를 실행하는 계정이 실행에 필요한 특권을 가진 Microsoft Windows NT® 명령 셸에서 모든 운영 체제 명령을 실행할 수 있습니다.

기본적으로 sysadmin 고정 서버 역할의 구성원만이 이 확장 저장 프로시저를 실행할 수 있습니다. 그러나 다른 사용자에게 이 저장 프로시저를 실행할 권한을 부여할 수 있습니다.

sysadmin 고정 서버 역할의 구성원인 사용자가 xp_cmdshell을 호출하면 xp_cmdshell이 SQL Server 서비스가 실행 중인 보안 컨텍스트에서 실행됩니다. 사용자가 sysadmin 그룹의 구성원이 아니면 xp_cmdshell이 SQL Server 에이전트 프록시 계정을 가장하는데 이 계정은 xp_sqlagent_proxy_account를 사용하여 지정합니다. 프록시 계정을 사용할 수 없으면 xp_cmdshell이 실패합니다. 이는 Microsoft® Windows NT® 4.0 및 Windows 2000에 대해서만 적용됩니다. Windows 9.x에서는 xp_cmdshell이 가장하지 않으며 항상 SQL Server를 시작한 Windows 9.x 사용자의 보안 컨텍스트에서 실행됩니다.


참고   이전 버전에서는 xp_cmdshell에 대한 실행 권한을 부여 받은 사용자가 MSSQLServer 서비스의 사용자 계정 컨텍스트에서 명령을 실행하였습니다. SQL Server에 대해 sa 액세스가 없는 사용자가 SQLExecutiveCmdExec Windows NT 계정의 컨텍스트에서 xp_cmdshell을 실행할 수 있도록 구성 옵션을 사용하여 SQL Server를 구성할 수 있습니다. SQL Server 7.0에서는 이 계정을 SQLAgentCmdExec라고 합니다. 이제 sysadmin 고정 서버 역할의 구성원이 아닌 사용자도 구성 변경을 지정하지 않고 이 계정의 컨텍스트에서 명령을 실행할 수 있습니다.

사용 권한

sysadmin 고정 서버 역할의 구성원에 xp_cmdshell에 대한 기본 권한을 실행합니다. 단, 다른 사용자에게도 부여할 수 있습니다.

중요  
MSSQLServer 서비스에 대한 로컬 관리자 그룹의 구성원이 아닌 Windows NT를 사용하기로 선택한 경우에는 sysadmin 고정 서버 역할의 구성원이 아닌 사용자가 xp_cmdshell을 실행할 수 없습니다.
예제
A. 실행 파일의 목록 반환

다음은 디렉터리 명령을 실행하는 xp_cmdshell 확장 저장 프로시저를 보여 주는 예제입니다.

EXEC master..xp_cmdshell 'dir *.exe'
B. Windows NT 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
C. 출력 반환 안함

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

USE master
EXEC xp_cmdshell 'copy c:\sqldumps\pubs.dmp \\server2\backups\sqldumps', 
   NO_OUTPUT
D. 반환 상태 사용

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

DECLARE @result int
EXEC @result = xp_cmdshell 'dir *.exe'
IF (@result = 0)
   PRINT 'Success'
ELSE
   PRINT 'Failure'
E. 파일에 변수 내용 기록

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

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

'SQL' 카테고리의 다른 글

sp_configure  (0) 2009.08.11
sp_executesql  (0) 2009.08.10
TABLE 정리 스크립트  (0) 2009.07.24
프로시저에서 DTS Package 실행하기  (0) 2009.07.23
SQL 기초 3  (0) 2009.06.20
Posted by ProjectGhost

TABLE 정리 스크립트

 | SQL
2009. 7. 24. 10:16
------------------------------------------------------------
-- TABLE 정리 스크립트
-- TABLE의 삭제된 가변 길이 열과 텍스트 열의 공간을 다시 사용합니다.
-- 가끔씩 돌려주면 DB가 좋아하고 성능도 좋아진다.
------------------------------------------------------------
SET NOCOUNT ON

DECLARE RCur CURSOR READ_ONLY
FOR select 'DBCC CLEANTABLE(''' + TABLE_CATALOG +''',''' + TABLE_SCHEMA+'.'+TABLE_NAME +''')' AS SQL
from information_schema.tables
where table_type = 'BASE TABLE'
and table_name <> 'dtproperties'


DECLARE @strSQL VARCHAR(2000)
, @dtStart DATETIME
OPEN RCur

SET @dtStart = GETDATE()
PRINT '=========배치시작 : '+CONVERT(VARCHAR, @dtStart, 121) + '============='

FETCH NEXT FROM RCur INTO @strSQL
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN

PRINT '['+@strSQL+'] 작업시작'
EXEC (@strSQL)
PRINT '['+@strSQL+'] 작업종료'

END
FETCH NEXT FROM RCur INTO @strSQL
END
PRINT '=========배치종료 : '+CONVERT(VARCHAR, GETDATE(), 121) + '============='
PRINT '=========소요시간 : '+CONVERT(VARCHAR, DATEDIFF(ss,@dtStart, GETDATE())) + ' 초=========='

CLOSE RCur
DEALLOCATE RCur


SET NOCOUNT OFF

'SQL' 카테고리의 다른 글

sp_executesql  (0) 2009.08.10
xp_cmdshell (MS SQL Server 2000)  (0) 2009.08.03
프로시저에서 DTS Package 실행하기  (0) 2009.07.23
SQL 기초 3  (0) 2009.06.20
SQL 기초 2  (0) 2009.06.20
Posted by ProjectGhost
안녕하세요.
새로운 한주가 시작되었네요... 
다름 아니라 DTS 패키지를 쿼리문으로 만들어 사용할 수 있는지오?
XML로 쿼리문을 만들어 프로그램에서 이 쿼리문을 호출 해볼까해서요???
 
 
안녕하세요..^^
 
말씀하신 사항은 dtsrun.exe라는 명령과 SQL 명령 중 xp_cmdshell 을 이용해서 수행할 수 있습니다.
예를 들어, localhost에 저장된 DTSPackage라는 패키지를 실행시키고자 한다면, 쿼리 분석기에서 다음과 같이 사용하면 됩니다.

 

EXEC master..xp_cmdshell 'dtsrun /S"localhost" /E /N"DTSPackage"'


여기서 /S뒷 부분은 서버명이고, /E는 윈도우 인증, /N은 패키지 명입니다.
이 옵션들 외에 dtsrun.exe와 관련된 자세한 옵션은 dtsrun.exe /? 명령을 참고하시기 바랍니다.
 

C:\>dtsrun /?

사용법:  dtsrun /옵션 [] [/옵션 []] ...

옵션 ('/?' 화면 표시; '/' '-' 대치할 있음):

 

  패키지 검색:

    /~S 서버 이름

    /~U 사용자 이름

    /~P 암호

    /E 대신 트러스트된 연결 사용>

    /~N 패키지 이름

    /~M 패키지 암호

    /~G 패키지 GUID 문자열

    /~V 패키지 버전 GUID 문자열

    /~F 구조적 저장소 UNC 파일 이름(/S 지정된 경우 덮어쓰기)

    /~R 리포지토리 데이터베이스 이름 <공백인 경우 기본값 사용; 리포지토리 데이터베이스에서 패키지 로드>

 

  패키지 작업(저장된 패키지 설정 무시):

    /~A 전역 변수 이름:typeid= <전체 문자열 인용 가능(이름:typeid 포함)>

    /~L 로그 파일 이름

    /~W Windows 이벤트 로그에 완료 상태 쓰기 또는 False>

 

  DTSRun 동작(기본값은 패키지 실행):

    /!X < 실행하지 않음; /F 파일 이름에 대한 패키지 검색>

    /!D <실행하지 않음; SQL Server에서 패키지 삭제(저장소 파일에서는 삭제할 없음)>

    /!Y <실행하지 않음; 암호화된 명령줄 출력>

    /!C <명령줄을 Windows 클립보드로 복사(/!Y /!X 함께 사용 가능)>

 

  참고:

    ~ 옵션입니다. 옵션을 지정한 경우 매개 변수는 암호화된 값의 16진수 텍스트(0x313233...)입니다.

    명령 스위치와 사이의 공백은 생략 가능합니다.

    값의 중간 공백은 큰따옴표 안에 포함되어야 합니다.

    옵션을 여러 지정하면 마지막 옵션이 적용됩니다(/A 여러 지정한 경우는 제외). 

 

[출처] 프로시저에서 DTS Package 실행하기|작성자 항해자

'SQL' 카테고리의 다른 글

xp_cmdshell (MS SQL Server 2000)  (0) 2009.08.03
TABLE 정리 스크립트  (0) 2009.07.24
SQL 기초 3  (0) 2009.06.20
SQL 기초 2  (0) 2009.06.20
SQL 기초 1  (0) 2009.06.19
Posted by ProjectGhost

BLOG main image
by ProjectGhost

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :