sql >> Database teknologi >  >> RDS >> Sqlserver

Returner kolonneoplysninger for en lagret procedure i SQL Server:sp_sproc_columns

I SQL Server, sp_sproc_columns systemlagret procedure giver dig mulighed for at få kolonneoplysninger for en given lagret procedure eller brugerdefineret funktion i det aktuelle system.

Det svarer til SQLProcedureColumns i ODBC.

Syntaks

Syntaksen ser sådan ud:

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

Alle argumenter er valgfrie. Se Microsoft-dokumentationen for en detaljeret forklaring af disse.

Eksempel 1 – Angiv ingen argumenter

Du kan udføre den lagrede procedure uden at angive nogen argumenter. Sådan:

EXEC sp_sproc_columns

Eller endda sådan her:

sp_sproc_columns

Dette returnerer alle lagrede procedurer og brugerdefinerede funktioner i den aktuelle database. Når jeg kører det mod WideWorldImporters-eksempeldatabasen, får jeg 9077 rækker. I det næste eksempel vil jeg indsnævre det til kun én.

Eksempel 2 – Angiv alle argumenter

Sådan ser det ud, hvis du inkluderer alle argumenter.

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

Resultat (ved hjælp af lodret output):

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

I dette tilfælde returnerer jeg oplysninger om returværdien af ​​ GetCityUpdates gemt procedure.

Eksempel 3 – Angiv kun den lagrede procedure (eller funktion)

I stedet for at inkludere alle argumenter, kan du kun inkludere navnet på den lagrede procedure. Men hvis du ikke angiver @column_name , hvis du gør dette, returneres en række for hver kolonne.

Du kan også gøre din kode mere kortfattet ved at udelade argumentnavnet (dvs. kun inkludere dets værdi).

EXEC sp_sproc_columns GetCityUpdates;

Resultat (ved hjælp af lodret output):

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

Eksempel 4 – Andre variationer

Du kan give enhver variation af argumenter for at returnere netop de oplysninger, du har brug for.

For eksempel kan du returnere alle oplysninger fra en bestemt procedureejer:

EXEC sp_sproc_columns @procedure_owner = 'Integration'

Eller du kan få information om alle returværdier fra alle procedurer og brugerdefinerede funktioner:

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Du kan selvfølgelig altid inkludere procedurekvalifikationen, hvis du ønsker det. I SQL Server repræsenterer denne parameter databasenavnet. I nogle produkter repræsenterer det servernavnet på tabellens databasemiljø.

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

Eksempel 5 – Jokertegn

@fUsePattern argument giver dig mulighed for at angive, om understregning (_ ), procent (% ), og parentes ([ ] )-tegn fortolkes som jokertegn.

For eksempel vil kørsel af følgende kode returnere alle procedurer og brugerdefinerede funktioner, der starter med Hent .

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

Så i mit tilfælde returnerede dette procedurer såsom GetCityUpdates, GetCustomerUpdates, GetMovementUpdates osv.

Hvis jeg deaktiverer jokertegn:

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

Jeg får ingen resultater.


  1. Undersøgelse af effektiviteten af ​​en adhoc-arbejdsbelastning

  2. Opdater med Join-forespørgsel i Oracle

  3. Inkluder kolonnenavne i SQLite-forespørgselsresultater

  4. Korrekthed og begrænsninger