Pilih baris yang dimigrasikan dengan menggunakan fungsi filter (Stretch Database)

Berlaku untuk:yes SQL Server 2016 (13.x) dan yang lebih baru - hanya Windows

Jika Anda menyimpan data dingin dalam tabel terpisah, Anda bisa mengonfigurasi Stretch Database untuk memigrasikan seluruh tabel. Jika tabel Anda berisi data panas dan dingin, di sisi lain, Anda dapat menentukan predikat filter untuk memilih baris yang akan dimigrasikan. Predikat filter adalah fungsi bernilai tabel sebaris. Artikel ini menjelaskan cara menulis fungsi bernilai tabel sebaris untuk memilih baris yang akan dimigrasikan.

Penting

Jika Anda menyediakan fungsi filter yang berkinerja buruk, migrasi data juga berkinerja buruk. Stretch Database menerapkan fungsi filter ke tabel dengan menggunakan operator CROSS APPLY.

Jika Anda tidak menentukan fungsi filter, seluruh tabel akan dimigrasikan.

Saat Anda menjalankan Wizard Aktifkan Database untuk Stretch, Anda bisa memigrasikan seluruh tabel atau Anda bisa menentukan fungsi filter sederhana dalam wizard. Jika Anda ingin menggunakan jenis fungsi filter yang berbeda untuk memilih baris yang akan dimigrasikan, lakukan salah satu hal berikut ini.

  • Keluar dari wizard dan jalankan pernyataan ALTER TABLE untuk mengaktifkan Stretch untuk tabel dan untuk menentukan fungsi filter.

  • Jalankan pernyataan ALTER TABLE untuk menentukan fungsi filter setelah Anda keluar dari wizard.

Sintaks ALTER TABLE untuk menambahkan fungsi dijelaskan nanti dalam artikel ini.

Persyaratan dasar untuk fungsi filter

Fungsi bernilai tabel sebaris yang diperlukan untuk predikat filter Stretch Database terlihat seperti contoh berikut.

CREATE FUNCTION dbo.fn_stretchpredicate(@column1 datatype1, @column2 datatype2 /*[, ...n]*/)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE someCol = @column1 /* replace with an actual predicate */

Parameter untuk fungsi harus menjadi pengidentifikasi untuk kolom dari tabel.

Pengikatan skema diperlukan untuk mencegah kolom yang digunakan oleh fungsi filter dihilangkan atau diubah.

Mengembalikan nilai

Jika fungsi mengembalikan hasil yang tidak kosong, baris memenuhi syarat untuk dimigrasikan. Jika tidak - artinya, jika fungsi tidak mengembalikan hasil - baris tidak memenuhi syarat untuk dimigrasikan.

Kondisi

<Predikat> dapat terdiri dari satu kondisi, atau dari beberapa kondisi yang bergabung dengan operator logis AND.

<predicate> ::= <condition> [ AND <condition> ] [ ...n ]  

Setiap kondisi pada gilirannya dapat terdiri dari satu kondisi primitif, atau beberapa kondisi primitif yang bergabung dengan operator logis OR.

<condition> ::= <primitive_condition> [ OR <primitive_condition> ] [ ...n ]  

Kondisi primitif

Kondisi primitif dapat melakukan salah satu perbandingan berikut.

<primitive_condition> ::=   
{  
<function_parameter> <comparison_operator> constant  
| <function_parameter> { IS NULL | IS NOT NULL }  
| <function_parameter> IN ( constant [ ,...n ] )  
}  
  
  • Bandingkan parameter fungsi dengan ekspresi konstanta. Contohnya:@column1 < 1000

    Berikut adalah contoh yang memeriksa apakah nilai kolom tanggal adalah < 1/1/2016.

    CREATE FUNCTION dbo.fn_stretchpredicate(@column1 datetime)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 < CONVERT(datetime, '1/1/2016', 101)  
    GO  
    
    ALTER TABLE stretch_table_name SET ( REMOTE_DATA_ARCHIVE = ON (  
        FILTER_PREDICATE = dbo.fn_stretchpredicate(date),  
        MIGRATION_STATE = OUTBOUND
    ) )  
    
    
  • Terapkan operator IS NULL atau IS NOT NULL ke parameter fungsi.

  • Gunakan operator IN untuk membandingkan parameter fungsi dengan daftar nilai konstanta.

    Berikut adalah contoh yang memeriksa apakah nilai kolom shipment_status adalah IN (N'Completed', N'Returned', N'Cancelled').

    CREATE FUNCTION dbo.fn_stretchpredicate(@column1 nvarchar(15))  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 IN (N'Completed', N'Returned', N'Cancelled')  
    GO  
    
    ALTER TABLE table1 SET ( REMOTE_DATA_ARCHIVE = ON (  
        FILTER_PREDICATE = dbo.fn_stretchpredicate(shipment_status),  
        MIGRATION_STATE = OUTBOUND  
    ) )  
    
    

