Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan Prosedur &Fungsi Tersimpan dalam Database SQL Server:RUTIN (Contoh T-SQL)

Di SQL Server, Anda dapat menggunakan ROUTINES Transact-SQL tampilan skema informasi sistem untuk mengembalikan daftar prosedur dan fungsi tersimpan dalam database saat ini.

Lebih khusus lagi, ini mengembalikan daftar semua prosedur dan fungsi tersimpan yang dapat diakses oleh pengguna saat ini di database saat ini.

Anda juga dapat menggunakan ROUTINES hanya untuk mengembalikan informasi tentang prosedur atau fungsi tertentu jika diperlukan.

Untuk menggunakan tampilan ini, gunakan nama lengkap INFORMATION_SCHEMA.ROUTINES .

Contoh 1 – Mengembalikan Semua Rutinitas

Berikut adalah contoh cepat yang mengembalikan semua prosedur dan fungsi tersimpan dalam database saat ini (yang dapat diakses oleh pengguna saat ini).

USE Music;
SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES;

Hasil:

Changed database context to 'Music'.
+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | ISOweek              | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre    | FUNCTION       |
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(4 rows affected)

Hasil ini menunjukkan kepada saya bahwa ada dua fungsi dan dua prosedur yang dapat saya akses di database "Musik".

Tampilan mengembalikan cukup banyak kolom, jadi dalam contoh ini saya mempersempit kolom menjadi hanya empat.

Contoh 2 – Temukan Rutinitas Tertentu

Anda juga dapat mempersempit hasil ke prosedur atau fungsi tertentu jika Anda mau.

Dalam contoh ini saya menyertakan semua kolom. Saya menggunakan output vertikal sehingga Anda tidak dipaksa untuk menggulir secara horizontal.

SELECT * 
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';

Hasil (menggunakan keluaran vertikal):

-[ RECORD 1 ]-------------------------
SPECIFIC_CATALOG         | Music
SPECIFIC_SCHEMA          | dbo
SPECIFIC_NAME            | uspGetAlbumsByArtist
ROUTINE_CATALOG          | Music
ROUTINE_SCHEMA           | dbo
ROUTINE_NAME             | uspGetAlbumsByArtist
ROUTINE_TYPE             | PROCEDURE
MODULE_CATALOG           | NULL
MODULE_SCHEMA            | NULL
MODULE_NAME              | NULL
UDT_CATALOG              | NULL
UDT_SCHEMA               | NULL
UDT_NAME                 | NULL
DATA_TYPE                | NULL
CHARACTER_MAXIMUM_LENGTH | NULL
CHARACTER_OCTET_LENGTH   | NULL
COLLATION_CATALOG        | NULL
COLLATION_SCHEMA         | NULL
COLLATION_NAME           | NULL
CHARACTER_SET_CATALOG    | NULL
CHARACTER_SET_SCHEMA     | NULL
CHARACTER_SET_NAME       | NULL
NUMERIC_PRECISION        | NULL
NUMERIC_PRECISION_RADIX  | NULL
NUMERIC_SCALE            | NULL
DATETIME_PRECISION       | NULL
INTERVAL_TYPE            | NULL
INTERVAL_PRECISION       | NULL
TYPE_UDT_CATALOG         | NULL
TYPE_UDT_SCHEMA          | NULL
TYPE_UDT_NAME            | NULL
SCOPE_CATALOG            | NULL
SCOPE_SCHEMA             | NULL
SCOPE_NAME               | NULL
MAXIMUM_CARDINALITY      | NULL
DTD_IDENTIFIER           | NULL
ROUTINE_BODY             | SQL
ROUTINE_DEFINITION       | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS
SELECT AlbumName
FROM [fdec67e6a28d].[Music].[dbo].[Albums]
WHERE ArtistId = @ArtistId
EXTERNAL_NAME            | NULL
EXTERNAL_LANGUAGE        | NULL
PARAMETER_STYLE          | NULL
IS_DETERMINISTIC         | NO
SQL_DATA_ACCESS          | MODIFIES
IS_NULL_CALL             | NULL
SQL_PATH                 | NULL
SCHEMA_LEVEL_ROUTINE     | YES
MAX_DYNAMIC_RESULT_SETS  | -1
IS_USER_DEFINED_CAST     | NO
IS_IMPLICITLY_INVOCABLE  | NO
CREATED                  | 2019-10-26 01:11:30.677
LAST_ALTERED             | 2019-10-26 03:50:42.527
(1 row affected)

Anda akan melihat bahwa banyak kolom memiliki nilai nol. Dokumentasi Microsoft untuk tampilan ini menyatakan bahwa banyak dari kolom ini selalu mengembalikan NULL . Itu juga menyatakan bahwa beberapa di antaranya dicadangkan untuk penggunaan di masa mendatang.

Contoh 3 – Hanya Prosedur Pengembalian

Anda dapat menggunakan WHERE klausa untuk memfilter hasil ke prosedur tersimpan atau fungsi saja.

Contoh ini mengembalikan prosedur tersimpan saja.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE';

Hasil:

+-------------------+------------------+----------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME         | ROUTINE_TYPE   |
|-------------------+------------------+----------------------+----------------|
| Music             | dbo              | spAlbumsFromArtist   | PROCEDURE      |
| Music             | dbo              | uspGetAlbumsByArtist | PROCEDURE      |
+-------------------+------------------+----------------------+----------------+
(2 rows affected)

Contoh 4 – Kembalikan Fungsi Saja

Contoh ini mengembalikan fungsi saja.

SELECT 
  ROUTINE_CATALOG,
  ROUTINE_SCHEMA,
  ROUTINE_NAME,
  ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION';

Hasil:

+-------------------+------------------+-------------------+----------------+
| ROUTINE_CATALOG   | ROUTINE_SCHEMA   | ROUTINE_NAME      | ROUTINE_TYPE   |
|-------------------+------------------+-------------------+----------------|
| Music             | dbo              | ISOweek           | FUNCTION       |
| Music             | dbo              | ufn_AlbumsByGenre | FUNCTION       |
+-------------------+------------------+-------------------+----------------+
(2 rows affected)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di SQL Server, bagaimana saya bisa mengunci satu baris dengan cara yang mirip dengan Oracle SELECT FOR UPDATE WAIT?

  2. 7 Fakta Tentang Sinonim SQL Server Yang Harus Anda Ketahui

  3. Menyiapkan dan Mengonfigurasi Grup Ketersediaan Selalu Aktif di SQL Server

  4. SQLServer vs StateServer untuk Kinerja Status Sesi ASP.NET

  5. Bagaimana DENSE_RANK() Bekerja di SQL Server