Sql 为什么此insert语句不能在其中插入值';第二次迭代?
我有一个大小合理的Sql 为什么此insert语句不能在其中插入值';第二次迭代?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个大小合理的存储过程,它接受3个集合,两个UDTT集合和一个CSV集合 我已将以下值传递给测试存储过程。然而,问题出现在一个名为empsignations的小主表中,该表有5列。我在存储过程中使用了一个循环将值插入EmpDesignations。循环是必需的,因为值是从CSV字符串中提取的。正如预期的那样,它确实使用两组值迭代了2次。第一次迭代成功插入数据,但在第二次迭代中未插入数据。我已经检查了数据是否为空,但是那些变量@tmpEmpID和@tmp包含数据。所以我无法解决问题 emp名称
存储过程
,它接受3个集合,两个UDTT
集合和一个CSV
集合
我已将以下值传递给测试存储过程。然而,问题出现在一个名为empsignations
的小主表中,该表有5列。我在存储过程中使用了一个循环
将值插入EmpDesignations
。循环是必需的,因为值是从CSV字符串中提取的。正如预期的那样,它确实使用两组值迭代了2次。第一次迭代成功插入数据,但在第二次迭代中未插入数据。我已经检查了数据是否为空,但是那些变量@tmpEmpID
和@tmp
包含数据。所以我无法解决问题
emp名称
表定义为
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
下面是表列和类型的快照
在第一次迭代中,将值传递给insert语句显示在监视窗口中
如您所见,@@rowcount
是1所以在第一轮中工作得很好!
在下面的监视中,显示了向insert语句传递值,这是在第二次迭代中:
但是@@rowcount
不是1
,因此控件回滚所有插入
这里是一个视频链接
这是我的视频
表定义是正确的,传递的值的数量与输入列的数量相匹配,并且变量在两次迭代中都用值填充,那么会出现什么问题
下面是SQL server为表指定生成的脚本
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
谢谢您如何知道@ROWCOUNT在第二次迭代中不是1?您是否在第二次迭代中保存了该变量的状态并将其打印出来(在上面的代码中看不到)。当sql在“insert”的正上方执行“select”语句时。@@rowcount包含值1,但在执行“insert”后,它立即变为0,这意味着插入失败,对吗?我会用这些值手动创建两个insert语句,看看这是否能说明发生了什么。@phil,我会这样做的,我会让你知道:)@phil,我已经将insert语句的一个重复insert语句添加到EMP中,在执行第一个insert语句时@@rowcount有1,在执行重复的insert语句后@@rowcount有0,因此这次第一次迭代失败