Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL如果没有数据,则日期列为NULL_Sql_Sql Server_Tsql - Fatal编程技术网

TSQL如果没有数据,则日期列为NULL

TSQL如果没有数据,则日期列为NULL,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个应用程序,其中有多个日期字段,管理员可以在需要时编辑。查询将更新表中的每个字段,并使用任何新信息更新它 默认情况下,表中的“我的3个日期”字段为空。当我运行更新查询时,即使我没有添加日期,它也会将列更新为: 1900-01-01 00:00:00.000 我的最新声明如下: UPDATE tuitionSubmissions SET reimbursementDate = COALESCE (@reimbursementDate, NULL), empGradDate

我有一个应用程序,其中有多个日期字段,管理员可以在需要时编辑。查询将更新表中的每个字段,并使用任何新信息更新它

默认情况下,表中的“我的3个日期”字段为空。当我运行更新查询时,即使我没有添加日期,它也会将列更新为:

1900-01-01 00:00:00.000
我的最新声明如下:

UPDATE tuitionSubmissions
SET reimbursementDate = COALESCE (@reimbursementDate, NULL),
    empGradDate       = COALESCE (@gradDate, NULL),
    payPeriod         = COALESCE (@payPeriod, NULL),
    [status]          = @status,
    notes             = @notes,
    managerApproval   = @empID,
    approvalDate      = COALESCE (GETDATE(), NULL)
WHERE id = @tid;`
根据我的理解,我认为如果这些变量是空的,那么它只会保持字段为空


是否有其他方法可以做到这一点,使日期字段保持为空,直到实际的日期/值发送到存储过程?

您使用的
COALESCE
毫无意义。它与
相同,如果@replumentdate为NULL,则为NULL
。 像这样使用它:

SET reimbursementDate = COALESCE (@reimbursementDate, reimbursementDate)

在这种情况下,如果参数未通过,列将保持不变(即参数为
NULL

字段是否可为NULL?您可以使用selectcolumnproperty(OBJECT_ID('TableName','U'),'ColumnName','AllowsNull')进行检查;看起来客户端代码正在向update语句传递非空值零(0)。尝试将coalesce语句更改为:
NullIf(@replumentdate,'1900年1月1日')
我将其更新为此,但是,一旦我将其他字段发送到数据库,它会将这些字段从NULL更新为1900-01-01 00:00:00.000这起作用,我没有注意到我的VAR设置为varchar,而不是datetime