Operator perbandingan

Operator perbandingan berikut didukung.

<, <=, >, >=, =, <>, !=, !<, !>

<comparison_operator> ::= { < | <= | > | >= | = | <> | != | !< | !> }  

Ekspresi konstanta

Konstanta yang Anda gunakan dalam fungsi filter dapat menjadi ekspresi deterministik apa pun yang dapat dievaluasi saat Anda menentukan fungsi. Ekspresi konstanta dapat berisi hal-hal berikut.

  • Literal. Contohnya:N'abc', 123

  • Ekspresi aljabar. Contohnya:123 + 456

  • Fungsi deterministik. Contohnya:SQRT(900)

  • Konversi deterministik yang menggunakan CAST atau CONVERT. Contohnya:CONVERT(datetime, '1/1/2016', 101)

Ekspresi lain

Anda dapat menggunakan operator BETWEEN dan NOT BETWEEN jika fungsi yang dihasilkan sesuai dengan aturan yang dijelaskan di sini setelah Anda mengganti operator BETWEEN dan NOT BETWEEN dengan ekspresi AND dan OR yang setara.

Anda tidak dapat menggunakan subkueri atau fungsi non-deterministik seperti RAND() atau GETDATE().

Menambahkan fungsi filter ke tabel

Tambahkan fungsi filter ke tabel dengan menjalankan pernyataan ALTER TABLE dan tentukan fungsi bernilai tabel sebaris yang ada sebagai nilai parameter FILTER_PREDICATE . Contohnya:

ALTER TABLE stretch_table_name SET ( REMOTE_DATA_ARCHIVE = ON (  
    FILTER_PREDICATE = dbo.fn_stretchpredicate(column1, column2),  
    MIGRATION_STATE = OUTBOUND /* replace OUTBOUND in this example, with the actual, desired migration state */
) )

Setelah Anda mengikat fungsi ke tabel sebagai predikat, hal-hal berikut ini benar.

  • Lain kali migrasi data terjadi, hanya baris yang fungsinya mengembalikan nilai yang tidak kosong yang dimigrasikan.

  • Kolom yang digunakan oleh fungsi terikat skema. Anda tidak dapat mengubah kolom ini selama tabel menggunakan fungsi sebagai predikat filternya.

Anda tidak dapat menghilangkan fungsi bernilai tabel sebaris selama tabel menggunakan fungsi sebagai predikat filternya.

Tip

Untuk meningkatkan performa fungsi filter, buat indeks pada kolom yang digunakan oleh fungsi.

Meneruskan nama kolom ke fungsi filter

Saat Anda menetapkan fungsi filter ke tabel, tentukan nama kolom yang diteruskan ke fungsi filter dengan nama satu bagian. Jika Anda menentukan nama tiga bagian saat Anda meneruskan nama kolom, kueri berikutnya terhadap tabel yang diaktifkan Stretch akan gagal.

Misalnya, jika Anda menentukan nama kolom tiga bagian seperti yang ditunjukkan dalam contoh berikut, pernyataan akan berhasil dijalankan, tetapi kueri berikutnya terhadap tabel akan gagal.

ALTER TABLE SensorTelemetry 
  SET ( REMOTE_DATA_ARCHIVE = ON (
    FILTER_PREDICATE=dbo.fn_stretchpredicate(dbo.SensorTelemetry.ScanDate),
    MIGRATION_STATE = OUTBOUND )
  )

