如何避免相同的日期?

时间:2014-01-10 10:23:58

标签: c# sql sql-server

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”然后它显示“已存在的日期费率”..我怎么能这样做...请帮帮我..

1 个答案:

答案 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之外键入了这个,如果我错过了什么,请告诉我。