[MS-SQL] @@SERVERNAME , @@SERVICENAME

@@SERVERNAME(Transact-SQL)

SQL Server 를 실행하는 로컬 서버의 이름을 반환합니다.

구문

@@SERVERNAME


주의
SQL Server 설치 프로그램은 설치 중에 서버 이름을 컴퓨터 이름으로 설정합니다. sp_addserver를 사용하여 @@SERVERNAME을 변경한 다음, SQL Server를 다시 시작하십시오. 그러나 항상 이 방법을 사용해야 하는 것은 아닙니다.

여러 SQL Server 인스턴스가 설치되어 있는 경우 로컬 서버 이름이 설치 후 변경되지 않으면 @@SERVERNAME은 다음 로컬 서버 이름 정보를 반환합니다.

인스턴스 서버 정보
기본 인스턴스 - 'servername'

명명된 인스턴스 - 'servername\instancename'

가상 서버 - 기본 인스턴스 - 'virtualservername'

가상 서버 - 명명된 인스턴스 - 'virtualservername\instancename'


@@SERVERNAME 함수와 SERVERPROPERTY 함수의 SERVERNAME 속성이 비슷한 형식의 문자열을 반환하더라도 정보는 다를 수 있습니다. SERVERNAME 속성은 컴퓨터의 네트워크 이름 변경을 자동으로 보고합니다.

이와 달리 @@SERVERNAME은 이런 변경을 보고하지 않습니다. @@SERVERNAME은 sp_addserver 또는 sp_dropserver 저장 프로시저를 사용하여 로컬 서버 이름 변경을 보고합니다.

반환 유형
nvarchar


다음 예에서는 @@SERVERNAME의 사용법을 보여 줍니다.

------------------------------------------------------------------------------------------
SELECT @@SERVERNAME AS 'Server Name'


결과 집합 예는 다음과 같습니다.

------------------------------------------------------------------------------------------

Server Name
---------------------------------
ACCTG

------------------------------------------------------------------------------------------





@@SERVICENAME(Transact-SQL)


SQL Server 가 실행되고 있는 레지스트리 키의 이름을 반환합니다. @@SERVICENAME은 현재 인스턴스가 기본 인스턴스인 경우에는 'MSSQLSERVER'를 반환하고 현재 인스턴스가 명명된 인스턴스인 경우에는 인스턴스 이름을 반환합니다.

구문


//=========================================================================================

@@SERVICENAME


주의
SQL Server 는 Windows NT에서 MSSQLServer라는 서비스로 실행됩니다. Windows 98에서는 서비스를 지원하지 않으므로 서비스로 실행되지 않습니다.

반환 유형
nvarchar


다음 예에서는 @@SERVICENAME의 사용법을 보여 줍니다.


------------------------------------------------------------------------------------------

SELECT @@SERVICENAME AS 'Service Name'

------------------------------------------------------------------------------------------


결과 집합은 다음과 같습니다.

------------------------------------------------------------------------------------------

Service Name
------------------------------
MSSQLSERVER

------------------------------------------------------------------------------------------
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/22 11:57 2009/01/22 11:57
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3922

[MS-SQL] @@IDENTITY(Transact-SQL)

@@IDENTITY(Transact-SQL)

마지막으로 삽입된 ID 값을 반환하는 시스템 함수입니다.

Transact-SQL 구문 표기 규칙

구문

@@IDENTITY


주의
INSERT, SELECT INTO 또는 대량 복사 문이 완료된 후 @@IDENTITY에는 문에 의해 생성된 마지막 ID 값이 들어 있습니다. 문이 ID 열이 있는 테이블에 영향을 주지 않은 경우에 @@IDENTITY는 NULL을 반환합니다. 여러 행이 삽입되어 여러 ID 값이 생성되면 @@IDENTITY는 마지막으로 생성된 ID 값을 반환합니다. 문이 ID 값을 생성하는 삽입 작업을 수행하는 트리거를 하나 이상 실행하는 경우 문 바로 다음에 @@IDENTITY를 호출하면 트리거로 생성된 마지막 ID 값이 반환됩니다. ID 열이 있는 테이블에 대한 삽입 작업 후에 트리거가 실행되었고 이 트리거가 ID 열이 없는 다른 테이블에 삽입을 수행하는 경우 @@IDENTITY는 첫 번째 삽입의 ID 값을 반환합니다. INSERT나 SELECT INTO 문 또는 대량 복사가 실패했거나 트랜잭션이 롤백된 경우 @@IDENTITY 값은 이전 설정으로 되돌아가지 않습니다.

