我想在cake.php中进行批量csv文件上传过程并在sql server中保存数据。我成功上传了csv文件并获取了当前时间。每批文件包含7行数据。当每批文件保存到名为" RAS_Off_Upload"的表中时,我遇到问题,Up_Time列(来自当前上载过程的getdate)将更新/替换Up_Time的所有先前批次行当前时间。所以,我无法识别每个批次是在什么时间上传的,因为每个批次已经同时出现。
数据库专栏:
[No]
,[RAS_Code]
,[Value]
,[Remark]
,[SOF]
,[Created_by]
,[CLN_No]
,[Lot_No]
,[Prod]
,[Date]
,[Time]
,[id]
,[Line]
,[Up_Time]
,[BatchLoadID]
我已经创建了SP
CREATE PROCEDURE [dbo].[test]
@Up_Time varchar(50)
AS
SET NOCOUNT ON;
UPDATE dbo.RAS_Off_Upload
SET dbo.RAS_Off_Upload.Up_Time = GETDATE()
提前谢谢!感谢所有的评论。
答案 0 :(得分:1)
您可以跳过运行存储过程,只需更改表定义并默认在Up_Time中存储创建记录的当前系统日期(导入.csv批处理)。
您可以使用以下代码执行此操作。如果在INSERT
查询中没有为此列指定值,则会更改表的定义以使用系统日期填充Up_Time列。
ALTER TABLE dbo.RAS_Off_Upload
ADD CONSTRAINT col_UpTime
DEFAULT GETDATE() FOR Up_Time
因此,在向表中插入数据时,您所要做的就是插入除Up_Time之外的所有其他列,默认情况下会自动填充创建记录时的系统日期。
<强>更新强>
要删除表中已存在的约束,请使用code below:
DECLARE @table_name NVARCHAR(256)
DECLARE @col_name NVARCHAR(256)
DECLARE @Command NVARCHAR(1000)
SET @table_name = 'dbo.RAS_Off_Upload'
SET @col_name = 'Up_Time'
SELECT @Command = 'ALTER TABLE ' + @table_name + ' drop constraint ' + d.NAME
FROM sys.tables t
JOIN sys.default_constraints d ON d.parent_object_id = t.object_id
JOIN sys.columns c ON c.object_id = t.object_id
AND c.column_id = d.parent_column_id
WHERE t.NAME = @table_name
AND c.NAME = @col_name
--print @Command
EXECUTE (@Command)
执行此代码段后,只需在我更新答案之前运行第一个查询。
答案 1 :(得分:0)
首先,您在sproc中缺少WHERE
子句。因此,它始终更新dbo.RAS_Off_Upload中的所有记录
如果您真的想继续使用sproc,则需要添加WHERE RAS_Off_Upload.No = <the No of the record to be updated>
但更好的是改变你的桌子的设计
如果您将默认值getdate()
或sysdatetimeoffset()
添加到列Up_Time,则会在插入记录后自动添加当前日期时间。那你根本就不需要一个sproc。