2009-03-04 2 views

答えて

1

SQL Server 2005以降では、OUTPUT clauseを使用して、返された値のセットを取得できます。リンク先の記事から:

次の例では、 EmployeeSalesテーブルを作成し、 にSELECT文でINSERT 文を使用して、それに 複数の行を挿入するソース表からデータを取り出します。 EmployeeSalesテーブルには、 識別列(EmployeeID)と 計算列(ProjectedSales)が含まれています。 挿入操作中にSQL Serverデータベースエンジンによってこれらの値が生成されるため、これらのいずれの 列も@MyTableVarで定義できません。

USE AdventureWorks ; 
GO 
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL 
    DROP TABLE dbo.EmployeeSales; 
GO 
CREATE TABLE dbo.EmployeeSales 
(EmployeeID int IDENTITY (1,5)NOT NULL, 
    LastName  nvarchar(20) NOT NULL, 
    FirstName nvarchar(20) NOT NULL, 
    CurrentSales money NOT NULL, 
    ProjectedSales AS CurrentSales * 1.10 
); 
GO 
DECLARE @MyTableVar table(
    LastName  nvarchar(20) NOT NULL, 
    FirstName nvarchar(20) NOT NULL, 
    CurrentSales money NOT NULL 
); 

INSERT INTO dbo.EmployeeSales (LastName, FirstName, CurrentSales) 
    OUTPUT INSERTED.LastName, 
     INSERTED.FirstName, 
     INSERTED.CurrentSales 
    INTO @MyTableVar 
    SELECT c.LastName, c.FirstName, sp.SalesYTD 
    FROM HumanResources.Employee AS e 
     INNER JOIN Sales.SalesPerson AS sp 
     ON e.EmployeeID = sp.SalesPersonID 
     INNER JOIN Person.Contact AS c 
     ON e.ContactID = c.ContactID 
    WHERE e.EmployeeID LIKE '2%' 
    ORDER BY c.LastName, c.FirstName; 

SELECT LastName, FirstName, CurrentSales 
FROM @MyTableVar; 
GO 
SELECT EmployeeID, LastName, FirstName, CurrentSales, ProjectedSales 
FROM dbo.EmployeeSales; 
GO 
+0

パーフェクト。 OUTPUTについて知りませんでした。 – dudeNumber4

関連する問題