문 및 트랜잭션이 실패하면 테이블의 현재 ID가 변경되고 ID 열 값 간에 간격이 생성될 수 있습니다. 테이블에 값을 삽입하려고 시도한 트랜잭션이 커밋되지 않아도 ID 값은 롤백되지 않습니다. 예를 들어 IGNORE_DUP_KEY 위반으로 인해 INSERT 문이 실패할 경우 테이블의 현재 ID 값은 여전히 증가합니다.

@@IDENTITY, SCOPE_IDENTITY 및 IDENT_CURRENT는 모두 테이블의 IDENTITY 열에 삽입된 마지막 값을 반환한다는 점에서 서로 비슷한 함수입니다.

@@IDENTITY와 SCOPE_IDENTITY는 현재 세션의 테이블에서 생성된 마지막 ID 값을 반환합니다. 그러나 SCOPE_IDENTITY는 현재 범위 내에서만 값을 반환합니다. @@IDENTITY는 특정 범위로 제한되지 않습니다.

IDENT_CURRENT는 범위 및 세션으로 제한되지 않고 지정된 테이블로 제한됩니다. IDENT_CURRENT는 모든 세션과 범위에 있는 특정 테이블에 생성된 ID 값을 반환합니다. 자세한 내용은 IDENT_CURRENT(Transact-SQL)를 참조하십시오.

@@IDENTITY 함수의 범위는 이 함수를 실행 중인 로컬 서버의 현재 세션입니다. 이 함수는 원격 서버 또는 연결된 서버에 적용할 수 없습니다. 다른 서버의 ID 값을 가져오려면 해당 원격 서버 또는 연결된 서버에서 저장 프로시저를 실행하고 이 저장 프로시저(원격 서버 또는 연결된 서버의 컨텍스트에서 실행 중)에서 ID 값을 수집하여 로컬 서버의 호출 연결에 반환하도록 합니다.

반환 형식
numeric


다음 예에서는 ID 열(LocationID)이 있는 테이블에 행을 삽입하고 @@IDENTITY를 사용하여 새 행에 사용된 ID 값을 표시합니다.


------------------------------------------------------------------------------------------
USE AdventureWorks;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO
------------------------------------------------------------------------------------------


참고 항목
참조
시스템 함수(Transact-SQL)
CREATE TABLE(Transact-SQL)
IDENT_CURRENT(Transact-SQL)
INSERT(Transact-SQL)
SCOPE_IDENTITY(Transact-SQL)
SELECT(Transact-SQL)
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/22 11:56 2009/01/22 11:56
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3921

SET ROWCOUNT (Transact-SQL)

지정한 행 수가 반환된 후 SQL Server 가 쿼리 처리를 중지하도록 합니다.

구문

SET ROWCOUNT { number | @number_var }

주의
중요:
SQL Server 의 다음 버전에서는 SET ROWCOUNT 옵션을 사용해도 DELETE, INSERT 및 UPDATE 문에 영향을 주지 않습니다. 새 개발 작업에서는 SET ROWCOUNT 옵션을 DELETE, INSERT 및 UPDATE 문과 함께 사용하지 말고, 현재 이 옵션을 사용하는 응용 프로그램을 수정하십시오. 또한 현재 SET ROWCOUNT 옵션을 사용하는 DELETE, INSERT 및 UPDATE 문은 TOP 구문을 사용하여 다시 작성하는 것이 좋습니다. 자세한 내용은 DELETE(Transact-SQL), INSERT(Transact-SQL) 또는 UPDATE(Transact-SQL)를 참조하십시오.



