是否可以从SQL Server中的存储过程中检索选定列的数据类型。
例如
BindingSource
需要按以下方式检索。
ListChanged
答案 0 :(得分:4)
这是SP,因此您可以使用sp_describe_first_result_set (Transact-SQL):
EXEC sys.sp_describe_first_result_set N'EXEC [Product].[usp_ProductType_Get];';
如果只需要特定的列,则需要将EXEC
中的数据插入临时表中,然后选择这些表。 (将很快发布操作方法)。
编辑:使用链接的文档设计临时表:
CREATE TABLE #FirstResultSet (is_hidden bit NOT NULL,
column_ordinal int NOT NULL,
name sysname NULL,
is_nullable bit NOT NULL,
system_type_id int NOT NULL,
system_type_name nvarchar(256) NULL,
max_length smallint NOT NULL,
precision tinyint NOT NULL,
scale tinyint NOT NULL,
collation_name sysname NULL,
user_type_id int NULL,
user_type_database sysname NULL,
user_type_schema sysname NULL,
user_type_name sysname NULL,
assembly_qualified_type_name nvarchar(4000),
xml_collection_id int NULL,
xml_collection_database sysname NULL,
xml_collection_schema sysname NULL,
xml_collection_name sysname NULL,
is_xml_document bit NOT NULL,
is_case_sensitive bit NOT NULL,
is_fixed_length_clr_type bit NOT NULL,
source_server sysname NULL,
source_database sysname NULL,
source_schema sysname NULL,
source_table sysname NULL,
source_column sysname NULL,
is_identity_column bit NULL,
is_part_of_unique_key bit NULL,
is_updateable bit NULL,
is_computed_column bit NULL,
is_sparse_column_set bit NULL,
ordinal_in_order_by_list smallint NULL,
order_by_list_length smallint NULL,
order_by_is_descending smallint NULL,
tds_type_id int NOT NULL,
tds_length int NOT NULL,
tds_collation_id int NULL,
tds_collation_sort_id tinyint NULL);
INSERT INTO #FirstResultSet
EXEC sys.sp_describe_first_result_set N'SELECT 1 AS one;';
SELECT [name] AS [Column],
system_type_name AS DataType
FROM #FirstResultSet;
DROP TABLE #FirstResultSet;
答案 1 :(得分:0)
是的,有可能,您可以使用以下查询。您需要根据需要传递表名和列名。它将返回列名称以及数据类型
SELECT COLUMN_NAME,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'YourTableName' AND
COLUMN_NAME in( 'YourColumnName1', 'YourColumnName2')
下面的过程将表名作为参数,并将返回所有列名以及数据类型
Create Proc GetColumns (@tablename varchar(100))
as
Begin
SELECT COLUMN_NAME,DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = @tablename
End
go
Exec GetColumns 'YourTableName'