Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng mệnh đề OUTPUT để chèn giá trị không có trong INSERTED

Sử dụng MERGE thay vì INSERT :

MERGE
INTO    trn_temp d
USING   (
        SELECT  D.DET_DATE, 'SOMETEXT' AS sometext, SUM(D.DET_NET) AS the_sum
        ...
        ) s
ON      (1 = 0)
WHEN NOT MATCHED THEN
INSERT  (TRN_TRAN_DATE, TRN_DESCRIPTION, TRN_AMT)
VALUES  (det_date, sometext, the_sum)
OUTPUT  s.*

Cập nhật:

Để làm việc với GROUP BY vấn đề, sử dụng cái này:

DECLARE @tmp TABLE
        (
        det_primary INT NOT NULL PRIMARY KEY
        )

MERGE
INTO    register r
USING   detail d
ON      (r.det_primary_link = d.det_primary)
WHEN NOT MATCHED THEN
INSERT  (det_primary_link, ins_date)
VALUES  (det_primary, GETDATE())
OUTPUT  d.det_primary
INTO    @tmp;

INSERT
INTO    trn_temp (trn_tran_date, trn_description, trn_amt)
OUTPUT  INSERTED.*
SELECT  det_date, 'sometext', SUM(det_net)
FROM    @tmp t
JOIN    detail d
ON      d.det_primary = t.det_primary
GROUP BY
        det_date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF Code đầu tiên, làm thế nào để đăng ký cùng một tên bảng với các lược đồ khác nhau?

  2. Lỗi máy chủ SQL 110:Có ít cột trong câu lệnh INSERT hơn giá trị được chỉ định trong mệnh đề VALUES.

  3. Làm cách nào để chuyển hàng thành cột trong sql server 2005

  4. sử dụng biến Bảng với sp_executesql

  5. Các hàm toán học của SQL Server (Danh sách đầy đủ)