我想向表中添加新的创建时间列。但是,我希望表中所有以前的条目显示'19700101'日期,而从此点开始的所有新条目(即引入新列后)应显示当前日期,方法是使用getDate()如何创建具有不同行为的创建时间列
0
A
回答
2
@ Roopesh的意见做的工作只是罚款:
create table T (ID int not null,Col1 varchar(9) not null)
go
insert into T(ID,Col1) values (1,'abc'),(2,'def')
go
alter table T add CreatedDate date not null constraint DF_tmp default '19700101'
go
alter table T drop constraint DF_tmp
go
alter table T add constraint DF_Permanent
DEFAULT CURRENT_TIMESTAMP for CreatedDate
go
insert into T(ID,Col1) values (3,'ghi')
go
select * from T
结果是:
ID Col1 CreatedDate
----------- --------- -----------
1 abc 1970-01-01
2 def 1970-01-01
3 ghi 2014-06-13
这样做的好处是,列不允许NULL
秒。如果你使用Mikael's approach,你可以使列不为空的,你已经应用了UPDATE
后,但是这将需要对表的两个扫描(一次应用UPDATE
,第二次来检查任何NULL
小号当制作列not null
)。
+0
+1。对于我的答案,'not null'方法更可能仅仅是添加一个'not null'列,然后替换所有值,就像它只是从'null'而不是从一个值完成的那样。不过,你的方法当然会更快,因为它正在更新一些元数据,而不是替换表中的所有值。 –
1
第一添加具有默认值getdate()
alter table YourTable add createddate date default getdate()
默认值未在此步骤中施加的列。每行有null
作为createddate
的值。
对于所有行,将createddate
的值更新为1970-01-01
。
update YourTable set createddate = '1970-01-01'
1
--Create Table
CREATE TABLE [dbo].[MyTestTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
) ON [PRIMARY]
GO
--Put in some data
INSERT INTO [MyTestTable] (Name) VALUES ('Eoin')
INSERT INTO [MyTestTable] (Name) VALUES ('Living Thing')
GO
-- Add a new column datetime with a default value of min date
ALTER TABLE dbo.MyTestTable ADD
CreatedDate datetime NOT NULL CONSTRAINT DF_MyTestTable_CreatedDate DEFAULT Convert(Datetime, '19700101')
GO
-- Existing Records are now updated to Jan 1970
SELECT * FROM MyTestTable
GO
-- Alter the table again but with a new default
ALTER TABLE dbo.MyTestTable
DROP CONSTRAINT DF_MyTestTable_CreatedDate
GO
ALTER TABLE dbo.MyTestTable ADD CONSTRAINT
DF_MyTestTable_CreatedDate DEFAULT getdate() FOR CreatedDate
GO
--Put in some more data.
INSERT INTO [MyTestTable] (Name) VALUES ('John')
GO
-- newer Records are now updated to current date
SELECT * FROM MyTestTable
GO
相关问题
- 1. 如何创建具有2行和不同列数的表格
- 2. 如何动态创建具有不同行列大小的GridView?
- 3. 如何创建具有不同anotations
- 4. 创建阵列不同的行为
- 5. 如何在列中创建1000个具有相同值的行?
- 6. glob()不返回具有相同创建时间的文件php
- 7. 如何创建具有不同列宽度的动态网格
- 8. 如何创建具有不同的对象作为参数
- 9. 如何为创建和编辑具有不同行为的动作创建一个自定义验证属性
- 10. 创建具有不同类型的
- 11. 创建具有不同的步骤
- 12. 创建具有不同的onclick听众
- 13. 使用方法创建具有不同行为的多个AlertDialog
- 14. C#如何创建具有当前日期但时间不同的DateTime变量?
- 15. 如何创建所有喜欢的帖子创建时间?
- 16. 如何创建具有多个列
- 17. 创建的时间列表
- 18. 如何创建具有
- 19. 如何创建具有SBT
- 20. 创建具有不同属性一类
- 21. 具有行创建新列移在MySQL
- 22. 如何为用户创建的所有记录创建散列?
- 23. 如何创建时间阵列
- 24. 如何为运行时创建的按钮创建事件?
- 25. 创建具有
- 26. 创建具有
- 27. 如何创建具有相同外键的两列
- 28. 如何创建“不具有”SQL命令
- 29. 如何创建在不同时间重复的Java定时器
- 30. 软硬度:如何创建具有持续时间的
为什么-1,为什么关闭它。要么告诉我为什么这不是一个有效的问题,或者如果它已经在stackoverflow – LivingThing
首先创建默认为'19700101'的列。然后改变列并将默认值改为GetDate()。简单的 – Roopesh
我已经试过,它不工作。如果你看到一点点,那么你会明白为什么它不工作:)。即使它工作,它也会将所有以前的值更改为当前日期。 – LivingThing