[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 如何用批处理来修改SQL数据库中表的结构?

在SQL数据库 local 中的表  mem_localmemberbaseinfo 的列ID,是主键,他的值是递增的,默认列的标识是 否,如图,

在我使用批处理操作数据库的时候,我要将这个ID的标识改成是,用完批处理后又要改成否,如图,这个能不能用批处理做出来,VBS也可以,

百度了一下,这个在SQL中是有的,但我要改到批处理中来

SQLServer数据库自增长标识列的更新修改操作方法
在日常的sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号。比如文章编号、记录序号等等。自增长的标识列的引用很大程度上 方便了数据库程序的开发,但是有时这个固执的字段类型也会带来一些麻烦。
一、修改标识列字段的值:(在执行insert时,将ID手动的 设置成想要的值)
有时,为了实现某个功能,需要修改类型为Identity自增长类型的字段的值,但由于标识的类型所限,这种操作默认是不允许的。比如,目前数据库有10 条正常记录,引时删除5条,那么如果再添加数据时,自增长的标识列会自动赋值为11,可这时如果想在插入数据时给赋值6呢,默认是不允许的。如果说想改变 主键标识符的值,完全由自已控制标识字段的插入,方法是有的,如下:
SET IDENTITY_INSERT [TABLE][ON|OFF]
使 用上述语句,可以方便的控制某个表的某个自增长标识列是否自动增长,也就是说是否允许你在inert一条记录时手动指定主键标识列字段的值。


如果指定为ON,则可以insert时指定主键标识字段的值,该值不自动增长。如果使用完毕,还需使用这个语句将开关关闭到默认状态OFF,不然下次 insert数据时该字段还是不会自动增长,要做到有始有终嘛。只是每次插入时都要手动的设置一个主键值,示列如下:
set identity_insert  question_title on   //开启手动设置
insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello');  //手动的向数据库插入数据




二、重置标识列字段值:
当数据记录被删除一部分后,后面再添加的新数据记录,标识列数值会有很大的空闲间隔,看上去不是很爽。即使你删除表中全部记录,identity标识列的 值还是会无何止的自动增加变大,而不是从头开始增长。通过下面这条语句可以重置自增长字段的值:
DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1])
上述语句把指定表的ID值(种子值)强制重设为1。然而,如果你不想将ID重设为1,你可以用你想用的ID值(种子值)替代第三个参数。如果你想知道当前 的ID值(种子值),而不想重设标识种子,这时你就要用NORESEED,而不用再去设置第三个参数。


DBCC checkident(question_title,reseed,1)

insert into question_title (f_valid,f_questionTitle) values(5,'hello');



        如果将表中记录都删除后,执行上面的一句话,这时ID的自增长值已被重设,再insert插入记录到数据库时,ID就可以从设置的1开始,以后每次插入的 记录还是自动增长。
执行成功后提示如下:
--检查标识信息: 当前标识值 '9',当前列值 '1'。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

说明:以上显示数据库某表中当前ID最大值为9,当前设置的ID值为1。

看样子是SQL Server 2000,更改标识列属性不是你想的那么简单,而且你需要的是sql脚本而非批处理

TOP

  1. @echo off
  2. >"C:\test.sql" echo set identity_insert  question_title on   //开启手动设置
  3. >>"C:\test.sql" echo insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello');  //手动的向数据库插入数据
  4. "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\osql.exe" -S "服务器名" -U "用户名" -P "密码" -d "数据库名" -i "C:\test.sql" >"C:\test.txt"
复制代码

TOP

回复 3# DAIC


   这样操作会提示

消息 8106,级别 16,状态 1,服务器 YW-PUBWIN1,行 1
表 'mem_localmemberbaseinfo' 没有标识属性。无法执行 SET 操作。

TOP

回复 2# pcl_test


    是的,版主, MSDE 2000 SQL,SQL脚本也可以从批处理执行,只是有点麻烦

TOP

回复 4# lovealei


    我没有这样的数据库无法测试。你把玩着的SQL发出来吧。

TOP

返回列表