SQL Server获取select语句中每列的数据类型

时间:2017-06-25 23:04:01

标签: sql-server

我有一个使用临时表的proc,然后在select语句的末尾插入。我收到以下错误:

Arithmetic overflow error converting numeric to data type numeric

有没有办法可以找出select语句用于列的数据类型,以便我可以将它与临时表定义进行比较,以便我可以看到哪些列可能有问题?

我想另一种说法,我怎么知道哪些记录导致了这个问题?我想如果我可以在select语句的每一列中获取数据类型并与临时表进行比较,那么它将帮助我找到问题。

2 个答案:

答案 0 :(得分:1)

以下查询将给出结果

SELECT 
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN 
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN 
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
    c.object_id = OBJECT_ID('TableName')

答案 1 :(得分:0)

我的猜测是你试图将大于99999.99的数字压缩到十进制字段中。您需要增加小数点前的位数。您可以通过提高精度(十进制之前和之后的总位数)来完成此操作。

您可以通过注释插入#temp并查看select语句为您提供的数字并查看它们是否大于您的列可以处理的数字来对此进行测试。