সমস্ত সঞ্চিত প্রক্রিয়া তালিকা করতে জিজ্ঞাসা করুন


338

কী ক্যোয়ারী কোনও এসকিউএল সার্ভার ডাটাবেসে সমস্ত সঞ্চিত পদ্ধতির নাম ফিরিয়ে দিতে পারে

যদি ক্যোয়ারী সিস্টেম সঞ্চিত পদ্ধতিগুলি বাদ দিতে পারে তবে তা আরও সহায়ক হবে।

উত্তর:


499

মাইক যেমনটি বলেছেন, ব্যবহারের সর্বোত্তম উপায় information_schema। যতক্ষণ না আপনি মাস্টার ডাটাবেসে না থাকেন ততক্ষণ সিস্টেম সঞ্চিত পদ্ধতিগুলি ফেরত দেওয়া হবে না।

SELECT * 
  FROM DatabaseName.INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE = 'PROCEDURE'

যদি কোনও কারণে মাস্টার ডাটাবেসে আপনার সিস্টেম বহির্ভূত সঞ্চিত প্রক্রিয়া থাকে তবে আপনি ক্যোয়ারীটি ব্যবহার করতে পারেন (এটি সর্বাধিক সিস্টেম সঞ্চিত পদ্ধতিগুলি ফিল্টার করবে):

SELECT * 
  FROM [master].INFORMATION_SCHEMA.ROUTINES
 WHERE ROUTINE_TYPE = 'PROCEDURE' 
   AND LEFT(ROUTINE_NAME, 3) NOT IN ('sp_', 'xp_', 'ms_')

3
আপনি যদি ডাটাবেস ডায়াগ্রামগুলি তৈরি করেন তবে আপনি আপনার ডাটাবেসে 'dt_' দিয়ে শুরু করে প্রচুর প্রসেস পেতে পারেন যা আপনি ফিল্টারও করতে পারেন।
জন ফুহি

তথ্য স্কিমা জন্য +1। মূল্য একটি পড়ুন: msdn.microsoft.com/en-us/library/ms186778.aspx
Shiham

এটি হওয়া উচিত "যতক্ষণ না আপনি [মাস্টার] বা [এমএসডিবি] ডাটাবেসে না থাকেন ..."
সলোমন রুটজকি

107
SELECT name, 
       type
  FROM dbo.sysobjects
 WHERE (type = 'P')

4
এটি এমএস-এসকিউএল ২০০৮-এর একটি ভাগ করা পরিবেশে আমার পক্ষে কাজ করেছে; আগের দু'জন তা করেন নি ...
Realto619

3
এসকিউএল সার্ভার 2005 বা নতুন ব্যবহার করা যে কোনও ব্যক্তির dbo.sys*ভিউগুলি থেকে সরে যেতে হবে । এই ক্যোয়ারীটিও: সিএলআর সঞ্চিত পদ্ধতিগুলি ফিল্টার আউট করে, সিস্টেমের সঞ্চিত প্রক্সগুলি ফিল্টার করে না এবং [টাইপ] ফেরত দেয় যখন জানা যায় যে [টাইপ] সর্বদা 'পি' হবে কারণ এটি সর্বনিম্ন অবস্থা।
সলোমন রুটজকি

ডাটাবেসে থাকা অবজেক্টগুলির আলাদা স্কিমা থাকলে এটি কাজ করবে না
ফয়েজুল করিম

30

আমার বোঝার থেকে "পছন্দসই" পদ্ধতিটি হল তথ্য_স্কেমার টেবিলগুলি ব্যবহার করা:

select * 
  from information_schema.routines 
 where routine_type = 'PROCEDURE'

ফিরে আসা রেকর্ডগুলির কাছে সিস্টেম স্টোরেজ পদ্ধতিগুলির মধ্যে পার্থক্য করার উপায় নেই বলে মনে হচ্ছে

18

নিম্নলিখিত নির্বাচিত ডাটাবেসে সমস্ত প্রক্রিয়া ফেরত দেবে

SELECT * FROM sys.procedures

এটি পরিবর্তিত হয়েছে এবং তারিখ ইত্যাদি তৈরি করেছে যা খুব দরকারী
ihightower

14

সঞ্চিত পদ্ধতি এবং ফাংশনগুলি পেতে আপনি এই ক্যোয়ারীটি চেষ্টা করতে পারেন:

SELECT name, type
FROM dbo.sysobjects
WHERE type IN (
    'P', -- stored procedures
    'FN', -- scalar functions 
    'IF', -- inline table-valued functions
    'TF' -- table-valued functions
)
ORDER BY type, name

10

আপনি যদি এসকিউএল সার্ভার 2005 ব্যবহার করেন তবে নিম্নলিখিতগুলি কাজ করবে:

select *
  from sys.procedures
 where is_ms_shipped = 0

এটি ভুল ফলাফল দেবে এবং ডায়াগ্রাম স্টোরেজ পদ্ধতি (sp_upgraddiagگرام) এর মতো সিস্টেমকে ২০০q-এর স্ক্যুলে অন্তর্ভুক্ত করবে
HaveNoDisplayName

@Piyush সত্য এটি ডায়াগ্রাম procs আসতে হবে, কিন্তু কেউ পারে বিবেচনা না তাদের "সিস্টেম" procs হতে যেহেতু তারা মান ইনস্টল সঙ্গে আসা হয়নি। ওপি কীভাবে পরিচালনা করতে পারে তা নির্দিষ্ট করে দেয় না তাই তাদের ফিল্টার আউট করা অগত্যা ভুল নয়।
সলোমন রুটজকি

@ শ্রুতজকি: - তবে এখনও এটি ব্যবহারকারীর দ্বারা তৈরি করা হয়নি
HaveNoDisplayName

@ পীযূস ট্রু, তবে আমি যেমন বলেছিলাম, ওপি "ইউজার তৈরি করা" বা "সিস্টেম" নয় এমন প্রক্সকে কীভাবে পরিচালনা করবেন তা নির্দিষ্ট করে নি। এবং কেউ জিজ্ঞাসা করেনি।
সলোমন রুটজকি

দুর্দান্ত উত্তর। "Is_ms_shped = 0." অন্তর্ভুক্ত করার জন্য আপনাকে ধন্যবাদ
হান্স ভন

8

আপনি একটি ডাটাবেসে সঞ্চিত পদ্ধতিগুলির তালিকা পেতে নীচের প্রশ্নের মধ্যে একটি ব্যবহার করতে পারেন:

প্রশ্ন 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

1
আপনার sp_msforeachdb ব্যবহার করে উদাহরণটি IMO সোনার এবং এর উত্তর হওয়া উচিত। এখানে এই লিঙ্কটি আমি এই স্প্রোক সম্পর্কে আরও কথা বলে দেখতে পেয়েছি: weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx
মাইক চিল

8

সমস্ত সঞ্চিত পদ্ধতি এবং দর্শনগুলি নির্বাচন করুন

select name,type,type_desc
from sys.objects
where type in ('V','P')
order by name,type

5

এটি সিস্টেমের পদ্ধতিগুলি বাদ দিয়ে প্রক্রিয়া তালিকাবদ্ধ করতে সহায়তা করতে পারে:

select * from sys.all_objects where type='p' and is_ms_shipped=0

sys.all_objectsযেহেতু আপনি ফিল্টারিং করছেন তখন ব্যবহার করার কোনও কারণ নেই is_ms_shipped=0। এটিতে ডিডিএল ট্রিগারগুলি থাকতে পারে তবে সেগুলি ফিল্টার করে দেওয়া হবে type='p'। আপনি পাশাপাশি ব্যবহার করতে পারেন sys.objects
সলোমন রুটজকি

4

দুর্ভাগ্যক্রমে INFORMATION_SCHEMAসিস্টেম প্রোক্স সম্পর্কে তথ্য ধারণ করে না।

SELECT *
  FROM sys.objects
 WHERE objectproperty(object_id, N'IsMSShipped') = 0
   AND objectproperty(object_id, N'IsProcedure') = 1

1
আপনি এর পরিবর্তে কেন এটি ব্যবহার করবেন sys.procedures where is_ms_shipped = 0? এবং কেন আপনি objectproperty(object_id, N'IsMSShipped')প্রতিটি সারির জন্য একটি ক্রিয়াকলাপ পরিচালনা করবেন যখন সেখানে কোনও ক্ষেত্র is_ms_shippedরয়েছে যাতে সেই মান রয়েছে? একই লাইন বরাবর, কেন [type] IN ('P', 'PC')একই জিনিস যখন আবার সেই ফাংশন চালান ? এই পদ্ধতিটি অহেতুক জটিল এবং অদক্ষ।
সলোমন রুটজকি