Sebagai gantinya, tentukan fungsi filter dengan nama kolom satu bagian seperti yang diperlihatkan dalam contoh berikut.

ALTER TABLE SensorTelemetry 
  SET ( REMOTE_DATA_ARCHIVE = ON  (
    FILTER_PREDICATE=dbo.fn_stretchpredicate(ScanDate),
    MIGRATION_STATE = OUTBOUND )
  )

Menambahkan fungsi filter setelah menjalankan Wizard

Jika Anda ingin menggunakan fungsi yang tidak bisa Anda buat di Aktifkan Database untuk Stretch Wizard, Anda bisa menjalankan pernyataan UBAH TABEL untuk menentukan fungsi setelah Anda keluar dari wizard. Namun, sebelum dapat menerapkan fungsi, Anda harus menghentikan migrasi data yang sudah berlangsung dan membawa kembali data yang dimigrasikan. (Untuk informasi selengkapnya tentang mengapa ini diperlukan, lihat Mengganti fungsi filter yang ada.)

  1. Balik arah migrasi dan kembalikan data yang sudah dimigrasikan. Anda tidak dapat membatalkan operasi ini setelah dimulai. Anda juga dikenakan biaya di Azure untuk transfer data keluar (keluar). Untuk informasi selengkapnya, lihat Cara kerja harga Azure.

    ALTER TABLE [<table name>]
        SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;   
    
  2. Tunggu hingga migrasi selesai. Anda bisa memeriksa status di Stretch Database Monitor dari SQL Server Management Studio, atau Anda bisa mengkueri tampilan sys.dm_db_rda_migration_status. Untuk informasi selengkapnya, lihat Memantau dan memecahkan masalah migrasi data atau sys.dm_db_rda_migration_status.

  3. Buat fungsi filter yang ingin Anda terapkan ke tabel.

  4. Tambahkan fungsi ke tabel dan mulai ulang migrasi data ke Azure.

    ALTER TABLE [<table name>]
        SET ( REMOTE_DATA_ARCHIVE  
            (           
                FILTER_PREDICATE = dbo.predicateFunction(col1) /* replace predicateFunction and col1 with the actual function call */
                ,MIGRATION_STATE = OUTBOUND  
            )  
            );   
    

Memfilter baris menurut tanggal

Contoh berikut memigrasikan baris di mana kolom tanggal berisi nilai yang lebih lama dari 1 Januari 2016.

-- Filter by date  
--  
CREATE FUNCTION dbo.fn_stretch_by_date(@date datetime2)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
       RETURN SELECT 1 AS is_eligible WHERE @date < CONVERT(datetime2, '1/1/2016', 101)  
GO  
  

Memfilter baris menurut nilai dalam kolom status

Contoh berikut memigrasikan baris di mana kolom status berisi salah satu nilai yang ditentukan.

-- Filter by status column  
--  
CREATE FUNCTION dbo.fn_stretch_by_status(@status nvarchar(128))  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
       RETURN SELECT 1 AS is_eligible WHERE @status IN (N'Completed', N'Returned', N'Cancelled')  
GO  
  

Memfilter baris dengan menggunakan jendela geser

Untuk memfilter baris dengan menggunakan jendela geser, ingatlah persyaratan berikut untuk fungsi filter.

  • Fungsi harus deterministik. Oleh karena itu Anda tidak dapat membuat fungsi yang secara otomatis menghitung ulang jendela geser saat waktu berlalu.

  • Fungsi ini menggunakan pengikatan skema. Oleh karena itu Anda tidak bisa hanya memperbarui fungsi "di tempat" setiap hari dengan memanggil ALTER FUNCTION untuk memindahkan jendela geser.

Mulailah dengan fungsi filter seperti contoh berikut, yang memigrasikan baris di mana kolom systemEndTime berisi nilai yang lebih awal dari 1 Januari 2016.

CREATE FUNCTION dbo.fn_StretchBySystemEndTime20160101(@systemEndTime datetime2)   
RETURNS TABLE   
WITH SCHEMABINDING    
AS    
RETURN SELECT 1 AS is_eligible   
  WHERE @systemEndTime < CONVERT(datetime2, '2016-01-01T00:00:00', 101) ;  
  

