更新内存优化表出现问题

wwfxgm 2016-11-01 07:13:39
错误提示如下:
仅对自动提交事务支持使用 READ COMMITTED 隔离级别访问内存优化的表。它不适用于显式或隐式事务。请使用表提示(如 WITH (SNAPSHOT))为内存优化的表提供支持的隔离级别。

我创建内存优化表。本来想体验一下。结果无法更新数据。更新就出错。不知道在创建表的时候,需要特别写点什么?


我自己创建表的代码如下:

--Drop table if it already exists.
IF OBJECT_ID('dbo.biao','U') IS NOT NULL
DROP TABLE dbo.Tong
GO

CREATE TABLE dbo.biao
(
ID int NOT NULL identity,
KSKC varchar(90) NOT NULL,
ISBN varchar(30) NULL,
JCMC varchar(90) NOT NULL,
CBS varchar(90) NOT NULL,
XBX varchar(20) NOT NULL,
BJ varchar(30) NOT NULL,
BB varchar(20) NULL,
ZZ varchar(80) NULL,
YM varchar(50) NOT NULL,
XH varchar(30) NOT NULL INDEX index_memoryoptimizedtable_XH NONCLUSTERED (XH),
XM varchar(20) NOT NULL,
DG varchar(10) NOT NULL,
SSZ varchar(2) NOT NULL,
CONSTRAINT PK_memoryoptimizedtable PRIMARY KEY NONCLUSTERED (ID),
-- See SQL Server Books Online for guidelines on determining appropriate bucket count for the index
INDEX hash_index_memoryoptimizedtable_ HASH (XH) WITH (BUCKET_COUNT = 9000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
GO

...全文
640 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-11-02
  • 打赏
  • 举报
回复
用以下表结构去测 参照以下例子去查找原因 e.g.
USE [MemoryDB]
GO

CREATE TABLE [dbo].[MemTab]
(
	ID [INT] NOT NULL,
	Name [NVARCHAR](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
	Type [NVARCHAR](20) COLLATE Chinese_PRC_CI_AS NOT NULL,

 PRIMARY KEY NONCLUSTERED HASH 
(
	ID
)WITH ( BUCKET_COUNT = 1024)
)WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )

GO


INSERT INTO [MemTab](ID,Name,Type) VALUES(1,'Roy','Type1');
SELECT * FROM MemTab;
UPDATE MemTab SET Name='Roy_88'
SELECT * FROM MemTab;
DELETE MemTab;
SELECT * FROM MemTab;

--DROP TABLE MemTab;
中国风 2016-11-02
  • 打赏
  • 举报
回复
中国风 2016-11-02
  • 打赏
  • 举报
回复
引用 3 楼 wwfxgm 的回复:
单单代码这样修改。 我在前台更新数据。还是会报错的。
不修改你的语句都执行不了,明白 首先建好表,在数据库里能不能修改?能修改那就是你的程序调用方法 用新功能点时,自已要去了解,不了解就盲目乱用谁也帮不了你
wwfxgm 2016-11-02
  • 打赏
  • 举报
回复
单单代码这样修改。 我在前台更新数据。还是会报错的。
xiaoxiangqing 2016-11-02
  • 打赏
  • 举报
回复
看来限制还蛮多。
wwfxgm 2016-11-02
  • 打赏
  • 举报
回复
谢谢版主赐教啊! 真心的感谢。 经过一番折腾,自己搞定了。 运行一下以下语句即可搞定了。
ALTER DATABASE 数据库名 SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON
最后还是非常感谢版主的帮忙。否则我也不会成功的。
中国风 2016-11-01
  • 打赏
  • 举报
回复
注意: varchar类型排序 nvarchar建索引定义排序
IF OBJECT_ID('dbo.biao','U') IS NOT NULL
    DROP TABLE dbo.biao
GO
CREATE TABLE dbo.biao
(
    ID int NOT NULL IDENTITY   CONSTRAINT PK_memoryoptimizedtable PRIMARY KEY NONCLUSTERED (ID), 
    KSKC varchar(90) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    ISBN varchar(30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    JCMC varchar(90) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    CBS   varchar(90) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    XBX   varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    BJ    varchar(30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    BB     varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    ZZ     varchar(80) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    YM     varchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    XH     Nvarchar(30)  COLLATE Chinese_PRC_BIN2 NOT NULL INDEX index_memoryoptimizedtable_XH NONCLUSTERED (XH), 
    XM     varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    DG varchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    SSZ   varchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
 
   -- See SQL Server Books Online for guidelines on determining appropriate bucket count for the index
   INDEX hash_index_memoryoptimizedtable_ HASH (XH) WITH (BUCKET_COUNT = 9000)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
参照: https://msdn.microsoft.com/zh-cn/library/dn133182(v=sql.120).aspx

6,129

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