Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menambah nomor urut pada sisipan SQL

Saya tidak dapat menguji pada tahun 2005, tetapi Anda harus dapat menggunakan CTE dengan baik untuk menghitung berbagai hal;

DECLARE @FKID INT
SET @FKID = 1
DECLARE @NEWDATA XML
SET @NEWDATA = '<data><text>three</text><text>four</text><text>five</text></data>'

;WITH cte AS (SELECT @FKID FKID, X.value('.','VARCHAR(10)') a, 
                  ROW_NUMBER() OVER (ORDER BY X) r
             FROM @NEWDATA.nodes('/data/text') AS X(X))
INSERT INTO TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE])
SELECT fkid, a,
  (SELECT ISNULL(MAX([SEQUENCE]),0)+r FROM TEMPTABLE WHERE [FKID]=cte.fkid)
FROM cte;

SELECT * FROM TEMPTABLE;

yang memberikan hasil:

1    1    one     1
2    1    two     2
3    1    three   3
4    1    four    4
5    1    five    5

PERBARUI

Jika kueri hanya akan menyisipkan satu FKID, versi sederhana berikut juga akan berfungsi (perubahan yang diperlukan pada kueri Anda saat ini disorot):

INSERT INTO #TEMPTABLE ([FKID], [MYTEXT], [SEQUENCE])
SELECT @FKID, 
       X.value('.','VARCHAR(10)'),
       (SELECT ISNULL(MAX([SEQUENCE]),0)+1 FROM #TEMPTABLE WHERE [FKID][email protected])
        + ROW_NUMBER() OVER (ORDER BY (SELECT 1))
FROM @NEWDATA.nodes('/data/text') AS X(X)

Tujuan (SELECT 1) di ROW_NUMBER ORDER BY klausa adalah untuk menghindari menentukan urutan tertentu. Itu dapat diubah menjadi sesuatu yang lain (mis. ke X.value('.','VARCHAR(10)' ), jika perlu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memilih Prosesor untuk SQL Server 2014 – Bagian 1

  2. Bagaimana memberikan banyak nilai di antara klausa setelah klausa where

  3. gabungkan hari ini dan total sebelumnya dari hari ini dari kolom yang sama menghasilkan satu kueri sql

  4. Apa saja fitur t-sql baru sql server 2005?

  5. Masalah kinerja dalam daftar Pencarian Dropdown Dinamis di excel