3

আমি সিস্টেম সঞ্চিত পদ্ধতি বাদ দিতে উপরের দিকে লস্টকাজুনের দুর্দান্ত পোস্টটি টুইট করেছি। আমি "এক্সট্র্যাক্ট "ও সরিয়েছি। কোড থেকে কারণ আমি এটি কী জন্য তা বুঝতে পারি না এবং এটি আমাকে ত্রুটি দেয়। লুপের ভিতরে "পরবর্তী পরবর্তী" বিবৃতিতে একটি "ইন" ধারাও প্রয়োজন।

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;

2

অবজেক্টগুলি পাওয়ার সর্বোত্তম উপায় হ'ল 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'

1
select *  
  from dbo.sysobjects
 where xtype = 'P'
   and status > 0

স্থিতি> 0 সিস্টেম সঞ্চিত পদ্ধতি এবং তৈরি

হুম। এটি আমাদের পক্ষে - কেন জানি না।
বব প্রোবস্ট

এসকিউএল সার্ভার 2005 বা নতুন ব্যবহার করা যে কোনও ব্যক্তির dbo.sys*ভিউগুলি থেকে সরে যেতে হবে । এই কোয়েরিটি সিএলআর সঞ্চিত প্রক্রিয়াগুলিও ফিল্টার করে।
সলোমন রুটজকি

1

সমস্ত সঞ্চিত পদ্ধতির পাঠ্য তালিকার জন্য আমি এই সহজ 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;

দয়া করে @ ব্যাফলেডবিলের এটি পুনরায় লেখা দেখুন .. যা আমার পক্ষে কাজ করেছে। এটিতে ত্রুটি থাকার কারণে এটি কার্যকর হয়নি।
ihightower

1

এটি সঞ্চিত প্রক্রিয়াগুলির কেবলমাত্র নাম দেবে।

select specific_name
from information_schema.routines
where routine_type = 'PROCEDURE';


0

এটি, আপনি যা চান তা সব তালিকাভুক্ত করুন

এসকিএল সার্ভার 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। এছাড়াও, "PROCEDURE" এর জন্য একটি বৈধ বিকল্প নয় sp_tables। এর জন্য একমাত্র বিকল্প @table_typeহ'ল: 'সিস্টেমে টেবিল', 'টেবিল' এবং 'দর্শন'।
সলোমন রুটজকি

0

এটি সমস্ত এসপির নাম ফিরিয়ে দেবে

Select * 
FROM sys.procedures where [type] = 'P' 
     AND is_ms_shipped = 0 
     AND [name] not like 'sp[_]%diagram%'

শর্তটি অন্য কোনও [type]হওয়া উচিত যা [type] IN ('P', 'PC')আপনি সম্ভবত যে কোনও সিএলআর সঞ্চিত প্রোকগুলি ফিল্টার করছেন।
সলোমন রুটজকি

0

এই কোডেপ্লেক্স লিঙ্কটি ব্যবহার করে দেখুন, এই ইউটিলিটি স্কয়ার ডাটাবেস থেকে সমস্ত সঞ্চিত পদ্ধতি স্থানীয়করণে সহায়তা করে।

https://exportmssqlproc.codeplex.com/


0
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')

0
USE DBNAME

select ROUTINE_NAME from information_schema.routines 
where routine_type = 'PROCEDURE'


GO 

এটি এমএসকিউএল-এ কাজ করবে।


0

এসকিউএল সার্ভারে সঞ্চিত পদ্ধতির তালিকা নির্বাচন করুন। আরও তথ্যের জন্য এখানে দেখুন: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html


1
হ্যালো, এবং স্বাগতম। এই কোডটি শিরোনামের পরামর্শ অনুযায়ী যা করতে প্রদর্শিত হবে না। এটি কেবলমাত্র একটি সঞ্চিত প্রক্রিয়া তৈরিরূপে প্রদর্শিত হচ্ছে যা কোনও PaymentDetailsসারণী থেকে রেকর্ডের তালিকাকে দেয় । ওপি প্রকৃত সঞ্চিত প্রক্রিয়াগুলির একটি তালিকা চায়।
জেরেমি কেনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.