/*
存储过程名称:初始化新数据库
功能描述:1.创建新数据库
2.建表、存储过程等
编制者:fayifu
完成日期:2003.07.17
*/
IF EXISTS (SELECT name FROM sysobjects WHERE name = N'InitializeNewDatabase' AND type = 'P')
DROP PROCEDURE InitializeNewDatabase
GO
CREATE PROCEDURE InitializeNewDatabase
@strDbName varchar(20) --创建的数据库名
AS
--SET NOCOUNT ON
DECLARE @Conn int, --创建XLS的ADO.Connection连接对象
@nHr int, --OLE返回值
@strSrc varchar(255), --OLE错误源
@strDesc varchar(255), --OLE错误描述
@strConn varchar(255), -- OLE DB Connection string for Jet 4 Excel ISAM
@strSql varchar(8000) --INSERT INTO XLS T-SQL
--创建XLS的ADO连接字符串
SET @strConn = 'DSN=DlSecond;UID=sa;PWD=;
APP=Microsoft(R) Windows (R) 2000 Operating System;WSID=DSY-WU;
DATABASE=DlDataSecond'
--创建ADO.Connection对象
EXEC @nHr = sp_OACreate 'ADODB.Connection', @Conn OUT
IF @nHr <> 0
BEGIN --返回OLE错误
EXEC sp_OAGetErrorInfo @Conn, @strSrc OUT, @strDesc OUT
SELECT Error = convert(varbinary(4),@nHr), Source = @strSrc, Description = @strDesc
RETURN
END
--设置ADO.Connection对象连接字符串属性
EXEC @nHr = sp_OASetProperty @Conn, 'ConnectionString', @strConn
IF @nHr <> 0
BEGIN --返回OLE错误
EXEC sp_OAGetErrorInfo @Conn, @strSrc OUT, @strDesc OUT
SELECT Error = convert(varbinary(4), @nHr), Source = @strSrc, Description = @strDesc
RETURN
END
--调用ADO.Connection对象的方法Open打开ADO连接
EXEC @nHr = sp_OAMethod @Conn, 'Open'
IF @nHr <> 0
BEGIN --返回OLE错误
EXEC sp_OAGetErrorInfo @Conn, @strSrc OUT, @strDesc OUT
SELECT Error = convert(varbinary(4),@nHr), Source = @strSrc, Description = @strDesc
RETURN
END
to goodhal:
to pengdali(大力 V2.0)
我现在需要实现的一个功能如下:有一个数据累增的数据库Data,考虑数据量很大,
所以由主程序按照一定的存储策略(如:每月保存一个数据)按时间对其划分,因此就
以Data_2003_7、Data_2003_8等名称,动态的创建数据库,这些数据库的表的数据结构
都是相同的,所以对这些表的增加修改操作若能做成存储过程,会提高效率。
动态创建数据库因为需要将数据库名以参数的形式传递,所以最好也能做成存储过程。
动态创建数据库是没有问题的,但在动态创建出来的数据库中再动态创建存储过程就不行了。
另:
用你的Delphi程序,SQL文件如下:
USE DB_ES_CData_1_1
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]
@a_iPoint_Id int,@a_iMV_Id int , @a_iSPI_SysId int,@a_dtCreateDT datetime
AS
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
会出现异常,提示SQL语句有语法错误
Re:
memo1.text:='USE DB_ES_CData_1_1
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]'
adoquery1.Close;
adoquery1.SQL.Text:=memo1.text;
adoquery1.ExecSQL;
memo1.text:='CREATE PROCEDURE [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]
@a_iPoint_Id int,@a_iMV_Id int , @a_iSPI_SysId int,@a_dtCreateDT datetime
AS'
adoquery1.Close;
adoquery1.SQL.Text:=memo1.text;
adoquery1.ExecSQL;
to pengdali(大力 V2.0)
我现在需要实现的一个功能如下:有一个数据累增的数据库Data,考虑数据量很大,所以由主程序按照一定的存储策略(如:每月保存一个数据)按时间对其划分,因此就以Data_2003_7、Data_2003_8等名称,动态的创建数据库,这些数据库的表的数据结构都是相同的,所以对这些表的增加修改操作若能做成存储过程,会提高效率。
动态创建数据库因为需要将数据库名以参数的形式传递,所以最好也能做成存储过程。
动态创建数据库是没有问题的,但在动态创建出来的数据库中再动态创建存储过程就不行了。
另:
用你的Delphi程序,SQL文件如下:
USE DB_ES_CData_1_1
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[P_Create_T_CDataInfo_SPISysId_Year_Month_Day_Hour]
@a_iPoint_Id int,@a_iMV_Id int , @a_iSPI_SysId int,@a_dtCreateDT datetime
AS
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
会出现异常,提示SQL语句有语法错误
AssignFile(sqlfile, 'update.sql');
Reset(sqlfile);
while not eof(sqlfile) do
begin
Readln(sqlfile, s);
sqltext:=s;
while (not eof(sqlfile)) and (uppercase(trim(s))<>'GO') do
begin
Readln(sqlfile, s);
if (uppercase(trim(s))<>'GO') then
sqltext:=sqltext+' '+s;
end;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqltext);
adoquery1.ExecSQL;
end;
CloseFile(sqlfile);