INSERT INTO SELECT错误处理

Mas*_*uso 1 sql sql-server stored-procedures

我正在编写一个T-SQL存储过程,使用该语句插入表中

INSERT INTO [tableName]
.....
SELECT * FROM [tableName]
Run Code Online (Sandbox Code Playgroud)

有时输入表(SELECT)可能包含错误的值:插入期望小数的表,select返回NVarChar值,这将导致转换错误.现在因为语句执行了"批量插入",我不知道插入的最后一条记录是什么,或者包含错误数据的记录是什么.SQL只说"转换错误....."有没有办法"记录"最后插入的记录,以便至少我知道哪一行包含错误的值?(不使用游标)

TT.*_*TT. 5

观察此查询的结果

SELECT 
    v.id,
    v.val,
    x=TRY_CAST(v.val AS DECIMAL(28,2))
FROM 
    (VALUES(1,'1.26'),(2,'A.13')) AS v(id,val) 
WHERE
    TRY_CAST(v.val AS DECIMAL(28,2)) IS NULL
Run Code Online (Sandbox Code Playgroud)

结果:

+----+------+------+
| id | val  |  x   |
+----+------+------+
|  2 | A.13 | NULL |
+----+------+------+
Run Code Online (Sandbox Code Playgroud)

它使用TRY_CAST,NULL如果CAST失败则返回.您可以使用它来确定失败的记录,或缩小您插入目标表的集合.