sql-server – 如安在SQL Server 2017中行使SNAPSHOT_MATERIALIZ
SQL Server 2017有几个新的存储进程: > sp_refresh_single_snapshot_view – @ view_name nvarchar(261)的输入参数,@ rgCode int sys.messages中的新条目: > 10149 – 无法在视图’%.* ls’上建设具有SNAPSHOT_MATERIALIZATION的索引,由于视图界说包括内存优化表. 和新的扩展变乱: 那么我们怎样建设快照实体化视图呢? (显然,微软还没有记录它.)这是一个没有效的gist with things I’ve tried so far. 办理要领你不能.该成果在2017 RTM中被禁用.那说,你可以…… 行使AdventureWorks: CREATE VIEW dbo.TH WITH SCHEMABINDING AS SELECT P.ProductID,COUNT_BIG(*) AS cbs FROM Production.Product AS P JOIN Production.TransactionHistory AS TH ON TH.ProductID = P.ProductID GROUP BY P.ProductID; GO CREATE UNIQUE CLUSTERED INDEX cuq ON dbo.TH (ProductID) WITH (SNAPSHOT_MATERIALIZATION = ON); 对基本表的变动不会当即反应在视图中(凡是是SQL Server的环境).同样,针对基本表的数据修改不必维护快照索引视图. 要革新视图内容,必要挪用个中一个新的存储进程: EXECUTE sys.sp_refresh_single_snapshot_view @view_name = N'dbo.TH',@rgCode = 0; -- don't know what this is for yet 这会发生执行打算: 这也许对您不起浸染,由于必要一个未记录的跟踪符号,可能您必要做我出格厌恶的工作:写入生涯成果符号的内存位置(行使调试器)来启用此成果. 假如你很好奇,那么feature符号就是sqllang的字节!g_featureSwitchesLangSvc 0x10f.在sqllang!SpRefreshSingleSnapshotView时代搜查它. 假如您想要一路玩,而且已经做好充实的筹备,可以接管SQL Server代码运行时黑客进攻的效果,并行使Microsoft以为尚未筹备好的成果: >将调试器附加到SQL Server 2017历程.我行使的是WinDbg. bp sqllang!SpRefreshSingleSnapshotView >行使Go呼吁规复SQL Server(g) cmp byte ptr [sqllang!g_featureSwitchesLangSvc+0x10f (00007fff`328dfbcf)],0 其他构建中的偏移量也许差异,譬喻在2017 RTM CU3中它是sqllang!g_featureSwitchesLangSvc 0x114 db 00007fff`328dfbcf L1 >此值应表现为零,暗示该成果已禁用. eb 00007fff`328dfbcf 1 >禁用断点并继承运行SQL Server. 留意SNAPSHOT_MATERIALIZATION应承我们实现凡是无法体例索引的查询类型的快照,譬喻,下面行使MAX: CREATE VIEW dbo.TH2 WITH SCHEMABINDING AS SELECT TH.ProductID,MaxTransactionID = MAX(TH.TransactionID) FROM Production.TransactionHistory AS TH GROUP BY TH.ProductID; GO CREATE UNIQUE CLUSTERED INDEX cuq ON dbo.TH2 (ProductID) WITH (SNAPSHOT_MATERIALIZATION = ON); 功效: Commands completed successfully. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |