-
[데이터베이스] SQL 테이블 값 생성자 VALUES()데이터베이스와 SQL 2022. 10. 29. 18:29
테이블 값 생성자: Values()
행 집합을 선언한 후에 테이블 값을 입력할 때 사용한다.
구현 1 ) FROM ()의 파생 테이블
이전에는 임의의 값을 생성할 때 Union (all)을 이용해서 생성했다면, 현재는 Values를 생성하여 임의의 테이블을 생성할 수 있다.
SELECT * FROM (VALUES (1), (2), (3)) AS d(num)
구현 2) INSERT ... VALUES
DECLARE @products TABLE ( productName varchar(80), UnitPrice money ); INSERT INTO @products VALUES ('후추', \1000), ('구름', \2000), ((SELECT ProductName FROM dbo.Products WHERE productID = 5), (SELECT UnitPrice FROM dbo.Products WHERE productID = 5)); SELECT * FROM @products
3) 행 복제를 위한 Values 의 사용
SELECT S.Name, c.copyNo FROM [AdventureWorks2019].[Sales].[SalesReason] AS S CROSS JOIN (VALUES (1), (2)) AS c(copyNo) WHERE S.SalesReasonID <= 5 ORDER BY c.copyNo
SalesRessonID 가 1~ 5인 데이터에 대해 2 세트의 copy 데이터가 생성되었다.
4) MERGE 문의 USING에서 사용
BEGIN TRAN DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); MERGE INTO AdventureWorks2019.Sales.SalesReason AS Target USING (VALUES ('Recommendation','Other') , ('Review', 'Marketing') , ('Internet', 'Promotion') ) AS Source (NewName, NewReasonType) -- 비교할 테이블 ON Target.Name = Source.NewName WHEN MATCHED THEN -- 조건을 만족할 경우 UPDATE SET ReasonType = Source.NewReasonType WHEN NOT MATCHED BY TARGET THEN -- 조건을 만족하지 않을 경우 INSERT (Name, ReasonType) VALUES (NewName, NewReasonType) OUTPUT $action INTO @SummaryOfChanges; -- 결과 확인 SELECT * FROM @SummaryOfChanges IF @@TRANCOUNT > 0 ROLLBACK; SELECT @@TRANCOUNT;
반응형'데이터베이스와 SQL' 카테고리의 다른 글
[데이터 베이스] MSSQL SEQUENCE (시퀀스) 개체 생성 및 사용 (1) 2022.12.17 [데이터베이스] MSSQL 다양한 DML 활용하기, 변수와 임시 테이블 (0) 2022.11.11 [데이터베이스] MSSQL 난수(random data) (0) 2022.10.22 [데이터베이스] SQL의 핵심 기능, CASE문과 TOP (0) 2022.10.20 [데이터베이스] SQL 에서 NULL 다루기 (1) 2022.10.04