কী ক্যোয়ারী কোনও এসকিউএল সার্ভার ডাটাবেসে সমস্ত সঞ্চিত পদ্ধতির নাম ফিরিয়ে দিতে পারে
যদি ক্যোয়ারী সিস্টেম সঞ্চিত পদ্ধতিগুলি বাদ দিতে পারে তবে তা আরও সহায়ক হবে।
কী ক্যোয়ারী কোনও এসকিউএল সার্ভার ডাটাবেসে সমস্ত সঞ্চিত পদ্ধতির নাম ফিরিয়ে দিতে পারে
যদি ক্যোয়ারী সিস্টেম সঞ্চিত পদ্ধতিগুলি বাদ দিতে পারে তবে তা আরও সহায়ক হবে।
উত্তর:
মাইক যেমনটি বলেছেন, ব্যবহারের সর্বোত্তম উপায় 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_')
SELECT name,
type
FROM dbo.sysobjects
WHERE (type = 'P')
dbo.sys*
ভিউগুলি থেকে সরে যেতে হবে । এই ক্যোয়ারীটিও: সিএলআর সঞ্চিত পদ্ধতিগুলি ফিল্টার আউট করে, সিস্টেমের সঞ্চিত প্রক্সগুলি ফিল্টার করে না এবং [টাইপ] ফেরত দেয় যখন জানা যায় যে [টাইপ] সর্বদা 'পি' হবে কারণ এটি সর্বনিম্ন অবস্থা।
নিম্নলিখিত নির্বাচিত ডাটাবেসে সমস্ত প্রক্রিয়া ফেরত দেবে
SELECT * FROM sys.procedures
আপনি যদি এসকিউএল সার্ভার 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
সিস্টেম প্রোক্স সম্পর্কে তথ্য ধারণ করে না।
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')
একই জিনিস যখন আবার সেই ফাংশন চালান ? এই পদ্ধতিটি অহেতুক জটিল এবং অদক্ষ।
আমি সিস্টেম সঞ্চিত পদ্ধতি বাদ দিতে উপরের দিকে লস্টকাজুনের দুর্দান্ত পোস্টটি টুইট করেছি। আমি "এক্সট্র্যাক্ট "ও সরিয়েছি। কোড থেকে কারণ আমি এটি কী জন্য তা বুঝতে পারি না এবং এটি আমাকে ত্রুটি দেয়। লুপের ভিতরে "পরবর্তী পরবর্তী" বিবৃতিতে একটি "ইন" ধারাও প্রয়োজন।
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'
এটি, আপনি যা চান তা সব তালিকাভুক্ত করুন
এসকিএল সার্ভার 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
হ'ল: 'সিস্টেমে টেবিল', 'টেবিল' এবং 'দর্শন'।
এটি সমস্ত এসপির নাম ফিরিয়ে দেবে
Select *
FROM sys.procedures where [type] = 'P'
AND is_ms_shipped = 0
AND [name] not like 'sp[_]%diagram%'
[type]
হওয়া উচিত যা [type] IN ('P', 'PC')
আপনি সম্ভবত যে কোনও সিএলআর সঞ্চিত প্রোকগুলি ফিল্টার করছেন।
এই কোডেপ্লেক্স লিঙ্কটি ব্যবহার করে দেখুন, এই ইউটিলিটি স্কয়ার ডাটাবেস থেকে সমস্ত সঞ্চিত পদ্ধতি স্থানীয়করণে সহায়তা করে।
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
এটি এমএসকিউএল-এ কাজ করবে।
এসকিউএল সার্ভারে সঞ্চিত পদ্ধতির তালিকা নির্বাচন করুন। আরও তথ্যের জন্য এখানে দেখুন: https://coderrooms.blogspot.com/2017/06/select-list-of-stored-procedure-in-sql.html
PaymentDetails
সারণী থেকে রেকর্ডের তালিকাকে দেয় । ওপি প্রকৃত সঞ্চিত প্রক্রিয়াগুলির একটি তালিকা চায়।