원격 테이블 및 로컬 분할 뷰와 원격 분할 뷰에 대한 INSERT, UPDATE, DELETE 문에 대해서는 SET ROWCOUNT 옵션 설정이 무시됩니다.

모든 행이 반환될 수 있도록 이 옵션을 해제하려면 SET ROWCOUNT 0을 지정하십시오.

참고:
SET ROWCOUNT 옵션을 지정하면 대부분의 Transact-SQL 문이 지정한 행 수에 영향을 받게 될 때 처리를 중지합니다. 트리거 및 INSERT, UPDATE, DELETE와 같은 데이터 수정 문이 이에 포함됩니다. ROWCOUNT 옵션은 동적 커서에는 영향을 주지 않지만 키 집합 및 INSENSITIVE 커서의 행 집합을 제한합니다. 이 옵션을 사용할 때는 주의를 기울여야 하며 기본적으로 SELECT 문과 함께 사용해야 합니다.



SET ROWCOUNT 옵션은 행 개수가 더 작은 값일 경우 SELECT 문의 TOP 키워드보다 우선 적용됩니다.

INSERT, UPDATE 및 DELETE 문에서는 명시적인 TOP 식이 동일한 문에 사용될 경우 SET ROWCOUNT 옵션을 무시합니다. 여기에는 INSERT 뒤에 SELECT 절이 오는 문이 포함됩니다.

SET ROWCOUNT 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.

인수

------------------------------------------------------------------------------------------
number | @number_var
------------------------------------------------------------------------------------------

특정 쿼리를 중지하기 전에 처리된 행의 수(정수)입니다.

사용 권한
public 역할의 멤버 자격이 필요합니다.


SET ROWCOUNT는 지정한 행 수 이후에는 처리를 중지합니다. 다음 예에서는 545개 행이 300보다 작은 Quantity 조건과 일치합니다. 그러나 업데이트를 통해 반환된 행 수를 보면 일부 행이 처리되지 않은 것을 알 수 있습니다. ROWCOUNT는 모든 Transact-SQL 문에 영향을 줍니다.


------------------------------------------------------------------------------------------
USE AdventureWorks;
GO
SELECT count(*) AS Count
FROM Production.ProductInventory
WHERE Quantity < 300;
GO
------------------------------------------------------------------------------------------


결과 집합은 다음과 같습니다.


------------------------------------------------------------------------------------------
Count
-----------
537

(1 row(s) affected)
------------------------------------------------------------------------------------------


이제 ROWCOUNT를 4로 설정하고 Quantity가 300보다 작은 모든 행을 업데이트합니다.


------------------------------------------------------------------------------------------
SET ROWCOUNT 4;
UPDATE Production.ProductInventory
SET Quantity = 400
WHERE Quantity < 300;
GO
(4 row(s) affected)
------------------------------------------------------------------------------------------

//========================================================================================

@@ROWCOUNT(Transact-SQL)


최근 실행된 문의 영향을 받은 행 수를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

------------------------------------------------------------------------------------------

@@ROWCOUNT

------------------------------------------------------------------------------------------


주의
Transact-SQL 문은 다음과 같은 방법으로 @@ROWCOUNT의 값을 설정할 수 있습니다.

● @@ROWCOUNT를 영향을 받거나 읽은 행의 수로 설정합니다. 행은 클라이언트로 전송될 수도 그렇지 않을 수도 있습니다.


● 이전에 실행한 문의 @@ROWCOUNT를 유지합니다.


● @@ROWCOUNT를 0으로 다시 설정하지만 클라이언트에게 값을 반환하지 않습니다.


단순한 할당을 수행하는 문은 항상 @@ROWCOUNT 값을 1로 설정합니다. 클라이언트에게 행은 보내지지 않습니다. 이러한 문의 예로는 SET @local_variable, RETURN, READTEXT, 그리고 SELECT GETDATE() 또는 SELECT 'Generic Text'와 같이 쿼리 문이 없는 SELECT 문이 있습니다.

