软件交付用户后在使用过程中发现错误或需要更新,如何用程序来更新或修改存储过程?
解决方案 »
- delphi学习日记之数据库LOCATE GOTOKEY查询(上)
- 如何使组件仓库组件中管理的组件不出现在设计窗体上面?高分求教,100分相送
- 在DBGRID中如何使某一列的值在前台显示了对号,后台存的是数字?
- 帐号奉送--(修罗)
- 如何用ADO+SQL Server 2000 +Delphi开发跨网段的数据库?
- 小弟有一事不明,大家过来帮帮忙!动态赋值问题
- 缺少更新或刷新的键列信息
- 制作Delphi6的安装程序哪有下载?
- TreeView问题?
- 将一块形状不规则的区域送入剪贴板是如何实现的(Lasso工具)?
- 求wodHttpDLX 1.5.3,试用版也行
- D2009关于winexec的问题
...
vSQL: string;
begin
vSQL := ' ALTER PROCEDURE Oakland_authors'
+ ' WITH ENCRYPTION '
+ ' AS '
+ ' SELECT au_fname, au_lname, address, city, zip'
+ ' FROM pubs..authors '
+ ' WHERE state = ''CA'''
+ ' ORDER BY au_lname, au_fname';
with adoquery1 do
begin
close;
sql.Clear;
sql.text := vSQL;
ExecSQL;
end;
end;
CreateProcedureQuery-用于存放你最新存储过程的SQL
ProcedureName-存储过程名
CreateDateTime-若原时间小于CreateDateTime,则删除原先的存储过程,创建CreateProcedureQuery中最新的存储过程(这样只执行一次)
procedure TDataMUpdate.ReplaceProcedure(DataBaseName: String;
CreateProcedureQuery: TQuery; ProcedureName, CreateDateTime: String);
begin
QExecSQL.Close;
QExecSQL.DatabaseName:= DataBaseName;
QExecSQL.SQL.Text:= 'select * from dbo.sysobjects where id = object_id(N''[dbo].[' +ProcedureName+ ']'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1';
QExecSQL.Open;
//没有,则新建
if QExecSQL.IsEmpty then begin
CreateProcedureQuery.Close;
CreateProcedureQuery.DatabaseName:= DataBaseName;
CreateProcedureQuery.ExecSQL;
end else
//创建时间太小,则替换
if FormatDateTime('YYYY-MM-DD', QExecSQL.FieldByName('crDate').AsDateTime) < CreateDateTime then begin
QExecSQL.Close;
QExecSQL.DatabaseName:= DataBaseName;
QExecSQL.SQL.Text:= 'drop procedure [dbo].['+ProcedureName+']';
QExecSQL.ExecSQL;
CreateProcedureQuery.Close;
CreateProcedureQuery.DatabaseName:= DataBaseName;
CreateProcedureQuery.ExecSQL;
end;
end;ReplaceProcedure('NTs', QJS, 'sP_JS', '2008-04-01');这样,NTs数据库中若不存在sP_JS存储过程,则会创建一个,若已经存在且时间小于'2008-04-01',则将原先的删除,并重创建一个
那么新的sP_JS的创建肯定大于'2008-04-01',不会出现重复创建问题
视图可以一样操作