본문 바로가기

반응형

프로그래밍/MSSQL

(76)
[MSSQL] sp_executesql 사용 (EXECUTE sp_executesql vs EXEC) 효율적인 동적쿼리 실행을 위해 sp_executesql 저장 프로시저를 사용해보자 sp_executesql - sp_executesql 저장 프로시저는 매개 변수 대체를 지원하기 때문에 EXECUTE보다 융통성이 뛰어나다. - sp_executesql은 SQL Server에서 재사용이 쉬운 실행 계획을 생성하므로 sp_executesql이 EXECUTE 문보다 효율적이다. CREATE PROCEDURE [dbo].[USP_TEST_PROC] @in_Name VARCHAR(20) = '', @in_Age INT = '' AS BEGIN DECLARE @query VARCHAR(MAX); DECLARE @whereQuery VARCHAR(MAX); SET @query = ''; SET @whereQuery ..
[MSSQL] VARCHAR 타입의 날짜를 DATETIME으로 변경 (날짜변환, 시간변환) VARCHAR타입의 문자를 DATETIME으로 변경해보자 VARCHAR(8)의 문자 '20170615' VARCHAR(6)의 문자 '172929' 이것을 DATETIME형식의 '2017-06-15 17:29:29.000'으로 변환해보자 즉, yyyyMMdd hhmmss를 yyyy-MM-dd hh:mm:ss로 변환 DECLARE @yyyymmdd VARCHAR(8) = '20170615' DECLARE @hhmmss VARCHAR(6) = '172929' SELECT CONVERT(DATETIME, @yyyymmdd + ' ' + STUFF(STUFF(@hhmmss, 3, 0, ':'), 6, 0, ':'), 120) [MSSQL] CONVERT, CAST 형변환 함수 [MSSQL] 월 말일 날짜 가져오기..
[MSSQL] @@ROWCOUNT 영향 받은 행 수 반환 실행된 쿼리문의 영향을 받은 행의 수를 반환하는 @@ROWCOUNT에 대해 알아보자 @@ROWCOUNT 쿼리 실행문 실행 후 영향을 받은 로우의 수를 반환한다. 예제 CREATE TABLE #TEMP1 ( 제품 VARCHAR(10), 가격 INT ) INSERT INTO #TEMP1 (제품, 가격) VALUES ('티셔츠', 1000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('티셔츠', 2000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('바지', 5000) INSERT INTO #TEMP1 (제품, 가격) VALUES ('신발', 10000) SELECT * FROM #TEMP1 UPDATE #TEMP1 SET 가격 = 3000 WHERE 제품 = '티셔..
[MSSQL] GROUP BY 없이 컬럼과 함께 COUNT를 조회해보자 (COUNT OVER) GROUP BY 없이 컬럼값들과 함께 COUNT결과를 출력해보자 일반적으로 COUNT 함수를 사용할 때, COUNT와 함께 컬럼 값을 조회하려면 그 컬럼명들을 GROUP BY뒤에 지정해줘야한다. SELECT COL1, COl2, COL3, COUNT(*) FROM 테이블명 GROUP BY COL1, COL2, COL3 만약, GROUP BY 없이 아래와 같이 쿼리를 작성한다면, 오류 메세지를 반환하게 된다. SELECT COL1, COUNT(*) FROM 테이블명 메시지 8120, 수준 16, 상태 1, 줄 1 열 '테이블명.COL1'이(가) 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다. 자, 그렇다면 GROUP BY 없이 컬럼값들과 함께 전체 COUNT를 출력하려..
[MSSQL] 정렬 조건 없이 순위 매기기 (순번 지정) 정렬 조건 없이 순번을 매겨보자 일반적으로 순번을 지정할 때 ROW_NUMBER(), RANK, DENSE_RANK 등을 이용한다. [MSSQL] ROW_NUMBER, RANK, DENSE_RANK 순위함수 SELECT ROW_NUMBER() OVER(ORDER BY 컬럼명) FROM 테이블명 SELECT RANK() OVER(ORDER BY 컬럼명) FROM 테이블명 SELECT DENSE_RANK() OVER(ORDER BY 컬럼명) FROM 테이블명 이렇게 정렬할 기준 컬럼을 지정 후 순위를 매긴다. 하지만 SELECT 해서 나오는 결과 그대로 순위를 매기려고 한다. SELECT ROW_NUMBER() OVER(ORDER BY 1) FROM 테이블명 다음과 같이 ORDER BY 1로 하면 될 거 같..

반응형