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

Teknik perwujudan T-SQL CTE tidak berfungsi pada SQL Server 2012

Anda bisa mencoba menggunakan fungsi bernilai tabel multi-langkah. Dengan cara ini, server dipaksa untuk mewujudkan hasil TVF ke dalam variabel tabel. Selain itu, Anda dapat mencoba menggunakan batasan deklaratif saat mendeklarasikan jenis tabel ini (KUNCI UTAMA, UNIK, PERIKSA) untuk meningkatkan kinerja kueri akhir:

CREATE FUNCTION CocoJamboSchema.CocoJamboFunction(@parameters ...)
RETURNS @Results TABLE (
    Col1 INT NOT NULL,
    Col2 VARCHAR(10) NULL,
    ...
    PRIMARY KEY(Col1)
)
AS
BEGIN
    WITH MyCTE (...)
    AS
    (
        ...
    )
    INSERT @Results (...)
        FROM MyCTE;

    RETURN;
END;

SELECT ...
FROM CocoJamboSchema.CocoJamboFunction(param values) f
INNER JOIN MySchema.MyTable t ON f.Col1=t.Col1
ORDER BY t.Col1;

Jangan lupa tambahkan ORDER BY klausa untuk permintaan akhir Anda.

Baru-baru ini, saya menggunakan solusi ini untuk mengoptimalkan tampilan (ViewA, DISTINCT + LEFT JOIN + GETDATE()) yang digunakan oleh tampilan lain (ViewB). Dalam hal ini (ViewA) tidak mungkin membuat tampilan yang diindeks (karena DISTINCT + LEFT JOIN + GETDATE()). Sebagai gantinya, saya membuat TVF multi-pernyataan yang meningkatkan kinerja dengan mengurangi pembacaan logis (dalam beberapa kasus secara drastis) dari kueri akhir.

Catatan:Tentu saja, Anda bisa mencoba menggunakan tampilan indeks .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ganti String dengan String lain di SQL Server (T-SQL)

  2. SEPERTI vs BERISI di SQL Server

  3. DevOps:DBA atau Pengembang – Mendapatkan Keseimbangan dengan Benar

  4. Karakter Non-Angka yang Mengembalikan Positif saat menggunakan ISNUMERIC() di SQL Server

  5. 50 Pertanyaan Wawancara SQL Server Teratas yang Harus Anda Siapkan Di 2022