我的应用程序使用LocalDb实例来存储它的数据。我注意到LocalDb分配标识的方式有一个怪癖(解释更多here),我想避免。链接的答案解释了这可以通过设置SQL Server跟踪标志来完成,并解释如何为“全脂”SQL Server执行此操作。
是否可以在LocalDb上设置跟踪标志?当我的应用程序按需启动时,可以通过连接字符串完成吗?
我有类似的问题,并相信我有一个解决方法......
启动Regedit并找到您的localdb注册表项。对我来说这是
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12E.LOCALDB\MSSQLServer\
在此键中创建另一个名为Parameters的键。
在Parameters项中,创建一个名为SQLArg0的字符串(REG_SZ),并将其值设置为-T272。
通过在命令提示符中运行SQLLOCALDB.EXE
来停止LocalDB进程,并将stop
作为参数和实例的名称传递。例如:
C:\> sqllocaldb stop mssqllocaldb
然后通过连接到它上面的数据库使LocalDB自动启动。
运行查询DBCC TRACESTATUS(),您应该看到跟踪标志272存在。例如:
C:\>sqlcmd -S (LocalDB)\MSSQLLocalDB -Q "DBCC TRACESTATUS();"
为了测试这一点,我一直在使用VS2015服务器资源管理器来探索数据库。在任务管理器(sqlservr.exe)中杀死LocalDB进程,连接到VS2015中的数据库并手动添加新行会导致我的自动增量值跳过1000.添加上述注册表hack后,手动终止LocalDB进程导致下一个生成的标识值跳过。
HTH