쿼리에서 할당을 수행하거나 쿼리에 RETURN을 사용하는 문은 @@ROWCOUNT 값을 쿼리의 영향을 받거나 쿼리가 읽은 행 수로 설정합니다. 예를 들면 SELECT @local_variable = c1 FROM t1과 같습니다.

DML(데이터 조작 언어) 문은 @@ROWCOUNT 값을 쿼리의 영향을 받는 행 수로 설정하고 해당 값을 클라이언트에 반환합니다. DML 문은 클라이언트에게 행을 보내지 않을 수도 있습니다.

DECLARE CURSOR와 FETCH는 @@ROWCOUNT 값을 1로 설정합니다.

EXECUTE 문은 이전 @@ROWCOUNT를 유지합니다.

USE, SET
2009/01/22 11:49 2009/01/22 11:49
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3920

[MS-SQL] ERROR_LINE(Transact-SQL)

TRY...CATCH 구문의 CATCH 블록 실행을 유발한 오류가 발생한 줄 번호를 반환합니다.

구문

ERROR_LINE()


반환 값
CATCH 블록에서 호출된 경우 다음을 반환합니다.

오류가 발생한 줄 번호를 반환합니다.


오류가 저장 프로시저 또는 트리거에서 발생한 경우 루틴 내의 줄 번호를 반환합니다.


CATCH 블록 외부에서 호출된 경우 NULL을 반환합니다.

주의
이 함수는 CATCH 블록 내의 어떤 위치에서도 호출할 수 있습니다.

ERROR_LINE은 호출 횟수 또는 CATCH 블록 내에서 호출된 위치에 관계 없이 오류가 발생한 줄 번호를 반환합니다. 이것은 오류가 발생한 문 바로 다음 문 또는 CATCH 블록의 첫 번째 문에 오류 번호를 반환하는 @@ERROR와 대조적입니다.

CATCH 블록이 중첩된 경우 ERROR_LINE은 참조되는 CATCH 블록의 범위에 해당하는 오류 줄 번호를 반환합니다. 예를 들어 TRY...CATCH 구조의 CATCH 블록에는 중첩된 TRY...CATCH 구문이 포함될 수 있습니다. 중첩된 CATCH 블록 내에 있는 ERROR_LINE은 중첩된 CATCH 블록을 호출한 오류의 줄 번호를 반환합니다. 외부 CATCH 블록에서 ERROR_LINE을 실행하면 해당 CATCH 블록을 호출한 오류의 줄 번호를 반환합니다.

반환 형식
INT


1. CATCH 블록에서 ERROR_LINE 사용
다음 코드 예에서는 0으로 나누기 오류를 생성하는 SELECT 문을 보여 줍니다. 오류가 발생한 줄 번호가 반환됩니다.

------------------------------------------------------------------------------------------
USE AdventureWorks;
GO

BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO
------------------------------------------------------------------------------------------


2. 저장 프로시저의 오류 줄 번호 반환을 위해 CATCH 블록에서 ERROR_LINE 사용
다음 코드 예에서는 0으로 나누기 오류를 생성하는 저장 프로시저를 보여 줍니다. ERROR_LINE은 오류가 발생한 저장 프로시저의 줄 번호를 반환합니다.


------------------------------------------------------------------------------------------
-- Verify that the stored procedure does not already exist
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL
DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
SELECT 1/0;
GO

BEGIN TRY
-- Execute the stored procedure inside the TRY block.
EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO
------------------------------------------------------------------------------------------


3. CATCH 블록에서 다른 오류 처리 도구와 함께 ERROR_LINE 사용
다음 코드 예에서는 0으로 나누기 오류를 생성하는 SELECT 문을 보여 줍니다. 오류가 발생한 줄 번호와 함께 오류에 관련된 정보가 반환됩니다.


------------------------------------------------------------------------------------------
USE AdventureWorks;
GO

BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
------------------------------------------------------------------------------------------


참고 항목
참조
TRY...CATCH(Transact-SQL)
ERROR_NUMBER(Transact-SQL)
ERROR_MESSAGE(Transact-SQL)
ERROR_PROCEDURE(Transact-SQL)
ERROR_SEVERITY(Transact-SQL)
ERROR_STATE(Transact-SQL)
RAISERROR(Transact-SQL)
@@ERROR(Transact-SQL)

