我有一个合理大小的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
这是表格列和类型的快照
在第一次迭代中,插入语句的传递值显示在监视窗口中
正如您所看到的,@@rowcount
1 因此在第一轮工作!
在下面的watch中显示了insert语句的传递值,这是在第二次迭代中:
但是@@rowcount
不是1
因此控制rollbacks
所有插入
以下是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
感谢