【发布时间】:2017-03-20 12:44:10
【问题描述】:
我有一个Table Valued Constructor,通过它正在选择1 million 记录。它将用于update 另一个表。
SELECT *
FROM (VALUES (100,200,300),
(100,200,300),
(100,200,300),
(100,200,300),
.....
..... --1 million records
(100,200,300)) tc (proj_d, period_sid, val)
这是我的原始查询:https://www.dropbox.com/s/ezomt80hsh36gws/TVC.txt?dl=0#
当我执行上述select 时,它只是显示 Query completed with errors 并显示任何错误消息。
更新: 尝试使用TRY/CATCH 块捕获错误消息或错误号,但没有使用仍然与上一张图片相同的错误
BEGIN try
SELECT *
FROM (VALUES (100,200,300),
(100,200,300),
(100,200,300),
(100,200,300),
.....
..... --1 million records
(100,200,300)) tc (proj_d, period_sid, val)
END try
BEGIN catch
SELECT Error_number(),
Error_message()
END catch
为什么它不执行是Select 中的 Table Valed 构造函数有任何限制。我知道Insert 是1000,但我在这里选择。
【问题讨论】:
-
所有文字值都需要编译到执行计划中。在看到错误之前编译需要多长时间?
-
@MartinSmith - 总是少于 5 秒
-
我已经尝试过了,八分钟后它仍在挣扎,没有结果或错误(尚未)
DECLARE @SQL NVARCHAR(MAX) = '(100,200,300),' ; SELECT @SQL = 'SELECT * FROM (VALUES ' + REPLICATE(@SQL,1000000) + '(100,200,300)) tc (proj_d, period_sid, val)';EXEC(@SQL) -
我让它运行了 28 分钟然后杀死了它。可能它正在做这样的事情stackoverflow.com/questions/8635818/…
标签: sql sql-server sql-server-2012 bulkupdate