Terapkan fungsi filter ke tabel.

ALTER TABLE [<table name>]
SET (   
        REMOTE_DATA_ARCHIVE = ON   
                (   
                        FILTER_PREDICATE = dbo.fn_StretchBySystemEndTime20160101(ValidTo)
                                , MIGRATION_STATE = OUTBOUND   
                )  
        )   
; 

Saat Anda ingin memperbarui jendela geser, lakukan hal-hal berikut.

  1. Buat fungsi baru yang menentukan jendela geser baru. Contoh berikut memilih tanggal yang lebih awal dari 2 Januari 2016, bukan 1 Januari 2016.

  2. Ganti fungsi filter sebelumnya dengan yang baru dengan memanggil ALTER TABLE, seperti yang diperlihatkan dalam contoh berikut.

  3. Secara opsional, hilangkan fungsi filter sebelumnya yang tidak lagi Anda gunakan dengan memanggil DROP FUNCTION. (Langkah ini tidak ditampilkan dalam contoh.)

BEGIN TRAN  
GO  
        /*(1) Create new predicate function definition */  
        CREATE FUNCTION dbo.fn_StretchBySystemEndTime20160102(@systemEndTime datetime2)  
        RETURNS TABLE  
        WITH SCHEMABINDING   
        AS   
        RETURN SELECT 1 AS is_eligible  
               WHERE @systemEndTime < CONVERT(datetime2,'2016-01-02T00:00:00', 101)  
        GO  
  
        /*(2) Set the new function as the filter predicate */  
        ALTER TABLE [<table name>]
        SET   
        (  
               REMOTE_DATA_ARCHIVE = ON  
               (  
                       FILTER_PREDICATE = dbo.fn_StretchBySystemEndTime20160102(ValidTo),  
                       MIGRATION_STATE = OUTBOUND  
               )  
        )   
COMMIT ;

