2013-09-26 5 views
10

मुझे SQL सर्वर 2012 डेटाबेस में अनुक्रम मौजूद है या नहीं, यह निर्धारित करने के लिए मुझे एक SQL स्क्रिप्ट बनाने की आवश्यकता है। मैं यह निर्धारित करने के लिए प्रक्रिया से परिचित हूं कि संग्रहित प्रक्रिया मौजूद है लेकिन अनुक्रम नहीं है। धन्यवाद।मैं कैसे निर्धारित कर सकता हूं कि अनुक्रम SQL सर्वर 2012 में मौजूद है या नहीं?

उत्तर

21

स्क्रिप्ट यह निर्धारित करने के लिए कि अनुक्रम पूर्ववत है या नहीं एसक्यूएल सर्वर 2012 में टीएस संग्रहीत प्रक्रियाओं की जांच के लिए बहुत समान है।

SELECT * 
FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[SProc_Name]') AND type IN (N'P', N'PC') 

'पी' और 'पीसी' प्रकार के लिए sys.object का प्रकार निर्दिष्ट के मूल्यों किसी SQL संग्रहित प्रक्रिया या एक विधानसभा है: निम्नलिखित कोड यदि एक संग्रहीत प्रक्रिया मौजूद है देखने के लिए जाँच करता है कि विचार करें (सीएलआर) संग्रहीत प्रक्रिया।

SELECT * 
FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Sequence_Name]') AND type = 'SO' 

उदाहरण के लिए, यदि आप एक अनुक्रम बनाना चाहते हैं यह मौजूद नहीं है, तो आप: एक दृश्य के लिए जाँच करने के लिए, तुम सिर्फ 'तो' जो इंगित करता है कि यह एक अनुक्रम वस्तु है करने के लिए इसे बदलने की जरूरत है निम्नलिखित कोड का उपयोग करें:

IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Sequence_Name]') AND type = 'SO') 
CREATE SEQUENCE [dbo].[Sequence_Name] 
    AS [bigint] 
    START WITH 1 
    INCREMENT BY 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    CACHE 3 
GO 

मुझे आशा है कि इससे मदद मिलती है!

+0

यही वही है जो मुझे चाहिए। धन्यवाद। –

+4

SQL सर्वर 2005 के रूप में, यह नहीं बल्कि "कैच-ऑल" 'sys.objects' लगाने और उन्हें आवश्यक' type' याद करने के लिए की तुलना में ** और अधिक ध्यान केंद्रित ** सूची दृश्य, 'तरह sys.sequences' उपयोग को प्राथमिकता दी प्रश्न में अपनी वस्तु के लिए .... –

+0

अच्छा उदाहरण है .. मैं sql2012 –

8

sys.sequences तालिका में डेटा की जाँच के द्वारा:

select * 
from sys.sequences 
where object_id = object_id('schema_name.sequence_name') 

वास्तव में है कि यदि आप सुनिश्चित करें कि कोई नाम के साथ अनुक्रम के अलावा अन्य वस्तु नहीं है कि कर रहे हैं के बराबर होती है 'schema_name.sequence_name', तुम बस की जांच कर सकता object_id('schema_name.sequence_name') is not null

sql fiddle demo

1

इसे आजमाएं। यह किसी दिए गए डेटाबेस के लिए सभी अनुक्रमों की सूची देगा।

SELECT 
seq.name AS [Sequence Name], 
seq.object_id AS [Object ID], 
seq.create_date AS [Creation Date], 
seq.modify_date AS [Last Modified Date], 
SCHEMA_NAME(seq.schema_id) AS [Schema], 
CAST(seq.precision AS int) AS [Numeric Precision], 
CAST(seq.scale AS int) AS [Numeric Scale], 
ISNULL(seq.start_value,N'''') AS [Start Value], 
ISNULL(seq.increment,N'''') AS [Increment Value], 
ISNULL(seq.minimum_value,N'''') AS [Min Value], 
ISNULL(seq.maximum_value,N'''') AS [Max Value], 
CAST(seq.is_cycling AS bit) AS [Is Cycle Enabled], 
ISNULL(seq.cache_size,0) AS [Cache Size], 
ISNULL(seq.current_value,N'''') AS [Current Value] 
FROM sys.sequences AS seq 
1

यह टिम एस का एक और शॉर्टकट संस्करण है:

IF OBJECT_ID('schema_name.sequence_name', 'SO') IS NOT NULL 
BEGIN 
    DROP SEQUENCE schema_name.sequence_name 
END 
0

मैं एसक्यूएल सर्वर 17.4 (एमएस एसक्यूएल Sever का नवीनतम संस्करण) का उपयोग कर रहा है और इस कोड मेरे साथ काम करता है। उदाहरण के लिए, यह कोड अनुक्रम बनाता है यदि मौजूद नहीं है।

IF NOT EXISTS 
(
SELECT [name] 
FROM sys.sequences 
WHERE [name] = 'seq_businessTripRequest' 
) 
BEGIN 

CREATE SEQUENCE [dbo].[seq_businessTripRequest] 
AS [BIGINT] 
START WITH 1 
INCREMENT BY 1 
MINVALUE-9223372036854775808 
MAXVALUE 9223372036854775807 
CACHE; 

END; 
संबंधित मुद्दे

 संबंधित मुद्दे