请教SQL SERVER7.0 的问题

iwin 2000-08-03 12:12:00
1、如何将已经建立好的数据库及其内部的数据库对象(如表、储存过程等)导出为一系列的SQL语句?目的是用这些语句在别的机器上重建相同结构的数据库。
2、如何不使用SQL SERVER提供的自动递增的数据类型,产生类似的效果?因为我想在必要时可以重置ID的基数,此方法要能在多用户的环境使用.
...全文
506 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
neil 2000-08-18
  • 打赏
  • 举报
回复
iwin,pjy的回答你满意么? 问题解决了没? 怎么不给分??
pjy 2000-08-11
  • 打赏
  • 举报
回复
我以前做过同样的功能!在一个输入框中,拥护直接回车,表示新增号码!按我在上面的方法得到一个ID,同时检测它的唯一性;如果拥护输入了号码,直接检验输入号码的唯一性。如果检验不通过,新增的重新得到一条;输入的提示再输入一条!
你在设计表中的VALUE时,将它设大一点,或加一个前缀,以避免太多的重复!
pjy 2000-08-11
  • 打赏
  • 举报
回复
实际上,这两个表可以做到在一个系统中都主建立一个,每一个表中的一条记录对应类似你需要的一个ID。所以表很小。同时,回写程序最好使用存储过程,以减少锁定时间。同时需要注意:一旦取出记录,就要回写,即使不使用此ID,也不能再用!(可以再用的方法也有,有兴趣...)
CREATE PROCEDURE up_findid
@find_idmc char(12),
@return_id char(12) output,
@return_ws int output /*ID的位数*/
as
declare @li_i int
begin
select @return_id = Value,@return_ws = Digit from sys_code where CodeName = @find_idmc
if isnull(@return_id,'0') = '0'
begin
select @return_id = ''
select @return_ws = 0
end
else
begin

select @return_id = str(cast(@return_id as int) + 1)
update sys_Code set Value = @return_id where CodeName = @find_idmc

end
end
只是我在SQL SERVER 7中写的存储过程(与日期无关的)。在DELPHI中的调用你应该会!
参数@return_ws对应表中的一列,意思是你需要取的ID的位数。因为我前台需要将ID前需要补充‘0’,一保持所有ID位数相同!
iwin 2000-08-11
  • 打赏
  • 举报
回复
pjy:
我对你的方案有点了解了,但能不能在详细些,因为我刚学SQL。你新加的两个表是否都只有一条记录?回写过程是不是要作成存储过程?如果是,能否给出详细例子?因为我不懂怎样写存储过程。
谢谢!!
neil 2000-08-10
  • 打赏
  • 举报
回复
>如果我有两部分数据:一部分是旧数据,ID号已定;另一部分是新数据,ID号想要使用“年份
>+当年序号”。而且两部分数据都要人手输入。我应该怎样做?
~~~~~~~~~~~~
>解释一下“当年序号”:规定为10位数字,每一年均从“0000000001”开始递增1。

针对你的人工输入,是个insert事件,完全可以采用sql的触发机制去管理id号,而程序界面上无须操心id号的问题,那么,我的回答和gemini的回答你可以参考使用,你应该知道如何创建事件触发吧?
Gemini 2000-08-10
  • 打赏
  • 举报
回复
iwin看来你和我一样刚刚接触到SQL7,你的问题我也碰到过
1:鼠标右键点你要导出的表或者存储过程选择ALL Tasks中的Generate SQL Scripts......
会弹出一个窗口;点击Preview...按纽就会开始生成SQL语句了.
2:我写了一个存储过程,ID是按+1递增的,你可以看看:
CREATE procedure 存储过程名@name char(8)
as
declare @id numeric(9)
select @id=max(ID) from 表名
if (@id is null)

insert into 表名(ID,name) values('1',@name)
else
insert into 表名(ID,name) values(@id+1,@name)

这是我做实验用的,表中就只有ID和name两个字段名,当填入新的name时ID会按+1的方式递增

  • 打赏
  • 举报
