检索所选列的数据类型

时间:2019-02-20 09:55:37

标签: sql-server tsql

是否可以从SQL Server中的存储过程中检索选定列的数据类型。

例如

BindingSource

需要按以下方式检索。

ListChanged

2 个答案:

答案 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'