Sql server 2005 在SQL Server中是否会交叉应用bail而不是错误?
我们正在将数百万条记录插入一个详细信息表,其数据以CSV类型的格式存储在主表中。为了进行插入,我们使用了一个交叉应用函数,如果我一个接一个地进行插入,这似乎是可行的,但是如果我进行整个插入,只有大约2/3的记录进入,查询就会停止,大约3个半小时后成功 这里是insert查询Sql server 2005 在SQL Server中是否会交叉应用bail而不是错误?,sql-server-2005,Sql Server 2005,我们正在将数百万条记录插入一个详细信息表,其数据以CSV类型的格式存储在主表中。为了进行插入,我们使用了一个交叉应用函数,如果我一个接一个地进行插入,这似乎是可行的,但是如果我进行整个插入,只有大约2/3的记录进入,查询就会停止,大约3个半小时后成功 这里是insert查询 INSERT INTO DetailsTable(MasterTableID, DetailColumn1, DetailColumn2) SELECT MasterTableID, DetailColumn1
INSERT INTO DetailsTable(MasterTableID, DetailColumn1, DetailColumn2)
SELECT MasterTableID, DetailColumn1, DetailColumn2 FROM MasterTable
CROSS APPLY [fn_CreateDetailData](MasterTableID, '§')
如果我对其中一条未插入的记录执行以下操作,则所有操作都将正常工作,并且插入的记录也很正常
INSERT INTO DetailsTable(MasterTableID, DetailColumn1, DetailColumn2)
SELECT MasterTableID, DetailColumn1, DetailColumn2 FROM MasterTable
CROSS APPLY [fn_CreateDetailData](MasterTableID, '§')
WHERE MasterTableID = 12345
从我对SQL Server的所有了解来看,一个事务中存在一个insert语句,因此要么全部存在,要么什么都不存在,但这里的情况似乎不是这样。对于SELECT,这是您的代码吗?你有没有写过任何细节,比如说,使用NOLOCK提示?NOLOCK因在数据中造成错误间隔而臭名昭著,请参见发生这种情况的唯一原因是您的函数过滤掉了其他行。向我们展示您的函数。当我没有指定主键id时,我的函数如何筛选出行,而当我指定主键id时如何不筛选出行?不幸的是,这似乎是一个StackOverflow无法处理的问题。问题是,如果我只运行函数更多次,就会插入越来越多的新的唯一行,这看起来很奇怪。好吧,这不完全是我的代码,因为我们没有真正的MasterTable表。但是除了重命名列和表之外,这正是我所运行的。