回复
Q2:

iwin 2000-08-10
  • 打赏
  • 举报
回复
可能是我的表达不清楚,我的意思是:旧数据的ID号可以由人手输入(当然数据库要检验其唯一性),而新数据的ID号则由数据库自动生成,可以这样吗?(两部分的输入界面最好相同,但必要时还是可以用不同的输入界面,这里可能要有一个参数来控制)

请各位高手为我解决这个难题。
另外,neil:我真的不是很清楚怎样创建事件触发,所以对你的想法不了解。能够说详细一点吗?

衷心谢谢各位!!!
pjy 2000-08-10
  • 打赏
  • 举报
回复
我在做项目时,对于你这两种单据号的情况,是设立两个表,一个表是控制于日期无关的号码问题:表结构是FieldName,Valuestring (char):根据你需要的FieldName得到Valuesstring,加1回写进此表中;另一个表是控制与日期有关的号码问题:表结构是FieldName,FieldDate,FieldValue(char):根据你需要的FieldName和FieldDate得到FieldValue的值,如果为null,新增加一条记录...不为Null,加1回写!
此方法看似多加了两个表,但在实际使用时,却有使用max函数没有的太多优点!我觉得可以采用!
不清楚,请在联系!
lzliming 2000-08-10
  • 打赏
  • 举报
回复
可以嘛,保证新旧id不会重号就行。
qianxh 2000-08-08
  • 打赏
  • 举报
回复
想在数据库里执行脚本重建该数据库,就好比坐在自己家里建房子。不过你可以跑到外面推倒房子再重建。方法如下:
1. Backup database 再 Restore Database;
或者
2. 按wingsum所说生成脚本,在前面添加语句:
drop database yourdatabase
go
create database yourdatabase
...
go
use yourdatabase
go
.... -- 脚本内容
在master里执行。
iwin 2000-08-07
  • 打赏
  • 举报
回复
如果我有两部分数据:一部分是旧数据,ID号已定;另一部分是新数据,ID号想要使用“年份+当年序号”。而且两部分数据都要人手输入。我应该怎样做?

解释一下“当年序号”:规定为10位数字,每一年均从“0000000001”开始递增1。

请各位高手耐心指教。
zzj 2000-08-07
  • 打赏
  • 举报
回复
真是麻烦:你备份数据库(清空日志以避免过大)后再在新建的数据库中恢复不就对了吗?我就这样.
neil 2000-08-06
  • 打赏
  • 举报
回复
当然可以带参数,我上面写的那个就是带了参数的啊。@name就是传递进去的参数。
iwin 2000-08-06
  • 打赏
  • 举报
回复
请教neil:
存储过程能够带参数吗?我想用参数控制 是否需要自动生成ID 和 ID的基值及递增值。
Wingsun 2000-08-04
  • 打赏
  • 举报
回复
不可能吧,
你应该是没有选择中Generate the Create<Object>Command for each Object这个选项。
你要多看一看Formatting页和Options页的设置。
neil 2000-08-04
  • 打赏
  • 举报
回复
写个存取过程实现自动加1,在query工具里调用:idzh("名字"),代码入下:
你可以将insert功能改成update功能写到insert触发事件里
-------------------------------------------------------
CREATE procedure IDZH @name char(8)
as
declare @id numeric(9)
select @id=max(ID) from JYD_name
if (@id is null)
insert into jyd_name (ID,name) values('1',@name)
else
insert into jyd_name (ID,name) values(@id+1,@name)
-----------------------------------------------------------
iwin 2000-08-04
  • 打赏
  • 举报
回复
我试过Wingsun的方法,但好象不能把建立数据库的SQL语句导出来(即 CREATE DATABASE 语句)
Wingsun 2000-08-03
  • 打赏
  • 举报
回复
1.启动SQL Server Enterprise Manager.选中要处理的数据库,选择tools/Database Scripting...然后就可以了.

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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