관련 자료
Transact-SQL의 오류 정보 검색
Transact-SQL에서 TRY...CATCH 사용
RAISERROR 사용
데이터베이스 엔진 오류 심각도
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/22 11:43 2009/01/22 11:43
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3919

[MS-SQL] TRY...CATCH(Transact-SQL)

구문

---------------------------------------------------------------------------
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
{ sql_statement | statement_block }
END CATCH
[ ; ]
---------------------------------------------------------------------------

주의
TRY...CATCH 구문은 심각도가 10을 넘으며 데이터베이스 연결을 끊지 않는 모든 실행 오류를 포착합니다.

TRY 블록 다음에는 곧바로 연관된 CATCH 블록이 이어져야 합니다. END TRY와 BEGIN CATCH 문 사이에 다른 문을 두면 구문 오류가 발생합니다.

TRY...CATCH 구문은 여러 일괄 처리에 걸칠 수 없으며 또한 여러 Transact-SQL 문 블록에 걸칠 수 없습니다. 예를 들어 하나의 TRY...CATCH 구문이 두 개의 Transact-SQL BEGIN...END 블록에 걸치거나 IF...ELSE 구문에 걸칠 수 없습니다.

TRY 블록의 마지막 문을 완료할 때 TRY 블록으로 묶은 코드에 오류가 없는 경우 연관된 END CATCH 문 바로 다음 문으로 제어가 전달됩니다. TRY 블록으로 묶은 코드에 오류가 있는 경우 연관된 CATCH 블록의 첫 번째 문으로 제어가 전달됩니다. END CATCH 문이 저장 프로시저 또는 트리거의 마지막 문인 경우 해당 저장 프로시저 또는 트리거를 호출한 문으로 제어가 전달됩니다.

CATCH 블록의 코드를 완료하면 END CATCH 문 바로 다음 문으로 제어가 전달됩니다. CATCH 블록이 포착한 오류는 호출 응용 프로그램으로 반환되지 않습니다. 오류 정보를 응용 프로그램으로 반환해야 하는 경우 CATCH 블록의 코드에서 SELECT 결과 집합 또는 RAISERROR 및 PRINT 문과 같은 메커니즘을 사용하십시오. TRY...CATCH와 함께 RAISERROR를 사용하는 방법은 Transact-SQL에서 TRY...CATCH 사용을 참조하십시오.

TRY...CATCH 구문은 중첩할 수 있습니다. TRY 블록 또는 CATCH 블록은 중첩된 TRY...CATCH 구문을 포함할 수 있습니다. 예를 들어 CATCH 블록에 TRY...CATCH 구문을 포함하여 CATCH 코드가 발견하는 오류를 처리할 수 있습니다.

CATCH 블록에서 발견되는 오류는 다른 곳에서 발생한 오류와 같이 취급됩니다. CATCH 블록이 중첩된 TRY...CATCH 구문을 포함하는 경우 중첩된 TRY 블록에서 오류가 발생하면 중첩된 CATCH 블록으로 제어가 전달됩니다. 중첩된 TRY...CATCH 구문이 없는 경우 호출자로 오류가 다시 전달됩니다.

TRY...CATCH 구문은 TRY 블록의 코드가 실행한 저장 프로시저 또는 트리거에서 처리되지 않은 오류를 포착합니다. 또는 저장 프로시저나 트리거 자체에 코드에서 발생한 오류를 처리할 수 있도록 TRY...CATCH 구문을 포함할 수 있습니다. 예를 들어 TRY 블록이 저장 프로시저를 실행하고 해당 저장 프로시저에서 오류가 발생하는 경우 다음과 같은 방법으로 오류를 처리할 수 있습니다.

저장 프로시저가 자체적인 TRY...CATCH 구문을 포함하지 않는 경우 오류가 발생하면 EXECUTE 문을 포함하는 TRY 블록과 연관된 CATCH 블록으로 제어가 반환됩니다.


