作死的玩一下计算列

王朝学院·作者佚名  2016-05-25
窄屏简体版  字體: 小  |  中  |  大  |  超大  

作死的玩一下计算列有时候因为之间有关系,就使用到了计算列。所以我又做一下实验

先随便搞张表

Use tempdbGOIF OBJECT_ID('TestTR1') IS NOT NULL DROP TABLE TestTR1GOCREATE TABLE [dbo].[TestTR1]( [ID] [int] IDENTITY(1,1) NOT NULL, [ColName] [nvarchar](100) NULL, [timestamp] [timestamp] NOT NULL, [ColCal] AS (newid()),PRIMARY KEY CLUSTERED ( [ID] ASC))

然后就可以插入数据了,一看,发现执行多少次,计算列就得出多少次不一样的结果~

INSERT INTO dbo.TestTR1 ( ColName )VALUES ( N'Col1' )SELECT * FROM dbo.TestTR1SELECT * FROM dbo.TestTR1

ID

ColName

timestamp

ColCal

1

1

Col1

0x000000000000A412

D6C4F1E6-0C81-4667-A9C3-73FBAC895D29

2

1

Col1

0x000000000000A412

32F1D090-070C-4A03-86C7-27A354553EFF

那是因为计算列的定义使用了不确定性函数导致的,并且这种情况是不能为计算列添加索引的。如果应用到复制,那么复制的结果,也会出现不一致性。

所以如果要使用计算列,要小心这种情况

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航