首页 > 开发 > 综合 > 正文

作死的玩一下计算列

2024-07-21 02:47:47
字体:
来源:转载
供稿:网友
作死的玩一下计算列

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

先随便搞张表

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
IDColNametimestampColCal
11Col10x000000000000A412D6C4F1E6-0C81-4667-A9C3-73FBAC895D29
21Col10x000000000000A41232F1D090-070C-4A03-86C7-27A354553EFF

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表