Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Spalteninformationen für eine gespeicherte Prozedur in SQL Server zurückgeben:sp_sproc_columns

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.