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

Bagaimana saya bisa menghilangkan basis data sistem dan mengizinkan pekerjaan agen SQL Server 2008 melewati ERROR_NUMBER 208?

Anda dapat mencoba menggunakan DB_ID() , saya percaya DB_ID() selalu 1-4 (kecuali jika Anda memiliki basis data distribusi ). Secara teori, cukup periksa untuk melihat apakah DB_ID() lebih besar dari 4:

exec sp_MSforeachdb 'IF DB_ID(''?'')) > 4
BEGIN
 DELETE FROM [?].schema.sessions WHERE name like ''xyz_%''
 AND sessionStart <DATEADD(mi, -5,GETDATE())
END' 

Juga sepertinya Anda tidak menggunakan database yang benar di penangan kesalahan - pasti tangkapan percobaan Anda yang membuat tabel harus di panggil ke sp_MSforeachdb juga?

Maksud saya dalam teks Anda, Anda menjalankan untuk setiap db, termasuk ini dalam tangkapan percobaan:

CREATE TABLE [?].[SCHEMA].[SESSIONS]
(
   [authuser]     [VARCHAR](30) NULL,
   [sessionID]    [CHAR](36) NULL,
   [sessionStart] [DATETIME] NULL
)

Satu hal lagi - saat ini Anda tampaknya sulit mengkodekan nilai reviewadmin.sessions dalam kode pemberian izin Anda - saya berasumsi bahwa yang Anda maksud adalah [?].[Schema].[Sessions] baru Anda. table - lagi yang harus di panggil ke sp_MSforeachdb sehingga tahu database mana yang akan dijalankan.

Saya harap saya telah memberi Anda cukup untuk melanjutkan, saya tidak berada di mesin di mana saya dapat menulis &menguji semuanya, saya takut!

Jika Anda hanya ingin database dengan nama xyz_% :

exec sp_MSforeachdb 'IF DB_NAME() LIKE ''xyz_%''
BEGIN
 DELETE FROM [?].schema.sessions WHERE name like ''xyz_%''
 AND sessionStart <DATEADD(mi, -5,GETDATE())
END'

Perhatikan bahwa kita sekarang dapat melewati pemeriksaan untuk DB_ID> 4, karena tidak ada database sistem yang cocok dengan konvensi penamaan Anda.

Oke, saya sudah memikirkan kembali ini. Daripada mencoba dan kemudian menangkap kesalahan jika gagal, bagaimana dengan rencana baru ini:

  1. Periksa apakah database cocok dengan konvensi penamaan yang Anda inginkan.
  2. Periksa apakah tabel ada.
  3. Buat tabel jika tidak, berikan izin seperti sebelumnya.
  4. Lakukan penyisipan.

Semoga ini berhasil:

EXEC Sp_msforeachdb 'IF ''?'' LIKE ''xyz_%''
                    BEGIN
                        IF OBJECT_ID(''?.REVIEWADMIN.Sessions'', ''U'') IS NULL
                        BEGIN
                            CREATE TABLE [?].ReviewAdmin.Sessions
                            (
                                [authuser]     [VARCHAR](30) NULL,
                                [sessionID]    [CHAR](36) NULL,
                                [sessionStart] [DATETIME] NULL
                            )

                            grant select,delete on reviewadmin.sessions to public;

                        END

                        DELETE FROM [?].ReviewAdmin.Sessions
                        WHERE sessionStart < DATEADD(mi, -5,GETDATE())

                    END'



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di SQL Server, cara membuat while loop di pilih

  2. Konversi objek SQL Server DateTime ke BIGINT (.Net ticks)

  3. Bagaimana cara menghitung dalam SQL semua bidang dengan nilai nol dalam satu catatan?

  4. Menggunakan SQL Server sebagai penyimpanan Gambar

  5. Cara menghapus baris duplikat sepenuhnya