Trong SQL Server, sp_sproc_columns
thủ tục được lưu trữ hệ thống cho phép bạn lấy thông tin cột cho một thủ tục được lưu trữ nhất định hoặc chức năng do người dùng xác định trong hệ thống hiện tại.
Nó tương đương với SQLProcedureColumns trong ODBC.
Cú pháp
Cú pháp như sau:
sp_sproc_columns [[@procedure_name = ] 'name'] [ , [@procedure_owner = ] 'owner'] [ , [@procedure_qualifier = ] 'qualifier'] [ , [@column_name = ] 'column_name'] [ , [@ODBCVer = ] 'ODBCVer'] [ , [@fUsePattern = ] 'fUsePattern']
Tất cả các đối số là tùy chọn. Xem tài liệu của Microsoft để biết giải thích chi tiết về những điều này.
Ví dụ 1 - Chỉ định Không có Đối số
Bạn có thể thực hiện thủ tục được lưu trữ mà không cần cung cấp bất kỳ đối số nào. Như thế này:
EXEC sp_sproc_columns
Hoặc thậm chí như thế này:
sp_sproc_columns
Điều này trả về tất cả các thủ tục được lưu trữ và các chức năng do người dùng xác định trong cơ sở dữ liệu hiện tại. Khi tôi chạy điều đó với cơ sở dữ liệu mẫu WideWorldImporters, tôi nhận được 9077 hàng. Trong ví dụ tiếp theo, tôi sẽ thu hẹp nó xuống chỉ một.
Ví dụ 2 - Chỉ định Tất cả Đối số
Đây là giao diện nếu bạn bao gồm tất cả các đối số.
EXEC sp_sproc_columns @procedure_name = 'GetCityUpdates', @procedure_owner = 'Integration', @procedure_qualifier = 'WideWorldImporters', @column_name = '@RETURN_VALUE', @ODBCVer = 2, @fUsePattern = 1;
Kết quả (sử dụng đầu ra dọc):
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
Trong trường hợp này, tôi trả lại thông tin về giá trị trả lại của GetCityUpdates thủ tục được lưu trữ.
Ví dụ 3 - Chỉ Chỉ định Thủ tục được Lưu trữ (hoặc Chức năng)
Thay vì bao gồm tất cả các đối số, bạn có thể chỉ bao gồm tên của thủ tục được lưu trữ. Tuy nhiên, nếu bạn không chỉ định @column_name
, làm điều này sẽ trả về một hàng cho mỗi cột.
Ngoài ra, bạn có thể làm cho mã của mình ngắn gọn hơn bằng cách bỏ qua tên đối số (tức là chỉ bao gồm giá trị của nó).
EXEC sp_sproc_columns GetCityUpdates;
Kết quả (sử dụng đầu ra dọc):
-[ 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
Ví dụ 4 - Các biến thể khác
Bạn có thể cung cấp bất kỳ biến thể nào của các đối số để chỉ trả về thông tin bạn yêu cầu.
Ví dụ:bạn có thể trả lại tất cả thông tin từ một chủ sở hữu thủ tục cụ thể:
EXEC sp_sproc_columns @procedure_owner = 'Integration'
Hoặc bạn có thể nhận thông tin về tất cả các giá trị trả về từ tất cả các thủ tục và các hàm do người dùng xác định:
EXEC sp_sproc_columns @column_name = '@RETURN_VALUE'
Tất nhiên, bạn luôn có thể bao gồm bộ định lượng thủ tục nếu bạn muốn. Trong SQL Server, tham số này đại diện cho tên cơ sở dữ liệu. Trong một số sản phẩm, nó đại diện cho tên máy chủ của môi trường cơ sở dữ liệu của bảng.
EXEC sp_sproc_columns @column_name = '@RETURN_VALUE', @procedure_qualifier = 'WideWorldImporters';
Ví dụ 5 - Các ký tự đại diện
@fUsePattern
đối số cho phép bạn chỉ định xem có gạch dưới hay không (_
), phần trăm (%
) và dấu ngoặc ([
]
) ký tự được hiểu là ký tự đại diện.
Ví dụ:chạy đoạn mã sau sẽ trả về tất cả các thủ tục và hàm do người dùng xác định bắt đầu bằng Get .
EXEC sp_sproc_columns @procedure_name = 'Get%', @fUsePattern = 1;
Vì vậy, trong trường hợp của tôi, các thủ tục được trả lại này như GetCityUpdates, GetCustomerUpdates, GetMovementUpdates, v.v.
Nếu tôi tắt các ký tự đại diện:
EXEC sp_sproc_columns @procedure_name = 'Get%', @fUsePattern = 0;
Tôi không nhận được kết quả.