Apakah mungkin untuk melakukan sesuatu yang mirip dengan yang berikut ini di SQL Server 2012?
IF EXISTS (
WITH DATA AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn
FROM table )
SELECT *
FROM DATA
WHERE rn = 2 )
BEGIN
...
END
Saya mencoba menggunakan sintaks ini dan menerima kesalahan. Jika ini tidak memungkinkan, apakah menggunakan tabel temp akan menjadi cara terbaik untuk mencapai ini?
sql-server
cte
Weston Sankey
sumber
sumber
IF EXISTS (SELECT * FROM table)
?WHERE rn = 2
IF EXISTS (SELECT column FROM dbo.table GROUP BY column HAVING COUNT(*)>1)
Jawaban:
CTE tidak dapat digunakan sebagai subquery. Satu solusi adalah:
Yang lain adalah:
Bahkan jika sintaks yang Anda usulkan valid,
EXISTS
toh tidak akan terjadi korsleting dalam kasus itu, saya akan berpikir (dan saya curiga itu sebabnya Anda ingin menggunakannya), karena fungsi jendela harus terwujud pada set lengkap sebelumrn
dapat disaring.sumber
Pilihan lain adalah menggunakan variabel:
sumber
Saya pikir Anda dapat menggunakan kode seperti ini:
Hasil kondisi dapat disimpan sebagai variabel.
sumber