sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera kolumninformation för en lagrad procedur i SQL Server:sp_sproc_columns

I SQL Server, sp_sproc_columns systemlagrad procedur gör att du kan få kolumninformation för en given lagrad procedur eller användardefinierad funktion i det aktuella systemet.

Det motsvarar SQLProcedureColumns i ODBC.

Syntax

Syntaxen ser ut så här:

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

Alla argument är valfria. Se Microsofts dokumentation för en detaljerad förklaring av dessa.

Exempel 1 – Ange inga argument

Du kan köra den lagrade proceduren utan att ange några argument. Så här:

EXEC sp_sproc_columns

Eller till och med så här:

sp_sproc_columns

Detta returnerar alla lagrade procedurer och användardefinierade funktioner i den aktuella databasen. När jag kör det mot WideWorldImporters exempeldatabasen får jag 9077 rader. I nästa exempel kommer jag att begränsa det till bara ett.

Exempel 2 – Ange alla argument

Så här ser det ut om du inkluderar alla argument.

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

Resultat (med vertikal utdata):

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 det här fallet returnerar jag information om returvärdet för GetCityUpdates lagrad procedur.

Exempel 3 – Ange bara den lagrade proceduren (eller funktionen)

Istället för att inkludera alla argument kan du bara inkludera namnet på den lagrade proceduren. Men om du inte anger @column_name Om du gör detta returneras en rad för varje kolumn.

Du kan också göra din kod mer kortfattad genom att utelämna argumentnamnet (dvs. endast inkludera dess värde).

EXEC sp_sproc_columns GetCityUpdates;

Resultat (med vertikal utdata):

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

Exempel 4 – Andra varianter

Du kan tillhandahålla alla varianter av argument för att returnera precis den information du behöver.

Du kan till exempel returnera all information från en viss procedurägare:

EXEC sp_sproc_columns @procedure_owner = 'Integration'

Eller så kan du få information om alla returvärden från alla procedurer och användardefinierade funktioner:

EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'

Naturligtvis kan du alltid inkludera procedurkvalificeringen om du vill. I SQL Server representerar denna parameter databasnamnet. I vissa produkter representerar det servernamnet för tabellens databasmiljö.

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

Exempel 5 – Jokertecken

@fUsePattern argument gör att du kan ange om understreck (_ ), procent (% ), och parentes ([ ] )-tecken tolkas som jokertecken.

Om du till exempel kör följande kod returneras alla procedurer och användardefinierade funktioner som börjar med Hämta .

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

Så i mitt fall returnerade detta procedurer som GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, etc.

Om jag inaktiverar jokertecken:

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

Jag får inga resultat.


  1. SQL-fel:ORA-00942-tabell eller vy finns inte

  2. 'datetime2'-fel när entitetsramverket används i VS 2010 .net 4.0

  3. Returnera ISO-veckonummer från ett datum i SQL Server (T-SQL)

  4. =) Operatör för nybörjare