저장 프로시저가 TRY...CATCH 구문을 포함하는 경우 오류가 발생하면 저장 프로시저의 CATCH 블록으로 제어가 전달됩니다. CATCH 블록 코드를 완료하면 해당 저장 프로시저를 호출한 EXECUTE 문 바로 다음 문으로 제어가 전달됩니다.


GOTO 문을 사용하여 TRY 또는 CATCH 블록에 진입할 수 없지만 동일한 TRY 또는 CATCH 블록 내의 레이블로 이동하거나 TRY 또는 CATCH 블록에서 나가는 것은 가능합니다.

사용자 정의 함수 내에서는 TRY...CATCH 구문을 사용할 수 없습니다.

오류 정보 검색
CATCH 블록의 범위 내에서 다음 시스템 함수를 사용하여 CATCH 블록을 실행하도록 만든 오류에 대한 정보를 얻을 수 있습니다.

● ERROR_NUMBER()는 오류 번호를 반환합니다.


● ERROR_SEVERITY()는 심각도를 반환합니다.


● ERROR_STATE()는 오류 상태 번호를 반환합니다.


● ERROR_PROCEDURE()는 오류가 발생한 저장 프로시저 또는 트리거의 이름을 반환합니다.


● ERROR_LINE()은 오류가 발생한 루틴 내의 줄 번호를 반환합니다.


● ERROR_MESSAGE()는 오류 메시지의 전체 텍스트를 반환합니다. 이 텍스트는 길이, 개체 이름 또는 시간과 같은 대체 가능한 매개 변수에 제공된 값을 포함합니다.


CATCH 블록의 범위를 벗어나 이 함수들을 호출하면 NULL이 반환됩니다. CATCH 블록의 범위 내 어디에서나 이들 함수를 사용하여 오류 정보를 검색할 수 있습니다. 예를 들어 다음 스크립트는 오류 처리 함수를 포함하는 저장 프로시저를 보여 줍니다. TRY...CATCH 구문의 CATCH 블록에서 이 저장 프로시저를 호출하면 오류에 대한 정보가 반환됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/22 11:40 2009/01/22 11:40
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3918

전체 테이블, 전체 필드 검색시


select tbl.name from ( select id, name from sysobjects where xtype = 'U' ) tbl


select * from sysobjects where xtype = 'U'



select a.name, tbl.name from syscolumns a join sysobjects tbl on a.id = tbl.id
where a.id in( select id from sysobjects where xtype = 'U' )










--커서 선언
DECLARE moneta_replace CURSOR
FOR
select tbl.name, a.name from syscolumns a join sysobjects tbl on a.id = tbl.id
where a.id in( select id from sysobjects where xtype = 'U' )

--커서 오픈
OPEN moneta_replace

--변수 선언
DECLARE @v_tblname VARCHAR(100)
DECLARE @v_fieldname VARCHAR(100)
DECLARE @SSQL VARCHAR(200)

--첫 로우 FETCH
FETCH NEXT FROM moneta_replace INTO @v_tblname, @v_fieldname

-- @@FETCH_STATUS 는 행 반입상태
-- 0 : 성공적이다.
-- -1 : FETCH 문은 실패했거나, 행이 결과 집합의 범위를 벗어났다.
-- -2 : 반입된 행이 없다.

WHILE @@FETCH_STATUS = 0
BEGIN

--FETCH된 데이터를 tempdb에 삽입
SET @SSQL = ' UPDATE ' + @v_tblname + ' SET ' + @v_fieldname + ' = replace('+@v_fieldname+','''','''') '
SELECT @SSQL
-- EXECUTE SP_EXECUTESQL @SSQL

--다음 로우 FEETCH - 루프
FETCH NEXT FROM moneta_replace INTO @v_tblname, @v_fieldname
END

--커서 CLOSE
CLOSE moneta_replace

--커서 DEALLOCATE
DEALLOCATE moneta_replace
GO
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/10/22 18:25 2008/10/22 18:25
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3698

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/07/04 16:46 2008/07/04 16:46
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3433

[MySql] mysql 클라이언트 사용법

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/07/04 16:46 2008/07/04 16:46
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3432

[MySql] mysqldump로 백업하기

mysqldump는 MySQL 백업 프로그램 이며 이는 MySQL에서 MySQL뿐만 아니라
다른 이기종 간의 SQL전달할때 역시 사용된다.

그리고 MySQL의 버전간 이동에도 유용하게 사용된다.

만약 단순히 백업 용도로 사용하기를 원한다면 mysqldump보다는 mysqlhotcopy가
보다 빠른 백업과 복원을 해준다 .

물론 백업 데이터를 어떻게 사용하느나에 따라 mysqldump가 보다 더유용하게 사용되기도하지만
이는 백업 사용 방법에따라 직접 결정해야한다.



1. mysqldump의 사용법에 대해 알아보자.

사용방법은 간단하다 .

mysqldump u<사용자 계정명> -p[사용자패스워드] [option] dbname [tablename]

위와 같이 사용하며 mysqldump에서 사용되는 옵션에 대해 알아보자

--skip-extended-insert
해당옵션은 MySQL덤프를 뜨는경우 VALUES뒤에 여러 개의 데어터셋이 붙어있는 다중열 신텍스 형태로
덤프 뜨지않아 구문어서 해당라인을 찾기가 용의

--allow-keywords
MySQL예약어와 동일한 필드명이 있을경우 복원시에 에러가 발생시
이옵션을 이용하여 덤프를 받으면 테이블명와 필드명에 ``해당 기호가 삽입되어 정상적으로 인식

--complet-insert -c
완전한 인서트문을 구성한다 .
ex) insert into table_name(field1,field2) values(value1,value2)

--no-data
덤프시 데이터를 구성하지 말라는 옵션이다 .
이는 스키마 만 덤프를 받아 개발이나 구성서시 주로이용

--no-create-db
테이블 생성 쿼리를 구성하지 말라는 옵선

--quick, -q
대용량 데이타베이스를 덤프뜰때 유용
한번에 한열씩 축출하며 쓰기전에 메로리에 버퍼링을 하록 하는옵션

--xml -x
XML형태로 덤프 받을시 이용

--default-chareter-set
덤프받을시 지정하는게릭터셋으로 연결하여 덤프 받는 옵션
하지만 테이블의 언어셋을 변경하여 받아주지는않음.


실제 mysqldump의 옵션은 많지만 주로사용하는것만 기술하였다.



2. 간단한 사용법에 대해 알아보자

분명히 euc_kr 데이터가 쌓여있는데 덤프를 받으면 깨지는경우

- 이는 MySQL 서버가 다른언어셋으로 구성되어 있어 이중으로 인코딩되어
한글이나 다른언어들이 깨지는 현상이 발생한다 .
이경우는 다음고 같이 덤프 받는다.

mysqldump --default-chareter-set=euckr -u user -p dbname > dbname.sql


버전이 달라 mysql디비가 인서트가안될경우
- 메이져 버전이 다를경우 MySQL데이터베이스안의 user,db,hot등의 테이블 구조가 달라
일반적으로 덤프를든경우 정상적으로 인서트되니않는다.
이경우는 다음고 같이 덤프 받는다.

mysqldump --complet-insert -u user -p dbname > dbname.sql


예약어와 동일한 필드명 때문에 인서트가안될경우
- 필드명으로 인식하기전에 예약어로 인식하여 에러를 발생시킨다.
이경우는 다음고 같이 덤프 받는다.

mysqldump --allow-keywords -u user -p dbname > dbname.sql



보통 덤프를 받을때
mysqldump --allow-keywords --default-chareter-set=euckr --skip-opt -u user -p dbname > dbname.sql
위와 같은 형테로 받는다면 큰무리없이 복원이 가능할것이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/07/04 16:40 2008/07/04 16:40
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3431

[MS-SQL] SQL_Agent_Job_정보_조회.sql

