如何解决MSSQL自增字段突然增大1000中的自增跳跃问题?

昨天看服务器提示有补丁升级,就重启了一下服务器。可是今天用户反馈一个记录的Id跳了1000开始,心想这下是不是程序的bug,或者有数据丢失了?

赶紧查,虽是虚惊一场,但还是要吐槽下微软的MSSQL 2012,这个变化居然成了默认设置,开始学Oracle那套Sequence的做法了。

参考了这篇文章:https://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-column-Value-Jump-Issue

用了方法2进行了全局设置,不想因为这个改程序,还得升级SQL Server版本。

设置方法如下:
1、打开Sql Server Configuration配置管理器
2、左侧点击Sql Server服务
3、右侧右键点击SQL Server(MSSQLSERVER)
4、点击启动参数
5、在参数里输入 -T272 ,然后点击增加
6、点击确定,手动重启服务后生效

2019年7月14日更新:

参数不能小写,一定要用大写的-T272才能生效。

微软MSSQL(SQL Server)的版本及Express版的连接字符串

今天体验了一下SQL SERVER 2017 Express版本,将MSSQL 2008 R2的数据库附加到新版本,发现从2008跳到2017的中间版本还真多。

另外大家熟知的SQL2000应该是80,SQL2005为90。

以前没用过Express版本,对于C#程序的Web.config的数据库连接字符串有点变化需要注意:比如说公用一台服务器的时候可以用.也可以用(local),还可以用127.0.0.1,但是如果是Express版就要用.\sqlexpress或者(local)\sqlexpress或者127.0.0.1\sqlexpress这种表示。如果你是独立的数据库服务器,你只需要改一下对应的服务器IP或名称即可,别忘了开启MSSQL的远程访问。

SQL中如何删除一个表中重复的纪录

忙中偷闲,整理了30772个汉语成语,但是在整理的过程中药删除大概1025条重复的数据,这些数据应该是在采集整理的过程中网络中断造成的重复。

下面的就是一条简单的语句用来删除一个表中重复的记录:

DELETE FROM ChengYu WHERE (ID NOT IN (SELECT ID = MIN(ID) FROM ChengYu GROUP BY name))

DELETE FROM Table WHERE (KeyID NOT IN (SELECT KeyID = MIN(KeyID) FROM Table GROUP BY Name))

Web开发中涉及的数据库连结方式

今天开始了解[URL=http://www.riacn.com]RIA[/URL]的一些知识,无意之间看到了一些提问者对数据库连结方式的提问,然后从网络上搜索了一下,整理在这里,希望对新手有帮助。

第一种叫做DSN-less,也就是不用DSN (Data Source Name,数据源名称)的联机方式。
这种方法是通过系统的ODBC驱动程序来连接数据库,ODBC就像翻译人员一样,让我们用同一种沟通方式来指挥不同的数据库,但是它的效率较差一些
ACCESS
“DRIVER={Microsoft Access Driver(*.mdb)};DBQ=数据库的完整路径”
Microsoft SQL数据库
“Driver={SQL Server};Server=服务器名称;Database=数据库名称;uid=登入名称;pwd=密码;”
MySQL数据库
“Driver={mysql};Database=数据库名称;uid=登入名称;pwd=密码;”
Oracle数据库
“Driver={Microsoft ODBC for Oracle};Server=数据库名称;uid=登入名称;pwd=密码;”

第二种叫做OLE DB Connection,OLE DB Connection(OLE DB联机)称为自定义联机字符串方式,它不需经由ODBC联机,效果也比较好

ACCESS
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库的完整路径;User id=登入名称;Password=密码;”
Microsoft SQL数据库
“Provider=SQL OLEDB;Data Source=服务器名称;Initial Catalog=数据库名称;User id=登入名称;Password=密码;”
Oracle数据库
“Provider=OraOLEDB.Oracle;Data Source=数据库名称;User id=登入名称;Password=密码;”

第三种是系统DSN方式,这种对于网络开发应用不大,以前的C/S结构的程序用的较多,比如我原来使用的IERP5.2系统,就是使用了系统DSN,每个客户端都生成一个系统数据源,然后ERP客户端程序调用这个数据源。

以后的开发可能使用最多的是MsSQL和Oracle数据库,同时选择较好的连接方式:OLE DB
1、“Provider=OraOLEDB.Oracle;Data Source=数据库名称;User id=登入名称;Password=密码;”
2、“Provider=SQL OLEDB;Data Source=服务器名称;Initial Catalog=数据库名称;User id=登入名称;Password=密码;”