데이터베이스가 사회기반구조 및 지식 정보통신 산업의 핵심 인프라로 인식되면서, 국가의 경제, 사회 산업, 문화 과학등의 공공부문과 민간기업에서 데이터베이스를 구축, 관리, 활용하는 사업이 날로 증가하고 있습니다.
이에 따라 한국데이터베이스진흥센터는 고품질 다양한 DB정보를 일원화된 채널로 공공기관 및 민간기업에 제공하여, 국내 데이터베이스 사업수행을 적극적으로 지원, 업무 수행의 효율성을 증대시키고, 최신 DB 사업 정보를 제공하여 시행착오 절감하고 , 커뮤니티 활성화를 통한 지식 공유 문화 형성을 위해 2003 년 DB 지식정보시스템 포탈 사이트 “ DBGuide.net"을 구축하였습니다. DBGuide.net의 총 구성은 DB구축가이드, 지식 라이브러리,DB Q&A, 제품정보, 교육/세미나, D-BLOG, 커뮤니티로 나누어집니다.
SET NOCOUNT 옵션을 ON으로 설정하면 Transact-SQL 문의 영향을 받은 행 수를 나타내는 수가 반환되지 않습니다. SET NOCOUNT 옵션을 OFF로 설정하면 이 수가 반환됩니다.
SET NOCOUNT 옵션이 ON으로 설정되어 있을 때도 @@ROWCOUNT 함수는 업데이트됩니다.
SET NOCOUNT 옵션을 ON으로 설정하면 저장 프로시저의 각 문에 대해 클라이언트에게 DONE_IN_PROC 메시지를 보내지 않습니다. SQL Server 2005 에서 제공하는 유틸리티를 사용하여 쿼리를 실행하면 SELECT, INSERT, UPDATE, DELETE 등의 Transact-SQL 문 끝에 nn rows affected이라는 메시지가 표시되지 않습니다.
실제 데이터를 많이 반환하지 않는 일부 문이 포함된 저장 프로시저의 경우, 이 유틸리티를 사용하면 네트워크 트래픽이 크게 줄기 때문에 성능이 눈에 띄게 향상됩니다.
SET NOCOUNT 옵션은 실행 시간 또는 런타임에 설정되며, 구문 분석 시에는 설정되지 않습니다.
USE AdventureWorks;
GO
SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT TOP(5)LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT TOP(5) LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO
지정한 연결된 서버에서 지정한 통과 쿼리를 실행합니다. 이 서버는 OLE DB 데이터 원본입니다. OPENQUERY는 테이블 이름처럼 쿼리의 FROM 절에서 참조될 수 있습니다. 또한 OPENQUERY는 INSERT, UPDATE 또는 DELETE 문의 대상 테이블로 참조될 수도 있습니다. 이것은 OLE DB 공급자 기능에 종속됩니다. 쿼리는 여러 결과 집합을 반환할 수 있지만 OPENQUERY는 첫 번째 것만 반환합니다.
연결된 서버를 만듭니다. 연결된 서버를 만들면 OLE DB 데이터 원본과 유형이 다른 분산 쿼리에 액세스할 수 있습니다. sp_addlinkedserver를 사용하여 연결된 서버를 만든 후 이 서버에 대해 분산 쿼리를 실행할 수 있습니다. 연결된 서버를 SQL Server 인스턴스로 정의한 경우에는 원격 저장 프로시저를 실행할 수 있습니다.
Excel 스프레드시트에서 Microsoft OLE DB Provider for Jet 사용 Excel 스프레드시트에 연결하려는 목적으로 Microsoft OLE DB Provider for Jet을 사용하여 연결된 서버 정의를 생성하려면, 먼저 선택할 Excel 워크시트의 열과 행을 지정하여 Excel 내에 명명된 범위를 만드십시오. 범위의 이름은 분산 쿼리에서 테이블 이름으로 참조할 수 있습니다.
주의 둘 이상의 WHILE 루프가 중첩된 경우, 내부 루프에 BREAK가 있으면 현재 루프를 종료하고 한 단계 바깥쪽 루프로 이동합니다. 먼저 내부 루프의 끝 이후에 있는 모든 문이 실행된 다음 바깥쪽 루프가 다시 시작됩니다.
인수 Boolean_expression
TRUE 또는 FALSE를 반환하는 식입니다. 부울 식에 SELECT 문이 포함된 경우에는 SELECT 문을 괄호로 묶어야 합니다.
{sql_statement | statement_block}
문 블록에 정의된 Transact-SQL 문이나 문 그룹입니다. 문 블록을 정의하려면 흐름 제어 키워드인 BEGIN 및 END를 사용하십시오.
BREAK
현재 위치에 해당하는 WHILE 루프를 종료합니다. 루프의 끝을 표시하는 END 키워드 다음에 있는 모든 문은 그대로 실행됩니다.
CONTINUE
CONTINUE 키워드 다음의 모든 문을 무시하고 WHILE 루프가 다시 시작되도록 합니다.
예
1. 중첩된 IF...ELSE 및 WHILE에서 BREAK 및 CONTINUE 사용 다음 예에서는 제품의 평균 정가가 $300 미만인 경우 WHILE 루프가 가격을 두 배로 한 다음 최대 가격을 선택합니다. 최대 가격이 $500 이하인 경우 WHILE 루프가 다시 시작되어 가격을 다시 두 배로 만듭니다. 이 루프는 최대 가격이 $500를 초과할 때까지 가격을 계속 두 배로 만든 다음 WHILE 루프를 종료하고 메시지를 출력합니다.
USE AdventureWorks;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear';
2. 커서가 있는 쿼리 내에서 WHILE 사용 다음 WHILE 구문은 AdventureWorks 데이터베이스에 있는 모든 테이블의 행 개수를 반환합니다. WHILE 구문은 커서와 함께 사용되는 @@FETCH_STATUS 함수의 반환 값을 테스트합니다. @@FETCH_STATUS는 -2, -1 또는 0을 반환할 수 있기 때문에 3가지 경우를 모두 테스트해야 합니다. 쿼리가 실행된 이후에 커서 결과로부터 행을 삭제한 경우에는 해당 행을 건너뜁니다. 성공적으로 인출(0)된 경우 BEGIN...END 루프 내의 SELECT가 실행됩니다.
USE AdventureWorks;
GO
DECLARE tnames_cursor CURSOR
FOR
SELECT s.name + '.' + t.name
FROM sys.tables AS t
JOIN sys.schemas AS s ON s.schema_id = t.schema_id;
OPEN tnames_cursor;
DECLARE @tablename sysname;
FETCH NEXT FROM tnames_cursor INTO @tablename;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(@tablename);
EXEC ('SELECT ''' + @tablename + ''' = count(*) FROM '
+ @tablename );
PRINT ' ';
END;
FETCH NEXT FROM tnames_cursor INTO @tablename;
END;
CLOSE tnames_cursor;
DEALLOCATE tnames_cursor;
실행 흐름을 지정된 레이블로 변경합니다. GOTO 다음에 이어지는 Transact-SQL 문을 건너뛰고 지정된 레이블에서 처리를 계속 이어갑니다. GOTO 문과 레이블은 프로시저, 일괄 처리, 문 블록 등 어디에서나 사용할 수 있습니다. GOTO 문은 중첩될 수 있습니다.
USE AdventureWorks;
GO
DECLARE @tablename sysname
SET @tablename = N'Person.AddressType'
table_loop:
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(UPPER(@tablename))
EXEC ('SELECT ''' + @tablename + ''' = COUNT(*) FROM '
+ @tablename )
PRINT ' '
END
FETCH NEXT FROM tnames_cursor INTO @tablename
IF (@@FETCH_STATUS <> -1) GOTO table_loop
GO
DECLARE @QueryStr varchar(8000) -- 쿼리문
IF @TOP = ''
SET @TOP = NULL
IF @field = ''
SET @field = NULL
IF @strWhere = ''
SET @strWhere = NULL
IF @strOrder = ''
SET @strOrder = NULL
IF @strGroup = ''
SET @strGroup = NULL
SET @QueryStr = 'SELECT '+ ISNULL(' TOP ' + @top,' ') + ISNULL( ' ' + @field, ' * ') +' FROM '+ @tableName
+ ISNULL(' WHERE '+@strWhere,' ')
+ ISNULL(' ORDER BY '+ @strOrder,' ')
+ ISNULL(' GROUP BY '+ @strGroup,' ')
UPDATE TITLES SET
PRICE = PRICE * CASE TITLE
WHEN 'business' THEN 1.5
WHEN 'mod_cook' THEN .8
WHEN 'trad_cook' THEN .6
WHEN 'psychology' THEN .5
WHEN 'popular_comp' THEN 1.75
ELSE .75