如何使用括号和所有内容获取SQL Server列定义?
-
05-07-2019 - |
题
我需要一种智能方法,以可在CREATE TABLE语句中使用的方式从INFORMATION_SCHEMA.COLUMNS中获取数据类型。问题是需要理解的“额外”字段,例如NUMERIC _
PRECISION和NUMERIC _
SCALE。
显然,我可以忽略INTEGER的列(精度为10,比例为0),但还有其他类型我会感兴趣,例如NUMERIC。因此,如果没有编写大量代码来解析表格,那么有关如何从列定义中获取某种字段速记的任何想法?
我希望能得到类似的东西: INT, 约会时间, 钱, 数字**(10,2)**
解决方案
以下是 GalacticCowboy的答案的更新(ripoff!),以解决一些问题并为所有人更新(我认为) SQL Server 2008R2数据类型:
select data_type +
case
when data_type like '%text' or data_type in ('image', 'sql_variant' ,'xml')
then ''
when data_type in ('float')
then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ')'
when data_type in ('datetime2', 'datetimeoffset', 'time')
then '(' + cast(coalesce(datetime_precision, 7) as varchar(11)) + ')'
when data_type in ('decimal', 'numeric')
then '(' + cast(coalesce(numeric_precision, 18) as varchar(11)) + ',' + cast(coalesce(numeric_scale, 0) as varchar(11)) + ')'
when (data_type like '%binary' or data_type like '%char') and character_maximum_length = -1
then '(max)'
when character_maximum_length is not null
then '(' + cast(character_maximum_length as varchar(11)) + ')'
else ''
end as CONDENSED_TYPE
, *
from information_schema.columns
order by table_schema, table_name, ordinal_position
其他提示
select column_type = data_type +
case
when data_type like '%text' then ''
when data_type like '%char' and character_maximum_length = -1 then '(max)'
when character_maximum_length is not null then '(' + convert(varchar(10), character_maximum_length) + ')'
when data_type = 'numeric' then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ', ' +
convert(varchar(10), isnull(numeric_scale, 0)) + ')'
else ''
end
,*
from information_schema.columns
SMO Scripting应该处理脚本生成。我相信这就是MS在SQL Management Studio中用于脚本生成的内容。
http://msdn.microsoft.com/en-us/library /ms162153.aspx
@YourComment - 我需要一种智能方法,以一种可以在CREATE TABLE语句中使用的方式从INFORMATION_SCHEMA.COLUMNS中获取数据类型
这就是你要求的。除此之外,您将不得不解析信息架构视图结果。
如果您正在使用smo,则可以通过访问列对象
Column.Property [" NumericScale&QUOT]。值
Column.Property [" NumericPrecision&QUOT]。值
不隶属于 StackOverflow