Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да пропусна системни бази данни и да позволя на заданието на агента на SQL Server 2008 да премине след ERROR_NUMBER 208?

Можете да опитате да използвате DB_ID() , вярвам на DB_ID() винаги е 1-4 (освен ако нямате база данни за разпространение ). На теория просто проверете дали DB_ID() е по-голямо от 4:

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

Също така не изглежда, че използвате правилната база данни в манипулатора на грешки - със сигурност вашият опит за улавяне, който създава таблицата, трябва да бъде в извикването на sp_MSforeachdb също?

Имам предвид във вашия текст, че изпълнявате за всяка db, включително това в try catch:

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

Още нещо - в момента изглежда, че сте кодирали трудно стойността reviewadmin.sessions във вашия код за предоставяне на разрешение - предполагам, че сте имали предвид това да бъде вашият нов [?].[Schema].[Sessions] таблица - отново, което трябва да бъде в извикването на sp_MSforeachdb така че да знае на коя база данни да работи.

Надявам се, че ви дадох достатъчно, за да продължите, страхувам се, че не съм на машина, където мога да пиша и тествам всичко!

Ако просто искате бази данни с името 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'

Имайте предвид, че сега можем да пропуснем проверката за DB_ID> 4, тъй като никоя от системните бази данни така или иначе не съответства на вашата конвенция за именуване.

Добре, преосмислих това. Вместо да опитвате и след това да улавяте грешката, ако се провали, какво ще кажете за този нов план:

  1. Проверете дали базата данни отговаря на конвенцията за именуване, която искате.
  2. Проверете дали таблицата съществува.
  3. Създайте таблицата, ако не, дайте разрешения както преди.
  4. Направете вмъкването.

Надяваме се, че това трябва да го направи:

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. Получаване на ID на последния вмъкнат запис - Access DAO, ODBC, поле за самоличност на SQL Server 2008

  2. ЗА XML PATH(''):Екраниране на специални символи

  3. Как да се свържете със SQL Server с удостоверяване на Windows от Node.JS с помощта на модул mssql

  4. Как избягвате двойните кавички в SQL функцията „съдържа“ пълен текст?

  5. Анализиране на I/O производителността за SQL Server