php - MSSQL Server INSERT NULL,但在 DATETIME 中插入 GetDate()

标签 php mysql sql-server codeigniter datetime

我正在将数据库从 MySQL 迁移到 MSSQL。 [MySQL] 我有一个 TIMESTAMP 的 CHANGEDATE 列,默认为 CURRENT_TIMESTAMP [MSSQL] 我有相同的 DATETIME CHANGEDATE 列,并添加了 GETDATE() 的默认约束

代码库是使用 CodeIgniter 的 PHP。我希望始终设置该列,因此我不允许在任何一个 DBMS 中使用 NULL。

当我用 MySQL 插入时,PHP 模型 CHANGEDATE 的属性默认为 NULL。这将触发默认值并将列条目设置为 CURRENT_TIMESTAMP。然而,当配置到 MSSQL 时,相同的代码会抛出一个错误,指出列中不允许使用 NULL,这是有效的,但我宁愿 MSSQL 像 MySQL 一样运行,并在该实例中插入 GETDATE() 的值。

如果我执行 unset($model->CHANGEDATE) 或从我的模型中删除属性,那么它会按预期工作,但我想知道是否有办法解决这个问题,只需使用MSSQL 而不是更新我所有的 PHP 模型。

class model {
public $CHANGEDATE;
...
}

错误(如所述): [Microsoft][SQL Server 的 ODBC 驱动程序 11][SQL Server]无法将值 NULL 插入“CHANGEDATE”列;列不允许空值。插入失败。 插入日志(...,CHANGEDATE,CHANGEBY)值(...,NULL,NULL)

更新: CI 应该创建对 DBMS 特定关键字的支持,如@steoleary 在他的回答中所述(我标记为正确)。但是,我发现在我的案例中最好的解决方案是稍微修改核心类 DB_active_rec.php

function set(...){
...
foreach ($key as $k => $v)
{
if (is_null($v)) continue;
...
}
}

最佳答案

我假设您已经在 SQL Server 列上设置了默认值并且您不允许 NULL,默认约束不会在 NULL 值上触发,它们只会在没有指定值时触发,或者如果您指定像这样在插入时插入默认值:

INSERT INTO [dbo].[table]
           ([col1]
           ,[col2]
           ,[col3]
           ,[col4]) --Column with default constraint
     VALUES
           ('bob',
           'bobson',
           1,
           DEFAULT) --default keyword

这样做会触发默认值,您不必更改模型。

关于php - MSSQL Server INSERT NULL,但在 DATETIME 中插入 GetDate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004285/

相关文章:

php - 如何避免一次做 5000 个查询?

php - HTML5 PHP 表单问题

SQL 服务器 : backup all databases

java - 如何将值从sql数据库设置到java文本框?

mysql:解决隐式事务提交?

python - pyodbc:如何在 SQL 数据库中存储中文字符?

用于 HTTP keep-alive 的 PHP Guzzle 客户端

php - 优雅的方式来计算两个日期之间的月数?

mysql - sql查询删除除主键之外的所有属性

php - Laravel5.7 : Get sum() for current month using model returned in view