In SQL Server sind die sp_sproc_columns
system gespeicherte Prozedur ermöglicht es Ihnen, Spalteninformationen für eine bestimmte gespeicherte Prozedur oder benutzerdefinierte Funktion im aktuellen System abzurufen.
Es entspricht SQLProcedureColumns in ODBC.
Syntax
Die Syntax sieht so aus:
sp_sproc_columns [[@procedure_name = ] 'name'] [ , [@procedure_owner = ] 'owner'] [ , [@procedure_qualifier = ] 'qualifier'] [ , [@column_name = ] 'column_name'] [ , [@ODBCVer = ] 'ODBCVer'] [ , [@fUsePattern = ] 'fUsePattern']
Alle Argumente sind optional. Eine detaillierte Erklärung dazu finden Sie in der Microsoft-Dokumentation.
Beispiel 1 – Keine Argumente angeben
Sie können die gespeicherte Prozedur ausführen, ohne Argumente anzugeben. So:
EXEC sp_sproc_columns
Oder sogar so:
sp_sproc_columns
Dadurch werden alle gespeicherten Prozeduren und benutzerdefinierten Funktionen in der aktuellen Datenbank zurückgegeben. Wenn ich das mit der Beispieldatenbank WideWorldImporters ausführe, erhalte ich 9077 Zeilen. Im nächsten Beispiel schränke ich es auf nur eine ein.
Beispiel 2 – Alle Argumente angeben
So sieht es aus, wenn Sie alle Argumente einbeziehen.
EXEC sp_sproc_columns @procedure_name = 'GetCityUpdates', @procedure_owner = 'Integration', @procedure_qualifier = 'WideWorldImporters', @column_name = '@RETURN_VALUE', @ODBCVer = 2, @fUsePattern = 1;
Ergebnis (bei vertikaler Ausgabe):
PROCEDURE_QUALIFIER | WideWorldImporters PROCEDURE_OWNER | Integration PROCEDURE_NAME | GetCityUpdates;1 COLUMN_NAME | @RETURN_VALUE COLUMN_TYPE | 5 DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 0 IS_NULLABLE | NO SS_DATA_TYPE | 56
In diesem Fall gebe ich Informationen über den Rückgabewert von GetCityUpdates zurück gespeicherte Prozedur.
Beispiel 3 – Geben Sie nur die gespeicherte Prozedur (oder Funktion) an
Anstatt alle Argumente einzuschließen, können Sie nur den Namen der gespeicherten Prozedur einschließen. Wenn Sie jedoch @column_name
nicht angeben , wird dadurch eine Zeile für jede Spalte zurückgegeben.
Außerdem können Sie Ihren Code prägnanter gestalten, indem Sie den Argumentnamen weglassen (d. h. nur seinen Wert einbeziehen).
EXEC sp_sproc_columns GetCityUpdates;
Ergebnis (bei vertikaler Ausgabe):
-[ RECORD 1 ]------------------------- PROCEDURE_QUALIFIER | WideWorldImporters PROCEDURE_OWNER | Integration PROCEDURE_NAME | GetCityUpdates;1 COLUMN_NAME | @RETURN_VALUE COLUMN_TYPE | 5 DATA_TYPE | 4 TYPE_NAME | int PRECISION | 10 LENGTH | 4 SCALE | 0 RADIX | 10 NULLABLE | 0 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | 4 SQL_DATETIME_SUB | NULL CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 0 IS_NULLABLE | NO SS_DATA_TYPE | 56 -[ RECORD 2 ]------------------------- PROCEDURE_QUALIFIER | WideWorldImporters PROCEDURE_OWNER | Integration PROCEDURE_NAME | GetCityUpdates;1 COLUMN_NAME | @LastCutoff COLUMN_TYPE | 1 DATA_TYPE | -9 TYPE_NAME | datetime2 PRECISION | 27 LENGTH | 54 SCALE | 7 RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | 3 CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 1 IS_NULLABLE | YES SS_DATA_TYPE | 0 -[ RECORD 3 ]------------------------- PROCEDURE_QUALIFIER | WideWorldImporters PROCEDURE_OWNER | Integration PROCEDURE_NAME | GetCityUpdates;1 COLUMN_NAME | @NewCutoff COLUMN_TYPE | 1 DATA_TYPE | -9 TYPE_NAME | datetime2 PRECISION | 27 LENGTH | 54 SCALE | 7 RADIX | NULL NULLABLE | 1 REMARKS | NULL COLUMN_DEF | NULL SQL_DATA_TYPE | -9 SQL_DATETIME_SUB | 3 CHAR_OCTET_LENGTH | NULL ORDINAL_POSITION | 2 IS_NULLABLE | YES SS_DATA_TYPE | 0
Beispiel 4 – Andere Variationen
Sie können eine beliebige Variation von Argumenten angeben, um genau die Informationen zurückzugeben, die Sie benötigen.
Beispielsweise könnten Sie alle Informationen von einem bestimmten Prozedurbesitzer zurückgeben:
EXEC sp_sproc_columns @procedure_owner = 'Integration'
Oder Sie könnten Informationen über alle Rückgabewerte von allen Prozeduren und benutzerdefinierten Funktionen erhalten:
EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'
Natürlich können Sie den Verfahrenskennzeichner immer einschließen, wenn Sie dies wünschen. In SQL Server stellt dieser Parameter den Datenbanknamen dar. In einigen Produkten stellt es den Servernamen der Datenbankumgebung der Tabelle dar.
EXEC sp_sproc_columns @column_name = '@RETURN_VALUE', @procedure_qualifier = 'WideWorldImporters';
Beispiel 5 – Platzhalterzeichen
Das @fUsePattern
Mit dem Argument können Sie angeben, ob ein Unterstrich (_
), Prozent (%
) und Klammer ([
]
) Zeichen werden als Platzhalterzeichen interpretiert.
Wenn Sie beispielsweise den folgenden Code ausführen, werden alle Prozeduren und benutzerdefinierten Funktionen zurückgegeben, die mit Get beginnen .
EXEC sp_sproc_columns @procedure_name = 'Get%', @fUsePattern = 1;
In meinem Fall wurden also Prozeduren wie GetCityUpdates, GetCustomerUpdates, GetMovementUpdates usw. zurückgegeben.
Wenn ich Platzhalterzeichen deaktiviere:
EXEC sp_sproc_columns @procedure_name = 'Get%', @fUsePattern = 0;
Ich bekomme keine Ergebnisse.