我有一个商店程序,可以简化为:
INSERT into TABLE1 (column0, column1...)
SELECT field0, field1... from TABLE2
我注意到有时候TABLE1会错过插入的 SOME 数据,有什么可能导致这个问题?是不是自动换行为'隐式交易'?
注意,SP是在.NET C#代码中调用的,当执行这个奇怪的问题时,我没有在执行期间发现任何异常。
[Edit0]: 这是我的生产代码中的原始sql语句:
CREATE PROCEDURE [dbo].[SaveSomething]
--The only parameter passed from C# code which is a XML format string.
@Source nvarchar(max)
AS
BEGIN
--Open that XML with a handle attached
EXEC sp_xml_preparedocument @docHandle OUTPUT, @Source
--turn that XML into a temp table
SELECT
[PeriodID]
,[DESCRIPTION]
...
INTO #tmpPeriods
FROM OPENXML(@docHandle, N'/FirstLevelRoot/SecondLevelRoot/LeafNode')
WITH (PeriodID nvarchar(10) '../@PromotionId',
[DESCRIPTION] nvarchar(60) '@Reason',
... )
--insert that temp table data to the real useful table. And this is the place we found randomly
--some condition satisfied rows in tmpPeriods didn't get inserted to TargetTable.
INSERT INTO [dbo].[TargetTable](
[ID]
,[DESCRIPTION]
...)
SELECT
SourceTable.[PeriodID]
,SourceTable.[DESCRIPTION]
...
FROM #tmpPeriods as SourceTable
LEFT JOIN [TargetTable]
ON SourceTable.[PeriodID] = TargetTable.ID
WHERE TargetTable.ID IS NULL
由于我的合作伙伴使用相同的输入XML字符串多次测试,并且所有表都已清空,但有时TargetTable会错过一些预期的行。
隔离级别是“Read Committed”的默认值。
答案 0 :(得分:0)
检查桌面上的所有触发器。看起来你没有在Table1上插入触发器。如果您没有观察触发格式,可能会插入插入的一些数据。