Contoh lainnya dari fungsi filter yang valid

  • Contoh berikut menggabungkan dua kondisi primitif dengan menggunakan operator logis AND.

    CREATE FUNCTION dbo.fn_stretchpredicate((@column1 datetime, @column2 nvarchar(15))  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
      WHERE @column1 < N'20150101' AND @column2 IN (N'Completed', N'Returned', N'Cancelled')  
    GO  
    
    ALTER TABLE table1 SET ( REMOTE_DATA_ARCHIVE = ON (  
        FILTER_PREDICATE = dbo.fn_stretchpredicate(date, shipment_status),  
        MIGRATION_STATE = OUTBOUND  
    ) )  
    
    
  • Contoh berikut menggunakan beberapa kondisi dan konversi deterministik dengan CONVERT.

    CREATE FUNCTION dbo.fn_stretchpredicate_example1(@column1 datetime, @column2 int, @column3 nvarchar)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '1/1/2015', 101) AND (@column2 < -100 OR @column2 > 100 OR @column2 IS NULL) AND @column3 IN (N'Completed', N'Returned', N'Cancelled')  
    GO  
    
    
  • Contoh berikut menggunakan operator dan fungsi matematika.

    CREATE FUNCTION dbo.fn_stretchpredicate_example2(@column1 float)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 < SQRT(400) + 10  
    GO  
    
    
  • Contoh berikut menggunakan operator BETWEEN dan NOT BETWEEN. Penggunaan ini valid karena fungsi yang dihasilkan sesuai dengan aturan yang dijelaskan di sini setelah Anda mengganti operator BETWEEN dan NOT BETWEEN dengan ekspresi AND dan OR yang setara.

    CREATE FUNCTION dbo.fn_stretchpredicate_example3(@column1 int, @column2 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 BETWEEN 0 AND 100  
                AND (@column2 NOT BETWEEN 200 AND 300 OR @column1 = 50)  
    GO  
    
    

    Fungsi sebelumnya setara dengan fungsi berikut setelah Anda mengganti operator BETWEEN dan NOT BETWEEN dengan ekspresi AND dan OR yang setara.

    CREATE FUNCTION dbo.fn_stretchpredicate_example4(@column1 int, @column2 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 >= 0 AND @column1 <= 100 AND (@column2 < 200 OR @column2 > 300 OR @column1 = 50)  
    GO  
    
    

Contoh fungsi filter yang tidak valid

  • Fungsi berikut tidak valid karena berisi konversi non-deterministik.

    CREATE FUNCTION dbo.fn_example5(@column1 datetime)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 < CONVERT(datetime, '1/1/2016')  
    GO  
    
    
  • Fungsi berikut tidak valid karena berisi panggilan fungsi non-deterministik.

    CREATE FUNCTION dbo.fn_example6(@column1 datetime)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 < DATEADD(day, -60, GETDATE())  
    GO  
    
    
  • Fungsi berikut tidak valid karena berisi subkueri.

    CREATE FUNCTION dbo.fn_example7(@column1 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 IN (SELECT SupplierID FROM Supplier WHERE Status = 'Defunct')  
    GO  
    
    
  • Fungsi berikut tidak valid karena ekspresi yang menggunakan operator aljabar atau fungsi bawaan harus mengevaluasi ke konstanta saat Anda menentukan fungsi. Anda tidak dapat menyertakan referensi kolom dalam ekspresi aljabar atau panggilan fungsi.

    CREATE FUNCTION dbo.fn_example8(@column1 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE @column1 % 2 =  0  
    GO  
    
    CREATE FUNCTION dbo.fn_example9(@column1 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE SQRT(@column1) = 30  
    GO  
    
    
  • Fungsi berikut tidak valid karena melanggar aturan yang dijelaskan di sini setelah Anda mengganti operator BETWEEN dengan ekspresi AND yang setara.

    CREATE FUNCTION dbo.fn_example10(@column1 int, @column2 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING  
    AS  
    RETURN  SELECT 1 AS is_eligible  
            WHERE (@column1 BETWEEN 1 AND 200 OR @column1 = 300) AND @column2 > 1000  
    GO  
    
    

    Fungsi sebelumnya setara dengan fungsi berikut setelah Anda mengganti operator BETWEEN dengan ekspresi AND yang setara. Fungsi ini tidak valid karena kondisi primitif hanya dapat menggunakan operator logis OR.

    CREATE FUNCTION dbo.fn_example11(@column1 int, @column2 int)  
    RETURNS TABLE  
    WITH SCHEMABINDING   
    AS   
    RETURN  SELECT 1 AS is_eligible  
            WHERE (@column1 >= 1 AND @column1 <= 200 OR @column1 = 300) AND @column2 > 1000  
    GO  
    
    

Cara Stretch Database menerapkan fungsi filter

Stretch Database menerapkan fungsi filter ke tabel dan menentukan baris yang memenuhi syarat dengan menggunakan operator CROSS APPLY. Contohnya:

SELECT * FROM stretch_table_name CROSS APPLY fn_stretchpredicate(column1, column2)  

Jika fungsi mengembalikan hasil yang tidak kosong untuk baris, baris memenuhi syarat untuk dimigrasikan.

Mengganti fungsi filter yang sudah ada

Anda dapat mengganti fungsi filter yang ditentukan sebelumnya dengan menjalankan pernyataan UBAH TABEL lagi dan menentukan nilai baru untuk parameter FILTER_PREDICATE . Contohnya:

ALTER TABLE stretch_table_name SET ( REMOTE_DATA_ARCHIVE = ON (  
    FILTER_PREDICATE = dbo.fn_stretchpredicate2(column1, column2),  
    MIGRATION_STATE = OUTBOUND /* replace OUTBOUND in this example, with the actual, desired migration state */
    ) )  

Fungsi bernilai tabel sebaris baru memiliki persyaratan berikut.

  • Fungsi baru harus kurang ketat daripada fungsi sebelumnya.

  • Semua operator yang ada di fungsi lama harus ada dalam fungsi baru.

  • Fungsi baru tidak boleh berisi operator yang tidak ada di fungsi lama.

  • Urutan argumen operator tidak dapat berubah.

  • Hanya nilai konstanta yang merupakan bagian dari perbandingan <, <=, >, >= yang dapat diubah dengan cara yang membuat fungsi kurang ketat.

Contoh penggantian yang valid

Asumsikan bahwa fungsi berikut adalah fungsi filter saat ini.

CREATE FUNCTION dbo.fn_stretchpredicate_old(@column1 datetime, @column2 int)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '1/1/2016', 101)  
            AND (@column2 < -100 OR @column2 > 100)  
GO  
  

Fungsi berikut adalah pengganti yang valid karena konstanta tanggal baru (yang menentukan tanggal cutoff selanjutnya) membuat fungsi kurang ketat.

CREATE FUNCTION dbo.fn_stretchpredicate_new(@column1 datetime, @column2 int)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '2/1/2016', 101)  
            AND (@column2 < -50 OR @column2 > 50)  
GO  
  

Contoh penggantian yang tidak valid

Fungsi berikut bukan pengganti yang valid karena konstanta tanggal baru (yang menentukan tanggal cutoff sebelumnya) tidak membuat fungsi kurang ketat.

CREATE FUNCTION dbo.fn_notvalidreplacement_1(@column1 datetime, @column2 int)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '1/1/2015', 101)  
            AND (@column2 < -100 OR @column2 > 100)  
GO  
  

Fungsi berikut bukan pengganti yang valid karena salah satu operator perbandingan telah dihapus.

CREATE FUNCTION dbo.fn_notvalidreplacement_2(@column1 datetime, @column2 int)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '1/1/2016', 101)  
            AND (@column2 < -50)  
GO  
  

Fungsi berikut bukan pengganti yang valid karena kondisi baru telah ditambahkan dengan operator logis AND.

CREATE FUNCTION dbo.fn_notvalidreplacement_3(@column1 datetime, @column2 int)  
RETURNS TABLE  
WITH SCHEMABINDING   
AS   
RETURN  SELECT 1 AS is_eligible  
        WHERE @column1 < CONVERT(datetime, '1/1/2016', 101)  
            AND (@column2 < -100 OR @column2 > 100)  
            AND (@column2 <> 0)  
GO  
  

Menghapus fungsi filter dari tabel

Untuk memigrasikan seluruh tabel alih-alih baris yang dipilih, hapus fungsi yang ada dengan mengatur FILTER_PREDICATE ke null. Contohnya:

ALTER TABLE stretch_table_name SET ( REMOTE_DATA_ARCHIVE = ON (  
    FILTER_PREDICATE = NULL,  
    MIGRATION_STATE = OUTBOUND /* replace OUTBOUND in this example, with the actual, desired migration state */
) )  
  

Setelah Anda menghapus fungsi filter, semua baris dalam tabel memenuhi syarat untuk migrasi. Akibatnya, Anda tidak dapat menentukan fungsi filter untuk tabel yang sama nanti kecuali Anda membawa kembali semua data jarak jauh untuk tabel dari Azure terlebih dahulu. Pembatasan ini ada untuk menghindari situasi di mana baris yang tidak memenuhi syarat untuk migrasi saat Anda menyediakan fungsi filter baru telah dimigrasikan ke Azure.

Memeriksa fungsi filter yang diterapkan ke tabel

Untuk memeriksa fungsi filter yang diterapkan ke tabel, buka tampilan katalog sys.remote_data_archive_tables dan periksa nilai kolom filter_predicate . Jika nilainya null, seluruh tabel memenuhi syarat untuk pengarsipan. Untuk informasi selengkapnya, lihat sys.remote_data_archive_tables (SQL Bertransaksi).

Catatan keamanan untuk fungsi filter

Akun yang disusupi dengan hak istimewa db_owner dapat melakukan hal-hal berikut.

  • Buat dan terapkan fungsi bernilai tabel yang mengonsumsi sumber daya server dalam jumlah besar atau menunggu jangka waktu yang lama yang mengakibatkan penolakan layanan.

  • Buat dan terapkan fungsi bernilai tabel yang memungkinkan untuk menyimpulkan konten tabel yang akses bacanya ditolak pengguna secara eksplisit.

Lihat juga

ALTER TABLE (Transact-SQL)