SELECT Auth_First_Name, Auth_Last_Name, Auth_Favorite_Number
FROM Authors
我想知道这一点,我想知道:
Auth_First_Name is char(25)
Auth_Last_Name is char(50)
Auth_Favorite_Number is int
对于SQL Server 2012及以上:如果将查询放入字符串中,则可以将结果设置为类似的数据类型:
DECLARE @query nvarchar(MAX) = 'select 12.1 / 10.1 AS [Column1]';
EXEC sys.sp_describe_first_result_set @query, NULL, 0;
也有一个函数版本,类似地称为:
DECLARE @query nvarchar(max) = 'select 12.1 / 10.1 AS [Column1]';
SELECT *
FROM sys.dm_exec_describe_first_result_set(@query, NULL, NULL);
功能的优点是您可以选择在
SELECT
select * from information_schema.columns
可以让您入门。
您还可以将结果(或前10个结果)插入临时表中,并从临时表中获取列(只要列名称都不同)。
SELECT TOP 10 *
INTO #TempTable
FROM <DataSource>
然后使用:
EXEC tempdb.dbo.sp_help N'#TempTable';
SELECT *
FROM tempdb.sys.columns
WHERE [object_id] = OBJECT_ID(N'tempdb..#TempTable');
在这里从
aaron的答案中解释了。
SQL_VARIANT_PROPERTY()
...如果您无法直接访问元数据(例如,也许是链接的服务器查询?)。
SQL_VARIANT_PROPERTY(TRASSACT-SQL)
在SQL Server 2005及以后,最好使用目录视图(SYS.Columns)而不是Information_Schema。 除非对其他平台的可移植性很重要。 请记住,信息_schema视图不会改变,因此他们将逐渐缺少有关SQL Server连续版本的新功能等的信息。“
现在,我确实意识到这个问题是专门针对SQL Server 2000提出的,但是我正在寻找以后版本的类似解决方案,并在SQL中发现了一些本机支持以实现这一目标。
在SQL Server 2012开始,请参见。 “ sp_describe_first_result_set” - to link tobol
我已经使用类似于上面的
@trisped's的技术实现了解决方案,并将其撕掉以实现本机SQL Server实现。SELECT COLUMN_NAME,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM information_schema.columns
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
您可以每次执行查询时从头开始重新创建登台表吗?如果是这样,您可以使用
SELECT ... INTO
语法,让SQL Server担心使用正确的列类型等创建表。
SELECT *
INTO your_staging_table
FROM enormous_collection_of_views_tables_etc
SP_DESCRIDE_FIRST_RESULT_SET
此简单查询返回数据类型位。您可以将此thecnic用于其他数据类型: