为什么这个insert语句不能在其第二次迭代中插入值?

时间:2014-04-12 01:35:27

标签: sql sql-server tsql

我有一个合理大小的stored procedure,可以接受3个集合,两个UDTT集合和一个CSV集合。

我已通过以下值来测试stored procedure。但是问题出现在一个名为EmpDesignations的5个主表中。我在store procedure中使用了一个循环来将值插入EmpDesignations。循环是必需的,因为值是从CSV string中提取的。正如预期的那样,它会使用两组值迭代2次。第一次迭代成功插入数据但在第二次迭代中未插入数据。我检查过天气数据是空的,但那些变量@tmpEmpID@tmp包含数据。所以无法弄清楚问题

EmpDesignations表定义是

EmpID PK, FK not null
DesigID PK, FK not null
IsValid int not null
UpdtDT datetime not null containts to getDate()
AuthID int not null  EmpID

这是表格列和类型的快照

enter image description here

在第一次迭代中,插入语句的传递值显示在监视窗口enter image description here

正如您所看到的,@@rowcount 1 因此在第一轮工作! enter image description here

在下面的watch中显示了insert语句的传递值,这是在第二次迭代中: enter image description here

但是@@rowcount不是1因此控制rollbacks所有插入 enter image description here

以下是debugging of the insert statement

的视频链接

这是THE SECOND INSERT statement debugging

的视频

表定义是正确的,传递的值的数量与输入列的数量相匹配,并且变量在两次迭代中都用值填充,那么问题可能是什么?

这是由SQL服务器为表EmpDesignations

生成的脚本
    USE [SMSV100]
GO

/****** Object:  Table [dbo].[EmpDesignations]    Script Date: 04/12/2014 08:50:23 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[EmpDesignations](
    [EmpID] [int] NOT NULL,
    [DesigID] [int] NOT NULL,
    [IsValid] [int] NOT NULL,
    [UpdtDT] [datetime] NOT NULL,
    [AuthID] [int] NOT NULL,
 CONSTRAINT [PK_EmpDesignations] PRIMARY KEY CLUSTERED 
(
    [EmpID] ASC,
    [DesigID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[EmpDesignations]  WITH CHECK ADD  CONSTRAINT [FK_EmpDesignations_Designations] FOREIGN KEY([DesigID])
REFERENCES [dbo].[Designations] ([DesigID])
GO

ALTER TABLE [dbo].[EmpDesignations] CHECK CONSTRAINT [FK_EmpDesignations_Designations]
GO

ALTER TABLE [dbo].[EmpDesignations]  WITH CHECK ADD  CONSTRAINT [FK_EmpDesignations_Employees] FOREIGN KEY([EmpID])
REFERENCES [dbo].[Employees] ([EmpID])
GO

ALTER TABLE [dbo].[EmpDesignations] CHECK CONSTRAINT [FK_EmpDesignations_Employees]
GO

ALTER TABLE [dbo].[EmpDesignations] ADD  CONSTRAINT [DF_EmpDesignations_UpdtDT]  DEFAULT (getdate()) FOR [UpdtDT]
GO

感谢

0 个答案:

没有答案