【问题标题】:Default getdate for Insert date插入日期的默认 getdate
【发布时间】:2011-06-08 00:15:33
【问题描述】:

我有一个名为 sample 的表,它有一个名为 [__INSERT_DATE] 的列,该列为空。现在我想更改默认为getdate() 的列。当我尝试以下操作时,它给了我一个错误。

ALTER TABLE sample
ALTER COLUMN [__INSERT_DATE] [datetime] DEFAULT (getdate()) NULL)

谁能告诉我问题出在哪里?

【问题讨论】:

  • Msg 156, Level 15, State 1, Line 2 关键字“DEFAULT”附近的语法不正确。
  • 您将需要替换数据中所有现有的NULL 值,并使该列不允许空值以执行您想要的操作。我的answer here 包含执行此操作的代码。

标签: sql sql-server sql-server-2005 tsql


【解决方案1】:
ALTER TABLE sample ADD INSERT_DATE [datetime] NOT NULL DEFAULT GetDate()

这适用于 Microsoft SQL Server

【讨论】:

    【解决方案2】:

    这种方法对我有用:

    ALTER TABLE sample ALTER COLUMN INSERT_DATE [datetime] NULL DEFAULT GetDate()
    

    如果列中已有值,则可以执行以下操作:

    Alter Table sample add INSERT_DATE_TEMP [datetime] NOT NULL DEFAULT GetDate()
    Update sample
    SET INSERT_DATE_TEMP = INSERT_DATE
    Alter Table sample Drop Column INSERT_DATE
    exec sp_rename 'sample.INSERT_DATE_TEMP','INSERT_DATE','COLUMN'
    

    【讨论】:

      【解决方案3】:

      (Your_Date_Column) 将其设为 Null / Not Null 并提供默认值 GetDate() 但仍然无法正常工作。 你必须像这样创建一个触发器,

      创建触发器 [dbo].[Trigger_Date] ON [dbo].[表名] 插入 作为 开始

          Declare @Id int
          set @Id = (select Id from inserted)
      
          Update [dbo].[TableName]
          Set Your_Date_Column = GetDate()
          Where Id = @Id
      END
      

      【讨论】:

        【解决方案4】:

        我可以使用 SSManagement Studio 做到这一点

        使日期字段不可为空,然后从属性 将默认值或绑定设置为 getdate()

        【讨论】:

          【解决方案5】:

          ALTER TABLE sample ALTER COLUMN [__INSERT_DATE] [datetime] DEFAULT (getdate()) NULL)

          上述语句中的右括号过多。其中有 2 个 -> (但其中有 3 个 -> )

          【讨论】:

            【解决方案6】:

            getdate() 是否为您声明的列返回正确的日期和时间数据类型? SQL Server 2008 中有一些新的日期和时间数据类型。

            这里有一篇文章解释了一些差异。

            http://www.sql-server-performance.com/articles/dev/datetime_2008_p1.aspx

            【讨论】:

            【解决方案7】:

            MSDN 给出了这个例子:

            ALTER TABLE MyCustomers ALTER COLUMN CompanyName SET DEFAULT 'A. Datum Corporation'
            

            那会给你

              ALTER TABLE sample ALTER COLUMN __INSERT_DATE SET DEFAULT GETDATE()
            

            【讨论】:

            • 它给了我以下错误 Msg 156, Level 15, State 1, Line 2 关键字'SET'附近的语法不正确。
            • @Sam 这么简单的事情怎么会这么复杂!?插入日期列的名称和数据类型是否正确?它是日期时间,而不是 varchar 或其他?
            【解决方案8】:

            试试这个:

            ALTER TABLE sample ADD CONSTRAINT DF_sample___INSERT_DATE DEFAULT(GETDATE()) FOR __INSERT_DATE
            

            【讨论】:

              【解决方案9】:

              试试这个:

              ALTER TABLE MyTable ADD CONSTRAINT
              DF_MyTable_Inserted DEFAULT GETDATE() FOR INSERT_DATE
              GO
              

              这假设你的表名为MyTable,列是INSERT_DATE,约束的名称是DF_MyTable_Inserted

              【讨论】:

              • 它是否适用于 datetime2?它不适合我。
              猜你喜欢
              • 2019-01-27
              • 1970-01-01
              • 2015-08-21
              • 1970-01-01
              • 1970-01-01
              • 2022-08-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多