Frage

SQL Server 2005 hat großen sys.XXX Blick auf dem Systemkatalog, die ich häufig verwenden.

Was stolpert mich ist dies: warum gibt es eine „sys.procedures“ -Ansicht Informationen über Ihre gespeicherten Prozeduren, um zu sehen, aber es gibt keine „sys.functions“ Ansicht das gleiche für Ihre gespeicherten Funktionen zu sehen

Hat jemand nicht gespeicherte Funktionen verwenden? Ich finde sie sehr praktisch für z.B. Berechnete Spalten und so!

Gibt es einen bestimmten Grund sys.functions fehlt, oder ist es nur etwas, das die sys Katalogansichten setzt in nicht wichtig genug, um in Betracht gezogen ?? Ist es in SQL Server verfügbar 2008 ??

Cheers, Marc

War es hilfreich?

Lösung

Ich finde UDF sehr handlich ist und ich benutze sie die ganze Zeit.

Ich bin nicht sicher, was Microsofts Begründung ist für keinen sys.functions äquivalent in SQL Server 2005 (oder SQL Server 2008, soweit ich das beurteilen kann), einschließlich, aber es ist leicht genug, um rollen Sie Ihre eigene:

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

Andere Tipps

Eine andere Möglichkeit, Funktionen zur Liste ist die Verwendung von INFORMATION_SCHEMA Ansichten zu machen.

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

Nach der Microsoft-Website „Information-Schema-Ansichten bieten eine interne Systemtabelle unabhängige Sicht auf die SQL Server-Metadaten. Informationen Schemaansichten ermöglichen Anwendungen korrekt zu arbeiten, obwohl erhebliche Änderungen an den zugrunde liegenden Systemtabellen gemacht worden“. Mit anderen Worten, wird die zugrunde liegenden Systemtabellen als SQL ändern aufgerüstet, aber die Aussicht sollte immer noch das gleiche.

Dies gilt in 2008 R2 pro was SSMS generiert, wenn Sie das Skript eines Tropfens einer Funktion:

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
*/

Es ist sehr leicht ausführliches, aber dies sollte genau das gleiche tun:

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

Soweit ich sehen kann, ist es nicht in SQL Server 2008 auch nicht.

Das ist nichts Neues hinzuzufügen, aber ich fand einfacher folgendes zu beachten:

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

versuchen Sie dies:

SELECT * FROM sys.objects
where type_desc = 'SQL_SCALAR_FUNCTION'

übrigens, würden Sie nicht wollen Typ umfassen = 'FS'?

name    type    type_desc
getNewsletterStats  FS  CLR_SCALAR_FUNCTION

das ist, was das Produkt in der sys.objects mit für meine UDF entspricht, die von einem externen DLL abgeleitet ist

Zur Erweiterung auf @ LukeH Antwort, die Funktionsdefinitionen zurückkehren und ein an dem sys.sql_modules Tisch sitzen erfordert. So ist die Abfrage hierfür lautet:

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

, wo der oben zeigt den Name der Funktion, die Definition und die Objektkennung ist.

Für eine vollständigere Beschreibung der skalare Funktionen einschließlich Inhaber und Rückgabetyp:

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';

SQL 2000 spezifische, leichte Anpassung für die Objektname:

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

oder

SELECT *
FROM dbo.sysobjects
WHERE type IN ('FN', 'IF', 'TF')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top