【问题标题】:Error while applying a default constraint应用默认约束时出错
【发布时间】:2018-04-09 09:44:33
【问题描述】:

我收到错误消息:

for 附近的语法不正确。

CREATE TABLE Test       (ID       INT          not null IDENTITY Primary key,
                         CreatedBy      VARCHAR(20)  not null,
                         CreatedDate    DATETIME     not null,
                         UpdatedBy      VARCHAR(20)  not null,
                         LastUpdated    DATETIME     not null,

CONSTRAINT Test_CreatedBy   DEFAULT USER_NAME() FOR CreatedBy,
CONSTRAINT Test_CreatedDate DEFAULT GETDATE()   FOR CreatedDate,
CONSTRAINT Test_UpdatedBy   DEFAULT USER_NAME() FOR UpdatedBy,
CONSTRAINT Test_LastUpdated DEFAULT GETDATE()   FOR LastUpdated)
go

【问题讨论】:

  • 错误在哪里?
  • 你用的是哪个版本的sql?
  • @Ven 错误接近 FOR 版本是 SQL Server management studio 14.0.17224.0
  • @a_horse_with_no_name 我已经提到了错误是 FOR 附近的语法不正确
  • 始终建议在列定义中创建约束

标签: sql-server tsql ddl


【解决方案1】:

试试这个语法:

CREATE TABLE Test       
(
ID             INT          not null IDENTITY Primary key,
CreatedBy      VARCHAR(20)  not null
    CONSTRAINT Test_CreatedBy   DEFAULT USER_NAME(),
CreatedDate    DATETIME     not null
    CONSTRAINT Test_CreatedDate DEFAULT GETDATE(),
UpdatedBy      VARCHAR(20)  not null
    CONSTRAINT Test_UpdatedBy   DEFAULT USER_NAME(),
LastUpdated    DATETIME     not null
    CONSTRAINT Test_LastUpdated DEFAULT GETDATE()
);
GO

dbfiddle here

或者,如果您更喜欢使用 ALTER TABLE:

CREATE TABLE Test       
(
ID             INT          not null IDENTITY Primary key,
CreatedBy      VARCHAR(20)  not null,
CreatedDate    DATETIME     not null,
UpdatedBy      VARCHAR(20)  not null,
LastUpdated    DATETIME     not null
);
GO

ALTER TABLE Test
    ADD CONSTRAINT Test_CreatedBy   DEFAULT USER_NAME() FOR CreatedBy;
GO

ALTER TABLE Test
    ADD CONSTRAINT Test_CreatedDate DEFAULT GETDATE() FOR CreatedDate;
GO

ALTER TABLE Test
    ADD CONSTRAINT Test_UpdatedBy   DEFAULT USER_NAME() FOR UpdatedBy;
GO

ALTER TABLE Test
    ADD CONSTRAINT Test_LastUpdated DEFAULT GETDATE() FOR LastUpdated;
GO

dbfiddle here

【讨论】:

    【解决方案2】:

    您可以将 约束 定义为列级别,如下所示

    CREATE TABLE Test (
    ID INT NOT NULL IDENTITY(1,1) Primary key,
    CreatedBy  VARCHAR(20) NOT NULL DEFAULT USER_NAME(),
    CreatedDate  DATETIME NOT NULL DEFAULT GETDATE(),
    UpdatedBy VARCHAR(20) NOT NULL DEFAULT USER_NAME(),
    LastUpdated DATETIME NOT NULL DEFAULT GETDATE());
    GO
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多