এসকিউএল সার্ভার - "sys.funitions" কোথায়?


104

এসকিউএল সার্ভার 2005 এর সিস্টেম ক্যাটালগটিতে আমি খুব ঘন ঘন সিএসএক্সএক্সএক্স ভিউ করি যা আমি প্রায়শই ব্যবহার করি।

আমাকে যা হোঁচট খায় তা হ'ল: আপনার সঞ্চিত পদ্ধতি সম্পর্কে তথ্য দেখার জন্য কেন "সিস.প্রসেসার্স" ভিউ রয়েছে তবে আপনার সঞ্চিত কার্যকারিতাগুলির জন্য একই দেখার জন্য কোনও "সিস.ফিউশনস" ভিউ নেই?

কেউ কি সঞ্চিত ফাংশন ব্যবহার করে না? আমি উদাহরণস্বরূপ গণনাকৃত কলাম এবং এর জন্য তাদের খুব সহজ মনে করি!

Sys.funitions অনুপস্থিত কোন নির্দিষ্ট কারণ আছে, বা এটি কেবল এমন কিছু যা সিস্ট ক্যাটালগের মতামতগুলিতে রাখার পক্ষে যথেষ্ট বিবেচিত হয়নি ?? এটি কি এসকিউএল সার্ভার ২০০৮ এ উপলব্ধ?

চিয়ার্স, মার্ক


টিমসি প্রদত্ত উত্তরটি (জানুয়ারী 22 জানুয়ারী 14:06 এ) পুরানো সসোবজেক্টস সিস্টেম টেবিলটি ব্যবহার করার চেয়ে বেশি পছন্দ করা হয়েছে, কারণ আপনি INFORMATION_SCHEMA.ROUTINES এ একটি LAST_ALTERED কলাম পেয়েছেন যা সিস.টি.টেবলগুলিতে উপস্থিত, পরিবর্তিত তারিখের কলামের অনুরূপ, sys.views, sys.procedures ইত্যাদি। তবে, আপনি যদি আরও আপডেট হওয়া sys.objects সিস্টেমের ভিউটি ব্যবহার করেন তবে আপনার সেই টেবিলগুলির মতোই Modify_date রয়েছে। আমার $ 0.02। চিয়ার্স,
-ম্যাটহে

1
@ জুনিয়রমেহে: ঠিক আছে - এখানে আমি সংযুক্ত পরামর্শের প্রতিক্রিয়াটি দিয়েছি - এটি উপরে যান! :-)
marc_s

1
আমি মনে করি @মার্ক_স এর একটি ভাল বক্তব্য রয়েছে: কেন এমন কিছু নেই তা অনেকে বুঝতে পারেন না sys.functions। আপনার কাছে sys.foreign_keysকোন sys.primary_keys। যাই হোক, আমি তোমার দিকে SQL সার্ভার সংস্করণ upcomming জন্য বলছি জিজ্ঞাসা Microsoft এর খোলা চ্যানেল ব্যবহার করার প্রস্তাব করছি এবং সুপারিশ নতুন বৈশিষ্ট্য connect.microsoft.com/SQLServer/Feedback আমি ইতিমধ্যে এ sys.functions সম্বন্ধে একটি প্রতিক্রিয়া যুক্ত করেছেন connect.microsoft.com/ এসকিউএল সার্ভার / প্রতিক্রিয়া / বিশদ / 1127920
জুনিয়র মেহে

উত্তর:


117

আমি দেখতে পাই ইউডিএফগুলি খুব সহজ এবং আমি এটি সর্বদা ব্যবহার করি।

আমি নিশ্চিত নই মাইক্রোসফ্টের যুক্তিটি এসকিউএল সার্ভার ২০০৫ (বা এসকিউএল সার্ভার ২০০৮, যতদূর আমি বলতে পারি) এর সমতুল্য একটি সিস ফাংশন অন্তর্ভুক্ত না করার জন্য, তবে এটি আপনার নিজের রোল করার পক্ষে যথেষ্ট সহজ:

CREATE VIEW my_sys_functions_equivalent
AS
SELECT *
FROM sys.objects
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

7
এটিতে সিএলআর ফাংশন প্রকারগুলিও অন্তর্ভুক্ত করা উচিত: 'এএফ', 'এফএস', এবং 'এফটি'। : এখানে দেখুন sys.objects "টাইপ" কলামে বিবরণ msdn.microsoft.com/en-us/library/ms190324.aspx
Triynko

