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

Tabel yang ditentukan pengguna dalam Memori, bukan di memori?

Saya melihat ini juga.

Ketika RCSI diaktifkan maka transaksi komit otomatis pada tingkat komitmen baca default berfungsi dengan baik saat menggabungkan dua instance dari jenis tabel memori.

DECLARE @t1 [dbo].[tType]
DECLARE @t2 [dbo].[tType]

INSERT INTO @t1 VALUES (1);

INSERT INTO @t2 VALUES (1);

SELECT *
FROM   @t1
       JOIN @t2
         ON [@t1].C = [@t2].C 

Juga menggabungkan dua tabel yang dioptimalkan memori "normal" berfungsi dengan baik tanpa petunjuk apa pun.

Selain itu, menggabungkan jenis tabel yang dioptimalkan memori kosong ke tabel yang dioptimalkan memori normal berfungsi dengan baik.

DECLARE @t [dbo].[tType];

SELECT *
FROM   [dbo].[tTable] t
        INNER JOIN @t
            ON [@t].C = t.C 

Tetapi sebaliknya tidak benar. Selama instance tipe tabel memori berisi setidaknya satu baris, maka menggabungkannya ke tabel memori (kosong atau sebaliknya) akan memunculkan kesalahan.

Solusinya sederhana dan ditunjukkan dalam pesan kesalahan. Cukup tambahkan petunjuk tabel WITH (SNAPSHOT)

DECLARE @t [dbo].[tType]

INSERT INTO @t
VALUES     (1)

SELECT *
FROM   [dbo].[tTable] t WITH(SNAPSHOT)
       INNER JOIN @t
         ON [@t].C = t.C

Atau solusi yang kurang terperinci adalah

ALTER DATABASE [MemOptimized] 
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE 

Sejauh yang saya dapat kumpulkan, tidak satu pun dari ini yang benar-benar mengubah semantik dan kemampuan untuk menghilangkan petunjuk dalam beberapa keadaan hanyalah kenyamanan pemrograman.

Saya tidak yakin mengapa campuran dari tipe tabel memori yang berbeda ini menyebabkan pesan kesalahan khusus ini. Saya menganggap itu hanya artefak menjadi CTP dan bahwa di RTM kombinasi akan diizinkan atau pesan kesalahan dan dokumentasi akan diperbarui untuk merujuk tidak hanya ke tabel berbasis disk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan transaksi dalam dari transaksi bersarang

  2. Menggunakan SQL Server sebagai antrian DB dengan banyak klien

  3. Bagaimana cara mendapatkan perbedaan antara dua baris untuk bidang kolom?

  4. Bagaimana cara memantau perintah t-sql saja di SQL Profiler?

  5. Perbaiki Msg 8116 "Argument data type varchar is invalid for argument 1 of session_context function" di SQL Server