无法将HOST_NAME插入为默认值

时间:2019-03-29 19:17:34

标签: sql sql-server tsql

我将表创建为:

CREATE TABLE [UserLoginAudit] (
UserLogginAuditId INT IDENTITY(1,1) PRIMARY KEY,
EmpGuid UNIQUEIDENTIFIER,
TimeLogged DATETIME,
WorkStation VARCHAR (255)  NOT NULL DEFAULT HOST_NAME()
)

但是当我尝试插入:

 INSERT INTO [UserLoginAudit]
               VALUES
                    (
                    @EmpGuid
                   , @Today
                    )

它返回:

  

列名或提供的值数与表不匹配   定义。

我在docs处进行检查,并且正确使用了具有默认值的WorksStation列,但我不知道为什么它不允许我插入默认值。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

在没有显式列出列名的情况下,您提供的值数与表定义不符。您可以在插入内容中仅列出EmpGuidTimeLogged列,这将自动插入WorkStation列的默认值,也可以使用这两列并添加WorkStation使用DEFAULT关键字的列以使用默认值。我强烈建议您在执行INSERT(或任何其他操作,例如SELECT)时始终列出所有列,以免将来添加其他列时出现任何问题。这也将使您的代码更容易被他人解密。

INSERT INTO [UserLoginAudit] (EmpGuid, TimeLogged)
 VALUES (@EmpGuid, @Today)

默认设置:

 INSERT INTO [UserLoginAudit] (EmpGuid, TimeLogged, WorkStation)
 VALUES (@EmpGuid, @Today, DEFAULT)