鉴于此表:
和这个查询:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION, IS_NULLABLE
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME='PARAMETERS'
ORDER BY TABLE_NAME, ORDINAL_POSITION
我得到了这个结果:
如何检索整数列的大小?对于PAR_ID
(Lenght = 2),我得到NUMERIC_PRECISION
为5。
NUMERIC_PRECISION
的定义是“近似数值数据的精确度,精确数值数据,整数数据或货币数据。否则,返回NULL”。但是为什么smallint(2)的值为5,例如float(8)的值为53?这个值意味着什么?
更新:
感谢@Ed_Harper:长度和精度之间存在差异。 Length是用于存储数字的字节数。精度是数字中的位数。请参阅:http://goo.gl/EOTyC
答案 0 :(得分:0)
对于SQL 2000,请尝试此操作(未经测试):
SELECT c.name AS ColumnName, TYPE_NAME(c.xusertype) AS DataType,
c.length, c.PREC, c.scale
FROM sysobjects t
JOIN syscolumns c ON t.id = c.id
WHERE t.name = 'PARAMETERS'
从SQL 2005+尝试:
尝试使用sys.columns ...
SELECT c.name AS ColumnName, ty.name AS DataType, c.max_length,
c.precision, c.scale
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE t.name = 'PARAMETERS'
答案 1 :(得分:0)
试试这个:
SELECT c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH,
c.NUMERIC_PRECISION, c.IS_NULLABLE,sc.max_length
FROM
INFORMATION_SCHEMA.COLUMNS c inner join sys.columns sc
on c.TABLE_NAME=object_name(sc.object_id)
WHERE
c.TABLE_NAME='PARAMETERS'
ORDER BY TABLE_NAME, ORDINAL_POSITION
SQL server 2000
SELECT distinct c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH,
c.NUMERIC_PRECISION, c.IS_NULLABLE,sc.length
FROM
INFORMATION_SCHEMA.COLUMNS c inner join syscolumns sc
on c.TABLE_NAME=object_name(sc.id)
WHERE
c.TABLE_NAME='PARAMETERS'
答案 2 :(得分:0)
int系列成员的存储大小是固定的,如文档here所示(链接用于SQL 2012,但自SQL 2000以来没有改变):
tinyint = 1 byte
smallint = 2 bytes
int = 4 bytes
bigint = 8 bytes
将此信息输入查询的最简单方法是在案例陈述中对其进行硬编码。
NUMERIC_PRECISION
- 确定可以存储在数字数据类型中的小数位总数。 smallint
的值为5,int
的值为10等,因为这是每个数据类型可以存储的最长的数字序列。
修改强>
示例查询显示case语句的使用。请注意,数据类型列表不完整。
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION, IS_NULLABLE,DATA_TYPE,
CASE DATA_TYPE WHEN 'tinyint' THEN 1
WHEN 'smallint' THEN 2
WHEN 'int' THEN 4
WHEN 'bigint' THEN 8
WHEN 'datetime' THEN 8
WHEN 'nvarchar' THEN CHARACTER_MAXIMUM_LENGTH * 2
WHEN 'nchar' THEN CHARACTER_MAXIMUM_LENGTH * 2
WHEN 'varchar' THEN CHARACTER_MAXIMUM_LENGTH
WHEN 'char' THEN CHARACTER_MAXIMUM_LENGTH
ELSE NULL
END AS column_size_bytes
FROM
INFORMATION_SCHEMA.COLUMNS
order by data_type