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 पर कॉल में होना चाहिए साथ ही?

मेरा मतलब है कि आपके टेक्स्ट में आप प्रत्येक डीबी के लिए चल रहे हैं, इसमें एक कोशिश में यह भी शामिल है:

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. मैं हाइबरनेट में बिगडेसिमल को कैसे मैप करूं ताकि मैं उसी पैमाने पर वापस आ सकूं जो मैंने रखा था?

  2. संग्रहित प्रक्रिया निष्पादन के बाद रिकॉर्डसेट बंद हो गया

  3. SQL सर्वर डेटाबेस को Azure SQL डेटाबेस में माइग्रेट करने के तरीके

  4. SQL सर्वर संग्रहीत कार्यविधि कोड को कहाँ संग्रहीत करता है?

  5. विशिष्ट पहचानकर्ता द्वारा पूछे गए परिणामों की पंक्तियों का मेल?