gpt4 book ai didi

sql-server - 如何确定插入时哪一列引发算术溢出错误?

转载 作者:行者123 更新时间:2023-12-02 16:38:33 25 4
gpt4 key购买 nike

想象一个表格,其中有大约一百个不同的列。那么,想象一下,我有一个用户数据表,我想将数据从该表复制到基表。所以我写了这个简单的插入选择语句,然后弹出了这个错误。那么,找出哪一列引发错误的最优雅的方法是什么?

我对该解决方案的最初想法是将其包装在一个事务中,我最终将回滚该事务并使用某种分而治之的方法:

begin tran

insert into BaseTable (c1,c2,c3,...,cN)
select c1,c2,c3,...,cN
from UserTable

rollback tran

这显然失败了。因此,我们将列集分成两半,如下所示:

begin tran

insert into BaseTable (c1,c2,c3,...,cK) --where K = N/2
select c1,c2,c3,...,cK --where K = N/2
from UserTable

rollback tran

如果失败,则失败的列位于另一半。我们继续这个过程,直到找到讨厌的列。

还有比这更优雅的吗?

注意:我还发现了一个几乎重复的问题,但它几乎没有回答它。

最佳答案

以下脚本将为 Basetable 的每个整数列创建 SELECT 语句。
执行生成的 SELECT 语句应查明 Usertable 中的违规列。

SELECT  'PRINT ''' 
+ sc.Name
+ '''; SELECT MIN(CAST('
+ sc.Name
+ ' AS INTEGER)) FROM Usertable'
FROM sys.columns sc
INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id
WHERE OBJECT_NAME(Object_ID) = 'BaseTable'
AND st.name = 'INT'

关于sql-server - 如何确定插入时哪一列引发算术溢出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com