select A.[Job명]
, A.[실행 주기]
, A.[Job 소유자]
, substring(A.[시작 시각], 1, 2) + ':' + substring(A.[시작 시각], 3, 2) + ':' + substring(A.[시작 시각], 5, 2) as [시작 시각]
, substring(A.[종료 시각], 1, 2) + ':' + substring(A.[종료 시각], 3, 2) + ':' + substring(A.[종료 시각], 5, 2) as [종료 시각]
, A.[시작 일자]
, A.[종료 일자]
, A.[Job 생성 일자]
, A.[Job 수정 일자]
, substring(A.[최대 실행 이력], 1, 2) + ':' + substring(A.[최대 실행 이력], 3, 2) + ':' + substring(A.[최대 실행 이력], 5, 2) as [최대 실행 이력]
, A.[Job 설명]
from (
select
a.name as [Job명]
, case when (d.freq_type=4 and d.freq_subday_type=1) then '매일 1회'
when (d.freq_type=4 and d.freq_subday_type=2) then '매일 ' + cast(d.freq_subday_interval as varchar(5)) + '초마다'
when (d.freq_type=4 and d.freq_subday_type=4) then '매일 ' + cast(d.freq_subday_interval as varchar(5)) + '분마다'
when (d.freq_type=4 and d.freq_subday_type=8) then '매일 ' + cast(d.freq_subday_interval as varchar(5)) + '시간마다'
when (d.freq_type=8) then
'매주 ' +
case when d.freq_interval & 1 = 1 then '일 ' else '' end +
case when d.freq_interval & 2 = 2 then '월 ' else '' end +
case when d.freq_interval & 4 = 4 then '화 ' else '' end +
case when d.freq_interval & 8 = 8 then '수 ' else '' end +
case when d.freq_interval & 16 = 16 then '목 ' else '' end +
case when d.freq_interval & 32 = 32 then '금 ' else '' end +
case when d.freq_interval & 64 = 64 then '토 ' else '' end +
case d.freq_subday_type
when 1 then '한번 '
when 2 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '초마다'
when 4 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '분마다'
when 8 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '시간마다'
end
when (d.freq_type=16) then
'매월 ' + cast(d.freq_interval as varchar(2)) + '일 ' +
case d.freq_subday_type
when 1 then '한번 '
when 2 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '초마다'
when 4 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '분마다'
when 8 then '매 ' + cast(d.freq_subday_interval as varchar(5)) + '시간마다'
end
else '정의되지 않음'
end [실행 주기]
, b.name as [Job 소유자]
, replicate('0', 6 - datalength(cast(d.active_start_time as varchar(6)))) + cast(d.active_start_time as varchar(6)) as [시작 시각]
, replicate('0', 6 - datalength(cast(d.active_end_time as varchar(6)))) + cast(d.active_end_time as varchar(6)) as [종료 시각]
, convert(varchar(10), convert(datetime, cast(d.active_start_date as varchar(8))), 120) as [시작 일자]
, convert(varchar(10), convert(datetime, cast(d.active_end_date as varchar(8))), 120) as [종료 일자]
, convert(varchar(10), a.date_created, 20) as [Job 생성 일자]
, convert(varchar(10), a.date_modified, 20) as [Job 수정 일자]
, replicate('0', 6 - datalength(cast(c.run_duration as varchar(6)))) + cast(c.run_duration as varchar(6)) as [최대 실행 이력]
, a.description as [Job 설명]
, d.freq_type
, d.freq_subday_type
from msdb.dbo.sysjobs a with (nolock)
left outer join master.dbo.syslogins b with (nolock) on a.owner_sid = b.sid
left outer join (
select job_id, max(run_duration) as run_duration
from msdb.dbo.sysjobhistory with (nolock)
where run_status = 1 and step_id = 0
group by job_id) c on a.job_id = c.job_id
left outer join msdb.dbo.sysjobschedules d with (nolock) on a.job_id = d.job_id
where a.enabled=1 and d.enabled =1
) A
order by A.freq_type, A.freq_subday_type, A.[시작 시각], A.[Job명]
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2008/06/24 14:50 2008/06/24 14:50
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3397

« Previous : 1 : ... 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : ... 12 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Statistics Graph

Site Stats

Total hits:
236345
Today:
814
Yesterday:
195