4
"এএফ" এসকিউএল সার্ভারের অবজেক্ট মেটাডেটার ক্ষেত্রে "ফাংশন" হিসাবে বিবেচিত হয় না যদিও এটি AGGREGATE_FUNCTION এর জন্য দাঁড়িয়েছে। এটি আরও স্পষ্ট যে একটি সমষ্টি হ'ল অন্যান্য ব্যবহারকারী-সংজ্ঞায়িত ফাংশন থেকে আলাদা কোনও অবজেক্ট টাইপ যখন বিবেচনা করা হয় আপনি ক্রিয়েট ফাংশনের পরিবর্তে ক্রিয়েট অ্যাগ্রিগেট ব্যবহার করে একটি নতুন সমষ্টি তৈরি করেন। এসএসএমএসের মাধ্যমে এসএমএসের (এসএমওর মাধ্যমে) যে পাঁচটি ফাংশন টাইপ করা হয় সেগুলির জন্য আইফোন প্রকারের 'এফএন', 'আইএফ', 'টিএফ', 'এফএস' এবং 'এফটি' হ'ল ... ড্রপ ফাংশন কোড।
অরল্যান্ডো কোলামাটিও

37

ফাংশন তালিকাভুক্ত করার আরেকটি উপায় হল INFORMATION_SCHEMA দর্শনগুলি ব্যবহার করা।

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'

মাইক্রোসফ্ট ওয়েব সাইট অনুসারে "ইনফরমেশন স্কিমা ভিউগুলি এসকিউএল সার্ভার মেটাডেটার অভ্যন্তরীণ, সিস্টেম টেবিল-স্বতন্ত্র দৃষ্টিভঙ্গি সরবরাহ করে sche অন্য কথায়, এসকিউএল আপগ্রেড হওয়ার সাথে সাথে অন্তর্নিহিত সিস্টেমের টেবিলগুলি পরিবর্তিত হতে পারে, তবে মতামতগুলি এখনও একই থাকবে।


হ্যাঁ, ধন্যবাদ, আমি INFORMATION_SCHEMAও জানি know তবে দীর্ঘ সময় ব্যবহারকারী হিসাবে, sys.xxxx এখনও সহজ হয় - অনুস্মারকটির জন্য ধন্যবাদ!
marc_s

4
INFORMATION_SCHEMA দুর্দান্ত হবে তবে এটিতে বৃহত্তর প্রক্রিয়াগুলির সম্পূর্ণ অঙ্গ অন্তর্ভুক্ত নয় - যা আপনি যদি শরীরে সন্ধান করছেন তবে এটি অকেজো থেকে কম করে তোলে। আপনি যা জানেন না এটি এমন নয় যা আপনাকে সমস্যায় ফেলবে, তবে আপনি কী জানেন যে তাই ...
jmoreno

3
তথ্য_স্কেমা ভিউগুলি কিছু জিনিসের জন্য নির্ভরযোগ্য না হিসাবে স্পষ্টভাবে নথিভুক্ত হয়। যেমন থেকে "INFORMATION_SCHEMA মতামত ব্যবহার করবেন না একটি বস্তুর স্কিমা নির্ধারণ। শুধুমাত্র নির্ভরযোগ্য উপায় একটি বস্তুর স্কিমা sys.objects ক্যাটালগ ক্যোয়ারী দেখুন হয় এটি।" msdn.microsoft.com/en-us/library/ ms188757.aspx
ডেভিড আইসন

আমি এই উত্তরটি পছন্দ করি, কারণ INFORMATION_SCHEMAক্যোয়ারীটি খুব আকর্ষণীয় ফলাফলের মতো করে IS_DETERMINISTIC(যা আমি জানতে চেয়েছিলাম)।
টমসজ গ্যান্ডার

18

আপনি যখন কোনও ফাংশনের DROP স্ক্রিপ্ট করেন তখন এসএসএমএস যা উত্পন্ন করে তার জন্য এটি 2008 আর 2 তে বৈধ:

SELECT  *
FROM    sys.objects
WHERE   type IN (N'FN', N'IF', N'TF', N'FS', N'FT') ;

/*
From http://msdn.microsoft.com/en-us/library/ms177596.aspx:
 FN SQL_SCALAR_FUNCTION
 FS Assembly (CLR) scalar-function
 FT Assembly (CLR) table-valued function
 IF SQL_INLINE_TABLE_VALUED_FUNCTION
 TF SQL_TABLE_VALUED_FUNCTION
*/

1
আপনার সম্পাদনা পরামর্শটি একটি মন্তব্য হওয়া উচিত, সম্পাদনা নয়। "এএফ সমষ্টি ফাংশন" স্পষ্টতই এমএস ডকুমেন্টেশন (লিঙ্কটি দেখুন) থেকে এসেছে, সুতরাং এই পোস্টটি পুরোপুরি সঠিক দেখাচ্ছে। আপনি যদি একমত না হন: মন্তব্য করুন । সম্পাদনা নয়। যদি লোকেরা বারবার আপনার সম্পাদনার প্রত্যাখ্যাত এই একটি ইঙ্গিতটি হওয়া উচিত যে আপনি সম্ভবত কিছু ভুল করছ, এবং না অন্যান্য ব্যক্তি।
মার্টিন টর্নোইজ

