Tsql 将空datetime值插入SQL表
下面是我们用来填充SQL数据库中的表的存储过程。@expDate是从C#批处理作业发送的参数,该作业从Excel和电子表格获取其值 如果当前代理的培训处于活动状态,则电子表格的“过期日期”单元格中将没有值。这将导致从C#代码向存储过程发送一个空字符串,然后将其转换为日期时间值1900-01-01。在我需要使用游标将新记录插入表之前,这是可以接受的Tsql 将空datetime值插入SQL表,tsql,datetime,null,Tsql,Datetime,Null,下面是我们用来填充SQL数据库中的表的存储过程。@expDate是从C#批处理作业发送的参数,该作业从Excel和电子表格获取其值 如果当前代理的培训处于活动状态,则电子表格的“过期日期”单元格中将没有值。这将导致从C#代码向存储过程发送一个空字符串,然后将其转换为日期时间值1900-01-01。在我需要使用游标将新记录插入表之前,这是可以接受的 如果@expDate值是1900-01-01,那么我需要SQL记录的到期日期字段中的值为NULL。但是,我不能将@expDate=NULL设置为空,也
如果@expDate值是1900-01-01,那么我需要SQL记录的到期日期字段中的值为NULL。但是,我不能将@expDate=NULL设置为空,也不能简单地将其设置为空(“”)[编辑:由于业务规则,我不能设置为空。空值将导致字段的值设置为1900-01-01]。有什么建议吗
DECLARE @date datetime = GETDATE()
IF @expDate = '1900-01-01' SET @flag = '1'
IF @expDate = '1900-01-01' SET @expDate = GETDATE()
DECLARE prod_cursor CURSOR LOCAL SCROLL FOR
SELECT ProductCode
FROM CourseToProduct
WHERE CourseCode = @courseCode and (TerminationDate >= @expDate OR TerminationDate IS NULL)
IF @flag = '1' SET @expDate = ''
OPEN prod_cursor
FETCH NEXT FROM prod_cursor
INTO @productCode
WHILE @@FETCH_STATUS = 0
BEGIN
IF NOT EXISTS
(
SELECT *
FROM AgentProductTraining
WHERE @sNumber = SNumber and
@courseCode = CourseCode and
@productCode = ProductCode and
@dateTaken = DateTaken
)
BEGIN
IF @sNumber IS NOT NULL
BEGIN
INSERT INTO AgentProductTraining
(
SNumber,
CourseCode,
ProductCode,
DateTaken,
DateExpired,
LastChangeOperator,
LastChangeDate
)
VALUES (
@sNumber,
@courseCode,
@productCode,
@dateTaken,
COALESCE(@expDate, 'NULL'),
@lastChangeOperator,
@lastChangeDate
)
END
END
FETCH NEXT FROM prod_cursor
INTO @productCode
END
CLOSE prod_cursor;
DEALLOCATE prod_cursor;
通过遵循Oded的注释,我去掉了COALESCE语句,并将@flag值设置为NULL,而不是NULL。通过更改这行代码:
IF @flag = '1' SET @expDate = ''
为此:
IF @flag = '1' SET @expDate = NULL
这场狂欢现在开始了 这样行吗
INSERT INTO AgentProductTraining
(
SNumber,
CourseCode,
ProductCode,
DateTaken,
DateExpired,
LastChangeOperator,
LastChangeDate
)
VALUES (
@sNumber,
@courseCode,
@productCode,
@dateTaken,
CASE WHEN @expDate = '1900-01-01' THEN Null ELSE @expDate END,
@lastChangeOperator,
@lastChangeDate
)
“我不能将@expDate=NULL设置为空,也不能将其设置为空(“”)”。为什么不呢?这是一个业务规则,一个空白值会将列设置为1900-01-01(刚刚编辑)一个业务规则?关于实现细节???如果需要将字段的值设置为
null
(您声明需要),将变量设置为null
有什么问题?业务从何而来?它是一个日期时间字段。不能将变量值设置为“NULL”或datetime以外的任何值,否则它将不起作用。您将收到以下错误消息:“从字符串转换日期和/或时间时,转换失败。”您将如何设置它?如果您使用的是'NULL'
,那就错了-这是字符串NULL
。您需要传入实际的NULL
(您在合并中所做的是错误的)。