关于获取自增值:SCOPE_IDENTITY() 不会产生并发问题 @@Identity就不安全了
自增归0:
方法一: 清空所有数据,并将自增字段恢复从1开始计数
truncate table 表名
方法二: dbcc checkident (''table_name'', reseed, new_reseed_value) 当前值设置为 new_reseed_value。如果自创建表后没有将行插入该表,则在执行 DBCC CHECKIDENT 后插入的第一行将使用 new_reseed_value 作为标识。否则,下一个插入的行将使用 new_reseed_value + 1。如果 new_reseed_value 的值小于标识列中的最大值,以后引用该表时将产生 2627 号错误信息。
方法二 不会清空已有数据,操作比较灵活,不仅可以将自增值归零,也适用于删除大量连续行后,重新设置自增值并插入新的数据;或从新的值开始,当然不能和已有的冲突。
当表中有了一下数据后
执行语句 DBCC CHECKIDENT (''dbo.Person'', RESEED, 10) 后再通过Management Studio添加数据时,ID就会自动从11开始,也就是new_reseed_value+1开始
批量导入数据时,先把索引删掉,插完之后再重建索引,有利于插入速度,同时可以减少索引碎片(未拷证)
字符比较时,SQL默认不区分大小写~
想赋空值怎么办?
DBNull::Value
SQL SERVER 2000/2005中默认不区分大小写,可以通过collate Chinese_PRC_CS_AS来要求区分大小写,可以通过collate Chinese_PRC_CI_AS恢复默认的不区分大小写*/
create database test COLLATE Chinese_PRC_CS_AS --这样创建的数据库中区分大小写
alter database test COLLATE Chinese_PRC_CS_AS --修改后的数据库中区分大小写
但这样在查询时怎么还不区分大小写呢? 现在只能在区要区分的列后边加上 collate Chinese_PRC_CS_AS_WS
http://pc.sheup.com/pc/pc3898.htm
select * from a,bwhere a.*=? or b.*=? 这样写效率最低,还是用union吧
清缓存查看执行计划
SELECT cacheobjtype, sql FROM sys.syscacheobjects;
DBCC freeproccache;