ALTER PROCEDURE [dbo].[K_FS_InsertMrpDetails]
@date datetime,
@feedtype varchar(50),
@rateperkg float,
@rateper50kg float,
@updatedby varchar(50)
AS
BEGIN
if exists(select * from K_FS_GenerateDcno where date = @date)
begin
select '1' as status
end
else
begin
insert into K_FS_FeedMrpDetails([date],feedtype,rateperkg,rateper50kg,
updatedby,updatedon) values (@date,@feedtype,@rateperkg,@rateper50kg,
@updatedby,getdate())
select '2' as status
END
我有9行,如果我输入相同的日期,这9行只更新了一个“DATE”然后它显示“已存在的日期费率”..我怎么能这样做...请帮帮我..
答案 0 :(得分:0)
你需要小心这种逻辑和日期时间。如果您知道要插入的日期,只要您没有提供时间,即C#DateTime.Now vs DateTime.Today,您所拥有的就足够了。
Brett 100%正确,您创建了一个独特的约束。这将阻止您在重复的情况下结束并协助调试它发生的原因。它还将协助SQL Server引擎进行存在检查。
出于性能原因,您还可以将受影响的值用于您的状态。 E.g。
INSERT INTO [dbo].[K_FS_InsertMrpDetails]....
SELECT @date...
FROM [dbo].[K_FS_InsertMrpDetails]
WHERE (NOT (EXISTS (SELECT TOP 1 1
FROM [dbo].[K_FS_InsertMrpDetails]
WHERE date = @date))
SELECT @@ROWCOUNT + 1 AS Status
此语句可以输出参数,但对于这种情况,我不会说它的确切要求。
注意: - 我在SQL之外键入了这个,如果我错过了什么,请告诉我。