목록SQL (36)
IT Log
성능 개선 사항 프로시저 본문에서 'SET NOCOUNT ON'을 사용 > 출력이 최소 수준으로 유지 스키마 이름을 사용 > 개체이름 확인 처리시간 감소 및 권한/액세스 문제 방지 WHERE 및 JOIN 절에서 지정한 열을 함수로 묶지 않기 > 묶일 경우, 비결정적 열이 되어 인덱스를 사용할 수 없음 대량의 행을 반환하는 SELECT문은 스칼라 함수 사용하지 않기 > 스칼라 함수는 모든 행에 적용되어 행 기반 처리와 비슷한 동작이 발생하여 성능저하됨 SELECT * 사용을 피하기 > DB엔진 오류 방지 너무 많은 데이터를 처리하거나 반환하지 않기 > 네트워크를 통해 불필요한 데이터를 보내지 않아 효율적 BEGIN/COMMIT 트랜잭션을 사용하여 명시적 트랜잭션을 사용하고, 짧게 유지 > 트랜잭션이 길면 ..
※ 구문 규칙 참고 규칙 설명 기울임꼴 사용자가 제공하는 매개 변수 굵게 각종 이름및 텍스트를 그대로 정확히 입력 | (세로줄) 구문 항목을 구분하며, 항목 중 하나만 사용 가능 (선택사항) {} (중괄호) 필수 구문이며, 중괄호는 입력하지 않음 [] 생략이 가능한 구문 [ , ...n] 앞의 항목이 n번 반복 가능하며, 각 항목은 쉼표로 구분 [ ... n] 앞의 항목이 n번 반복 가능하며, 각 항목은 공백으로 구분 ; SQL문 종결자로, 대부분 생략하지만 이후 버전에서는 필요 ::== 구문 블록의 이름 ※ 간단 구문 설명 구문 설명 기본 구문 CREATE PROCEDURE 매개변수 전달 @parameter = 기본값 / OUTPUT / 테이블 반환 매개변수 형식 / CURSOR VARYING 데이터 ..
BEGIN...END BREAK CONTINUE GOTO IF...ELSE RETURN THROW TRY...CATCH WAITFOR WHILE BEGIN...END 중첩 가능 BEGIN { sql_statement | statement_block } END 예시 USE AdventureWorks2012 GO BEGIN TRANSACTION GO IF @@TRANCOUNT = 0 BEGIN SELECT FirstName, MiddleName FROM Person.Person WHERE LastName = 'Adams'; ROLLBACK TRANSACTION; PRINT N'Rolling back the transaction two times would cause an error.'; END; ROLLBA..
논리 함수 CHOOSE CHOOSE ( index, val_1, val_2 [, val_n ] ) 예시 -- 3번째 항목 반환 예시 SELECT CHOOSE ( 3, 'Manager', 'Director', 'Developer', 'Tester' ) AS Result; Result ------------- Developer (1 row(s) affected) -- 열을 기반으로 하는 예제 USE AdventureWorks2012; GO SELECT ProductCategoryID, CHOOSE (ProductCategoryID, 'A','B','C','D','E') AS Expression1 FROM Production.ProductCategory; ProductCategoryID Expression1 ..
Cursor 함수 @@CURSOR_ROWS 열려있는 마지막 커서에서 한정하는 행 수를 반환 마지막 Cursor가 비동기적으로 열린 경우 음수를 반환 반환 값 설명 -m 커서가 비동기식으로 채워짐. 반환되는 값은 현재 키 집합에 있는 행의 개수 -1 동적 커서. 모든 변경사항을 반영하므로 커서가 한정하는 행의 수는 계속 변함. 0 열린 커서가 없거나 마지막으로 열린 커서에 한정된 행이 없거나 닫히거나 할당 취소됨 n 커서가 완전히 채워짐. 반환되는 값은 커서에 있는 행의 총 개수 @@CURSOR_ROWS 예시 USE AdventureWorks2012; GO SELECT @@CURSOR_ROWS; -- 열린커서가 없으므로, 0 DECLARE Name_Cursor CURSOR FOR SELECT LastNam..
CURSOR 결과 집합을 한 번에 한 행씩 순차적으로 처리하는 구조 예시 DECLARE vend_cursor CURSOR FOR SELECT * FROM Purchasing.Vendor OPEN vend_cursor FETCH NEXT FROM vend_cursor; SET NOCOUNT ON; DECLARE @vendor_id INT, @vendor_name NVARCHAR(50), @message VARCHAR(80), @product NVARCHAR(50); PRINT '-------- Vendor Products Report --------'; DECLARE vendor_cursor CURSOR FOR SELECT VendorID, Name FROM Purchasing.Vendor WHERE Pr..
변환 함수 CAST / CONVERT / PARSE -- 데이터 형식을 다른 데이터 형식으로 변환 CAST ( expression AS data_type [ ( length ) ] ) CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) PARSE ( string_value AS data_type [ USING culture ] ) TRY_CAST / TRY_CONVERT / TRY_PARSE -- 데이터 형식을 다른 데이터 형식으로 변환, 변환실패 시 NULL을 반환 TRY_CAST ( expression AS data_type [ ( length ) ] ) TRY_CONVERT ( data_type [ ( length ) ] , expressi..
문자열 함수 CONCAT / CONCAT_WS -- CONCAT > 둘 이상의 문자열 값을 연결 CONCAT ( string_value1, string_value2 [, string_valueN ] ) -- CONCAT_WS > 구분된 기호를 사용하여, 둘 이상의 문자열 값을 연결 CONCAT_WS ( separator, argument1, argument2 [, argumentN]... ) LEFT / RIGHT / SUBSTRING -- LEFT > 문자열 왼쪽부터 지정된 수만큼 문자를 반환 LEFT ( character_expression , integer_expression ) -- RIGHT > 문자열 오른쪽부터 지정된 수만큼 문자를 반환 RIGHT ( character_expression , ..