SQL सर्वर डेटाबेस में सभी संग्रहीत कार्यविधियों के नाम क्या क्वेरी वापस कर सकते हैं
यदि क्वेरी सिस्टम संग्रहीत कार्यविधियों को बाहर कर सकती है, तो यह और भी मददगार होगी।
SQL सर्वर डेटाबेस में सभी संग्रहीत कार्यविधियों के नाम क्या क्वेरी वापस कर सकते हैं
यदि क्वेरी सिस्टम संग्रहीत कार्यविधियों को बाहर कर सकती है, तो यह और भी मददगार होगी।
जवाबों:
जैसा कि माइक ने कहा, इसका सबसे अच्छा तरीका उपयोग करना है information_schema
। जब तक आप मास्टर डेटाबेस में नहीं होते हैं, सिस्टम संग्रहीत कार्यविधियाँ वापस नहीं की जाएंगी।
SELECT *
FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
यदि किसी कारण से आपके पास मास्टर डेटाबेस में गैर-सिस्टम संग्रहीत प्रक्रियाएँ थीं, तो आप क्वेरी का उपयोग कर सकते हैं (यह MOST सिस्टम प्रक्रियाओं को फ़िल्टर करेगा):
SELECT *
FROM [master].INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')
SELECT name,
type
FROM dbo.sysobjects
WHERE (type = 'P')
dbo.sys*
विचारों से दूर जाना चाहिए । यह क्वेरी भी: सीएलआर संग्रहित प्रक्रियाओं को फ़िल्टर करती है, सिस्टम संग्रहीत प्रोक्स को फ़िल्टर नहीं करती है, और [प्रकार] तब वापस आती है जब यह ज्ञात हो जाता है कि [प्रकार] हमेशा out पी ’होगा क्योंकि यह WHERE की स्थिति है।
निम्न चयनित डेटाबेस में सभी प्रक्रियाएँ लौटाएगा
SELECT * FROM sys.procedures
यदि आप SQL Server 2005 का उपयोग कर रहे हैं तो निम्नलिखित कार्य करेगा:
select *
from sys.procedures
where is_ms_shipped = 0
एक डेटाबेस में संग्रहीत प्रक्रियाओं की सूची खोजने के लिए आप नीचे दिए गए प्रश्नों में से एक का उपयोग कर सकते हैं:
प्रश्न 1:
SELECT
*
FROM sys.procedures;
प्रश्न 2:
SELECT
*
FROM information_schema.routines
WHERE ROUTINE_TYPE = 'PROCEDURE'
यदि आप सभी डेटाबेस में सभी एसपी की सूची खोजना चाहते हैं, तो आप नीचे दिए गए क्वेरी का उपयोग कर सकते हैं:
CREATE TABLE #ListOfSPs
(
DBName varchar(100),
[OBJECT_ID] INT,
SPName varchar(100)
)
EXEC sp_msforeachdb 'USE [?]; INSERT INTO #ListOfSPs Select ''?'', Object_Id, Name FROM sys.procedures'
SELECT
*
FROM #ListOfSPs
सभी संग्रहीत कार्यविधियाँ और दृश्य चुनें
select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type
यह सिस्टम प्रक्रियाओं को छोड़कर प्रक्रिया को सूचीबद्ध करने में भी मदद कर सकता है:
select * from sys.all_objects where type='p' and is_ms_shipped=0
sys.all_objects
क्योंकि आप फ़िल्टर कर रहे हैं is_ms_shipped=0
। इसमें डीडीएल ट्रिगर शामिल हो सकते हैं, लेकिन जिन्हें फ़िल्टर किया जाएगा type='p'
। आप भी उपयोग कर सकते हैं sys.objects
।
दुर्भाग्य से INFORMATION_SCHEMA
सिस्टम procs के बारे में जानकारी शामिल नहीं है।
SELECT *
FROM sys.objects
WHERE objectproperty(object_id, N'IsMSShipped') = 0
AND objectproperty(object_id, N'IsProcedure') = 1
sys.procedures where is_ms_shipped = 0
? और objectproperty(object_id, N'IsMSShipped')
जब आप हर पंक्ति के लिए कोई फ़ंक्शन चलाते हैं , तो एक फ़ील्ड is_ms_shipped
होता है जिसमें वह मान होता है? उन्हीं रेखाओं के साथ, वही कार्य फिर से क्यों चलता है [type] IN ('P', 'PC')
? यह विधि अनावश्यक रूप से जटिल और अक्षम है।
मैंने सिस्टम संग्रहित प्रक्रियाओं को बाहर करने के लिए LostCajun की उत्कृष्ट पोस्ट को ट्विक किया है। मैंने "एक्सट्रेक्ट" भी हटा दिया। कोड से क्योंकि मैं यह पता नहीं लगा सका कि यह किस लिए है और इसने मुझे त्रुटियाँ दीं। लूप के अंदर "लाने वाले अगले" बयान को भी "खंड" खंड की आवश्यकता थी।
use <<databasename>>
go
declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
select p.name
from sys.procedures p
where p.type_desc = 'SQL_STORED_PROCEDURE'
and LEFT(p.name,3) NOT IN ('sp_','xp_','ms_')
order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
set @aQuery = 'sp_helptext [' + @spName + ']';
exec sp_executesql @aQuery;
fetch next from allSP into @spName;
end;
close allSP;
deallocate allSP;
वस्तुओं को प्राप्त करने का सर्वोत्तम तरीका sys.sql_modules है। आप इस तालिका से इच्छित प्रत्येक चीज़ पा सकते हैं और ऑब्जेक्ट_आईडी द्वारा अधिक जानकारी प्राप्त करने के लिए इस तालिका को अन्य तालिका से जोड़ सकते हैं
SELECT o. object_id,o.name AS name,o.type_desc,m.definition,schemas.name scheamaName
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.OBJECT_ID
INNER JOIN sys.schemas ON schemas.schema_id = o.schema_id
WHERE [TYPE]='p'
select *
from dbo.sysobjects
where xtype = 'P'
and status > 0
dbo.sys*
विचारों से दूर जाना चाहिए । यह क्वेरी सीएलआर संग्रहित प्रक्रियाओं को भी फ़िल्टर करती है।
मैंने सभी संग्रहीत प्रक्रियाओं के पाठ को सूचीबद्ध करने के लिए यह सरल tsql लिखा है। क्षेत्र में अपने डेटाबेस का नाम स्थानापन्न करना सुनिश्चित करें।
use << database name >>
go
declare @aQuery nvarchar(1024);
declare @spName nvarchar(64);
declare allSP cursor for
select p.name from sys.procedures p where p.type_desc = 'SQL_STORED_PROCEDURE' order by p.name;
open allSP;
fetch next from allSP into @spName;
while (@@FETCH_STATUS = 0)
begin
set @aQuery = 'sp_helptext [Extract.' + @spName + ']';
exec sp_executesql @aQuery;
fetch next from allSP;
end;
close allSP;
deallocate allSP;
यह सभी संग्रहीत कार्यविधियाँ और कोड दिखाने वाला है:
select sch.name As [Schema], obj.name AS [Stored Procedure], code.definition AS [Code] from sys.objects as obj
join sys.sql_modules as code on code.object_id = obj.object_id
join sys.schemas as sch on sch.schema_id = obj.schema_id
where obj.type = 'P'
यह, उन सभी चीजों को सूचीबद्ध करें जो आप चाहते हैं
Sql सर्वर 2005, 2008, 2012 में:
Use [YourDataBase]
EXEC sp_tables @table_type = "'PROCEDURE'"
EXEC sp_tables @table_type = "'TABLE'"
EXEC sp_tables @table_type = "'VIEW'"
या
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.VIEWS
sp_tables
। इसके अलावा, "प्रक्रिया" के लिए एक वैध विकल्प नहीं है sp_tables
। इसके लिए एकमात्र विकल्प @table_type
हैं: 'सिस्टम टेबल', 'टेबल' और 'व्यू'।
यह सभी सपा नाम लौटा देगा
Select *
FROM sys.procedures where [type] = 'P'
AND is_ms_shipped = 0
AND [name] not like 'sp[_]%diagram%'
[type]
होनी चाहिए कि [type] IN ('P', 'PC')
आप किसी भी सीएलआर संग्रहित प्रोक्स को फ़िल्टर कर रहे हैं जो संभावित रूप से वहाँ हैं।
इस कोडप्लेक्स लिंक को आज़माएं, यह उपयोगिता sql डेटाबेस से सभी संग्रहीत कार्यविधि को स्थानीय बनाने में मदद करती है।
select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type = 'PROCEDURE'
select * from DatabaseName.INFORMATION_SCHEMA.ROUTINES where routine_type ='procedure' and left(ROUTINE_NAME,3) not in('sp_', 'xp_', 'ms_')
SELECT name, type FROM dbo.sysobjects
WHERE (type = 'P')
USE DBNAME
select ROUTINE_NAME from information_schema.routines
where routine_type = 'PROCEDURE'
GO
यह mssql पर काम करेगा।
SQL सर्वर में संग्रहीत कार्यविधि की सूची का चयन करें। अधिक जानकारी के लिए यहां देखें: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
PaymentDetails
तालिका से रिकॉर्ड की सूची लौटाता है । ओपी वास्तविक संग्रहीत प्रक्रियाओं की एक सूची चाहता है।