2013-03-14 14 views
23

Veritabanı kataloğundaki tüm kullanıcı tanımlı işlevler için işlev tanımlarını veren bir SQL sorgusu arıyorum.Bir veritabanındaki tüm kullanıcı tanımlı işlevlerin SQL listesi

Ben kadarıyla

SELECT OBJECT_DEFINITION (OBJECT_ID(N'dbo.UserFunctionName')) AS [Object Definition] 

ve

SELECT ROUTINE_NAME FROM information_schema.routines WHERE routine_type = 'function' 

olarak bulduk ama aklıma ya OBJECT_ID için ROUTINE_NAME listesini beslemek için bir yol bulmak mümkün değil. Buradaki amaç, tam bir SQL prosedürü veya amaçlanan yardımcı program gibi bir şey daha kolaysa, veritabanı değişikliği analizi için bir veritabanında kullanıcı tanımlı işlev tanımlarının aranabilir bir metnidir, bunu yapacağım ve yayınlayacağım.

+1

olası yinelenen (http://stackoverflow.com/questions/54482/nasıl yapılır-i-liste-kullanıcı-tanımlı-türleri-in-a-sql-sunucu-veritabanı) – Kermit

+4

@AarolamaBluenk bu sorunun hiç bir kopyası değildir. Bu UDT'leri ve tanımlarını arıyor, udt değil ... – rsbarro

cevap

37
SELECT name, definition, type_desc 
    FROM sys.sql_modules m 
INNER JOIN sys.objects o 
     ON m.object_id=o.object_id 
WHERE type_desc like '%function%' 
+0

Bu cevap, gerekirse diğer bilgi sütunlarının daha kolay eklenmesini sağlamak için daha iyidir. Geoff'ın CTE'si de tasarıya çok yakışıyor, CTE'lerin diğer durumlar için bildiğim bir yöntem olduğunu düşünüyorum. Sys.sql_modules ve onun object_id anahtar referansını (RandomUs1r) bildiğim bir IN (SELECT SUBQUERY), benim amacım için en iyisidir. – stackuser83

4

Sen bir CTE kullanabilirsiniz: [? Bir SQL Server veritabanı kullanıcı tanımlı türlerini listelemek nasıl]

with functions(routine_name) as 
    (SELECT ROUTINE_NAME FROM information_schema.routines WHERE routine_type = 'function') 
select 
    OBJECT_DEFINITION(OBJECT_ID(routine_name)) AS [Object Definition] 
from 
    functions 
1
SELECT O.name, M.definition, O.type_desc, O.type 
FROM sys.sql_modules M 
INNER JOIN sys.objects O ON M.object_id=O.object_id 
WHERE O.type IN ('IF','TF','FN') 
+0

kodunu açıklayın – tinamou

+1

Merhaba tinamou, Burada, işlevin adını, tanımını ve kullanıcı tanımlı fonksiyonun Türünü getiriyoruz. , kullanıcı tanımlı fonksiyon Tekerlekli fonksiyon (IF) 'ya skalar fonksiyonu (FN) ya da tablo değerli fonksiyonu (TF) olabilir. –

İlgili konular