@ কারপেটস্মোকার "এএফ" কে এসকিউএল সার্ভারের অবজেক্ট মেটাডেটার ক্ষেত্রে "ফাংশন" হিসাবে বিবেচনা করা হয় না যদিও এটি AGGREGATE_FUNCTION এর জন্য দাঁড়িয়েছে। এটি আরও পরিষ্কার যে একটি সমষ্টি হ'ল অন্যান্য ব্যবহারকারী-সংজ্ঞায়িত ফাংশন থেকে আলাদা কোনও অবজেক্ট টাইপ যখন বিবেচনা করা হয় আপনি ক্রিয়েট ফাংশনের পরিবর্তে ক্রিয়েট অ্যাগ্রিগেট ব্যবহার করে একটি নতুন সমষ্টি তৈরি করেন। এসএসএমএসের মাধ্যমে এসএমএসের (এসএমওর মাধ্যমে) যে পাঁচটি ফাংশন টাইপ করা হয় সেগুলির জন্য আইফোন প্রকারের 'এফএন', 'আইএফ', 'টিএফ', 'এফএস' এবং 'এফটি' হ'ল ... ড্রপ ফাংশন কোড। এসকিউএল সার্ভার ফাংশন ধরণের তালিকায় এএফের ভুল সংযোজনটি ফিরিয়ে আনতে আপনার আমার সম্পাদনাটি গ্রহণ করা উচিত।
অরল্যান্ডো কোলামাত্তেও

5

এটি খুব সামান্য আরও ভার্বোজ, তবে এটি ঠিক একই জিনিসটি করা উচিত:

select * from sys.objects where (type='TF' or type='FN')

আমি যতদূর দেখতে পাচ্ছি, এটি এসকিউএল সার্ভার ২০০৮ এও নয়।


1
হ্যাঁ, এটিই মূলত আমি একটি "sys_funitions" ভিউ তৈরির জন্য করেছি :-) কেবল ভাবছি কেন এটি বাক্সের বাইরে
পণ্যটিতে নেই

4

এটি নতুন কিছু যুক্ত করে না, তবে আমি নিম্নলিখিতটি মনে রাখা সহজ করে পেয়েছি:

select * from sys.objects where type_desc like '%fun%'

আপনি যদি কোড, এক্সএমএল বা ডেটা নমুনাগুলি পোস্ট করেন তবে দয়া করে টেক্সট সম্পাদকের সেই লাইনগুলি হাইলাইট { }করুন এবং এডিটর টুলবারের "কোড স্যাম্পল" বোতামটিতে ক্লিক করুন: সুন্দরভাবে ফর্ম্যাট করতে এবং সিনট্যাক্সটিকে হাইলাইট করুন!
marc_s

ধন্যবাদ, তবে আমি যতটা পারি "এট-হ্যাট-ওল" এড়াতে চেষ্টা sys.objectsকরি।
marc_s


2

ঘটনাচক্রে, আপনি কি টাইপ = 'এফএস' অন্তর্ভুক্ত করতে চান না?

name    type    type_desc
getNewsletterStats  FS  CLR_SCALAR_FUNCTION

সিস.অবজেক্টসের আইটেমটি আমার ইউডিএফ এর সাথে মিল রাখে যা বাহ্যিক ডিএলএল থেকে প্রাপ্ত


2

@ লূকএইচ এর উত্তর বাড়ানোর জন্য, ফাংশন সংজ্ঞাগুলিও ফিরিয়ে দিতে sys.sql_modulesটেবিলে একটি সংযুক্তি প্রয়োজন । সুতরাং এর জন্য ক্যোয়ারী হ'ল:

SELECT O.name as 'Function name', M.definition as 'Definition', O.object_id
FROM sys.objects as O INNER JOIN sys.sql_modules as M
    ON O.object_id = M.object_id
WHERE type IN ('FN', 'IF', 'TF')  -- scalar, inline table-valued, table-valued

যেখানে উপরেরগুলি যথাক্রমে ফাংশনটির নাম, এর সংজ্ঞা এবং অবজেক্ট সনাক্তকারী প্রদর্শন করে।


2

মালিক এবং রিটার্নের ধরণ সহ স্কেলার ফাংশনগুলির পূর্ণ বিবরণের জন্য:

SELECT f.name, s.name AS owner, t.name as dataType, p.max_length, p.precision, p.scale, m.definition
FROM sys.objects f
JOIN sys.schemas s on s.schema_id = f.schema_id
JOIN sys.parameters p on p.object_id = f.object_id AND p.parameter_id = 0
JOIN sys.types t ON t.system_type_id = p.system_type_id 
JOIN sys.sql_modules as m ON m.object_id = f.object_id
WHERE type='FN';

0

SQL 2000 অবজেক্ট নামের জন্য নির্দিষ্ট, সামান্য সামঞ্জস্য:

SELECT *
FROM sysobjects
WHERE type IN ('FN', 'IF', 'TF')

অথবা

SELECT *
FROM dbo.sysobjects
WHERE type IN ('FN', 'IF', 'TF')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.