2010-04-21 13 views
12

पर एक वैश्विक संग्रहीत प्रक्रिया बनाना संभव है, मैंने एक क्वेरी बनाई है जो कुछ निश्चित स्थान पर डेटाबेस बैकअप लेता है। मैं इसे संग्रहीत प्रक्रिया के रूप में उपयोग करना चाहता हूं लेकिन इसे वैश्विक संग्रहीत प्रक्रिया के रूप में कार्य करना चाहिए ताकि जब भी यह एसपी कहा जाता है। फिर डेटाबेस बैकअप लिया जाता है।क्या एसक्यूएल सर्वर स्तर

यह मालिक डेटाबेस के डेटाबेस बैकअप लेने के लिए डीबी_नाम() का उपयोग करता है।

क्या ऐसा कोई एसपी या फ़ंक्शन बनाना संभव है।

मैं एसक्यूएल सर्वर का उपयोग कर रहा 2005

उत्तर

15

पहला समाधान:

आप मास्टर डेटाबेस में अपने एसपी बना सकते हैं और एक प्रणाली वस्तु के रूप में चिह्नित और 'sp_' तो एक प्रति अवश्य लगा दें तो मौजूद होगा जो सभी डेटाबेस द्वारा साझा किया जाएगा।

और MSDN से दूसरा समाधान:

निजी और वैश्विक अस्थायी संग्रहित प्रक्रियाओं, अस्थायी तालिकाओं के समान है, # और ## उपसर्गों प्रक्रिया नाम को जोड़ा गया के साथ बनाया जा सकता है। # स्थानीय अस्थायी संग्रहीत प्रक्रिया को इंगित करता है; ## एक वैश्विक अस्थायी संग्रहीत प्रक्रिया को दर्शाता है। एसक्यूएल सर्वर बंद होने के बाद ये प्रक्रियाएं मौजूद नहीं हैं।

एक उदाहरण:

USE master 
    CREATE TABLE test (c1 VARCHAR(50)) 
    INSERT test VALUES('master') 
    go 
    CREATE PROC sp_test AS 
    SELECT * FROM test 
    GO 

USE northwind 
    CREATE TABLE test (c1 VARCHAR(50)) 
    INSERT test VALUES('northwind') 

USE pubs 
    CREATE TABLE test(c1 VARCHAR(50)) 
    INSERT test VALUES('pubs') 

USE pubs 
    EXEC sp_test --returns 'master' 

USE master 
    EXEC sp_MS_marksystemobject sp_test 

USE pubs 
    EXEC sp_test --returns 'pubs' 

USE northwind 
    EXEC sp_test --returns 'northwind' 
+0

@masoud THX, आप कैसे एक रूप में चिह्नित करने के छोटे से वाक्य रचना प्रदान कर सकते हैं सिस्टम ऑब्जेक्ट –

+0

@masoud: मैं लगातार वैश्विक संग्रहीत प्रक्रिया चाहता हूं। क्या आप उस निर्माण के लिए सिंटैक्स प्रदान कर सकते हैं –

+0

@Shantanu: पहला समाधान लगातार है लेकिन दूसरा नहीं है। –

4

तीन कदम एक "प्रणाली" संग्रहीत प्रक्रिया है कि सर्वर पर सभी डेटाबेस के लिए सुलभ है, साथ ही के संदर्भ के अंतर्गत चलाने के लिए सक्षम हो है बनाने के लिए पालन किया जाना चाहिए वर्तमान डेटाबेस जब इसे कहा जाता है।

  1. मास्टर डाटाबेस - संग्रहीत प्रक्रिया मास्टर डेटाबेस
  2. उपसर्ग संग्रहित प्रक्रिया में बनाया जाना चाहिए - संग्रहीत प्रक्रिया नाम sp_
  3. मार्क सपा के रूप में सिस्टम वस्तु के साथ उपसर्ग किया जाना चाहिए - कॉल sp_ms_marksystemobject कस्टम एसपी को सिस्टम ऑब्जेक्ट के रूप में चिह्नित करने के लिए

उदाहरण नीचे दिए गए कोड

--Step 1, Create in master database 
USE master 
GO 

--Step 2, Prefix with sp_ the custom proc 
CREATE PROCEDURE sp_myCustomSystemProc 
AS 
BEGIN 
    PRINT 'myCustomCode' 
END 
GO 

--Step 3, Mark as system object so proc executes in context of current db 
EXEC sp_ms_marksystemobject 'sp_myCustomSystemProc' 
GO 
1

ऐसे संग्रहीत प्रक्रिया

  1. संग्रहीत प्रक्रिया मास्टर डेटाबेस में बनाया जाना चाहिए के लिए 3 आवश्यकता हैं।
  2. संग्रहीत प्रक्रिया का नाम "sp_" से शुरू होना चाहिए।
  3. संग्रहित प्रक्रिया को सिस्टम ऑब्जेक्ट के रूप में चिह्नित किया जाना चाहिए।

- 2 - 1. मास्टर डेटाबेस

USE master 
GO 

में प्रक्रिया बनाएँ।उपसर्ग sp_

CREATE PROCEDURE sp_[Stored_Procedure_Name] 
AS 
BEGIN 
    -- Insert the logic of your stored procedure here 
END 
GO 

साथ प्रक्रिया बनाएँ - 3. मार्क एक प्रणाली वस्तु के रूप में जमा की प्रक्रिया में मदद के लिए

EXEC sys.sp_MS_marksystemobject sp_[Stored_Procedure_Name] 
संबंधित मुद्दे