有時候因為之間有關系,就使用到了計算列。所以我又做一下實驗
先隨便搞張表
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 |
那是因為計算列的定義使用了不確定性函數導致的,并且這種情況是不能為計算列添加索引的。如果應用到復制,那么復制的結果,也會出現不一致性。
所以如果要使用計算列,要小心這種情況
新聞熱點
疑難解答