sql >> Database >  >> RDS >> Sqlserver

Kolominformatie retourneren voor een opgeslagen procedure in SQL Server:sp_sproc_columns

In SQL Server, de sp_sproc_columns Op het systeem opgeslagen procedure stelt u in staat kolominformatie op te halen voor een bepaalde opgeslagen procedure of door de gebruiker gedefinieerde functie in het huidige systeem.

Het is gelijk aan SQLProcedureColumns in ODBC.

Syntaxis

De syntaxis gaat als volgt:

sp_sproc_columns [[@procedure_name = ] 'name']   
    [ , [@procedure_owner = ] 'owner']   
    [ , [@procedure_qualifier = ] 'qualifier']   
    [ , [@column_name = ] 'column_name']  
    [ , [@ODBCVer = ] 'ODBCVer']  
    [ , [@fUsePattern = ] 'fUsePattern']

Alle argumenten zijn optioneel. Zie de Microsoft-documentatie voor een gedetailleerde uitleg hiervan.

Voorbeeld 1 – Specificeer geen argumenten

U kunt de opgeslagen procedure uitvoeren zonder argumenten op te geven. Zoals dit:

EXEC sp_sproc_columns

Of zelfs zo:

sp_sproc_columns

Hiermee worden alle opgeslagen procedures en door de gebruiker gedefinieerde functies in de huidige database geretourneerd. Wanneer ik dat tegen de WideWorldImporters-voorbeelddatabase uitvoer, krijg ik 9077 rijen. In het volgende voorbeeld zal ik het beperken tot slechts één.

Voorbeeld 2 – Specificeer alle argumenten

Zo ziet het eruit als je alle argumenten opneemt.

EXEC sp_sproc_columns 
  @procedure_name = 'GetCityUpdates',
  @procedure_owner = 'Integration',
  @procedure_qualifier = 'WideWorldImporters',
  @column_name = '@RETURN_VALUE',
  @ODBCVer = 2,
  @fUsePattern = 1;

Resultaat (met verticale uitvoer):

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 dit geval retourneer ik informatie over de retourwaarde van de GetCityUpdates opgeslagen procedure.

Voorbeeld 3 – Specificeer alleen de opgeslagen procedure (of functie)

In plaats van alle argumenten op te nemen, kunt u alleen de naam van de opgeslagen procedure opnemen. Als u de @column_name . echter niet opgeeft, , als u dit doet, wordt voor elke kolom een ​​rij geretourneerd.

U kunt uw code ook beknopter maken door de argumentnaam weg te laten (d.w.z. alleen de waarde ervan op te nemen).

EXEC sp_sproc_columns GetCityUpdates;

Resultaat (met verticale uitvoer):

-[ 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

Voorbeeld 4 – Andere variaties

U kunt elke variatie van argumenten opgeven om precies de informatie terug te geven die u nodig hebt.

U kunt bijvoorbeeld alle informatie van een bepaalde procedure-eigenaar retourneren:

EXEC sp_sproc_columns @procedure_owner = 'Integration'

Of u kunt informatie krijgen over alle retourwaarden van alle procedures en door de gebruiker gedefinieerde functies:

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Natuurlijk kunt u desgewenst altijd de procedurekwalificatie opnemen. In SQL Server vertegenwoordigt deze parameter de databasenaam. In sommige producten vertegenwoordigt het de servernaam van de databaseomgeving van de tabel.

EXEC sp_sproc_columns 
  @column_name = '@RETURN_VALUE',
  @procedure_qualifier = 'WideWorldImporters';

Voorbeeld 5 – Jokertekens

De @fUsePattern argument stelt u in staat om al dan niet onderstrepingstekens (_ ), procent (% ), en haakje ([ ] ) tekens worden geïnterpreteerd als jokertekens.

Als u bijvoorbeeld de volgende code uitvoert, worden alle procedures en door de gebruiker gedefinieerde functies geretourneerd die beginnen met Get .

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 1;

Dus in mijn geval leverde dit procedures op zoals GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, enz.

Als ik jokertekens uitschakel:

EXEC sp_sproc_columns 
  @procedure_name = 'Get%',
  @fUsePattern = 0;

Ik krijg geen resultaten.


  1. Installeer Oracle SQL Developer 19.1 op Mac OS met JDK 8

  2. Code om SQL-scripts te valideren

  3. Star Trek 3D-schaakgegevensmodel

  4. Hoe maak je een tijdelijke functie in PostgreSQL?