|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。数据|数据库|革新
----------------------------------------------------------------------------------
--革新SP到数据库--
----
--&Old&来历数据库名--
--&New&方针数据库名--
----
--方针数据库中表名为来历数据库中的用户自界说SP、FN等(可按提醒增加--具体提醒今后加)--
--表中的列名则为其参数--
----
--黄宗银--
--2005.01.19--
----------------------------------------------------------------------------------
ALTERPROCEDUREdbo.P_Ref
AS
DECLARE@SQLnvarchar(4000)
--不存在数据库则创立
IFNOTEXISTS(
SELECT[name]
FROMmaster.dbo.sysdatabases
WHERE[name]=&New&
)
BEGIN
CREATEDATABASE&New&
END
--掏出SP、FN、TF其name、id
DECLARE@TblCURSOR
SET@Tbl=CURSORLOCALSCROLLFOR
SELECT[name],[id]
FROM&Old&.dbo.sysobjects
--要增添革新范例请修正这里
WHERE([name]LIKEP%OR[name]LIKEF%OR[name]LIKETF%)
AND(type=PORtype=FNORtype=TF)
DECLARE@TblNamenvarchar(100)
DECLARE@TblIDint
--以@TblName为名创立表
OPEN@Tbl
FETCHNEXTFROM@TblINTO@TblName,@TblID
WHILE(@@FETCH_STATUS=0)
BEGIN
--已存在该表则删除
IFEXISTS
(
SELECT[name]FROM&New&.dbo.sysobjects
WHERE[name]=@TblName
ANDtype=U
)
BEGIN
SET@SQL=DROPTABLE+&New&+.dbo.+@TblName
EXECSP_ExecuteSQL@SQL
IF(@@ERROR0)
BEGIN
RAISERROR(删除已存在的表%s失利!,11,1,@TblName)
RETURN
END
END
--假如没有参数则跳过
IF((SELECTCount(*)FROMdbo.syscolumnsWHERE[name]LIKE@%AND[id]=@TblID)=0)
BEGIN
FETCHNEXTFROM@TblINTO@TblName,@TblID
CONTINUE
END
--掏出列名及其范例
DECLARE@ColCURSOR
SET@Col=CURSORLOCALSCROLLFOR
SELECT&Old&.dbo.syscolumns.[name],&Old&.dbo.systypes.[name]
FROM&Old&.dbo.syscolumnsLEFTOUTERJOIN
&Old&.dbo.systypesON&Old&.dbo.syscolumns.xtype=&Old&.dbo.systypes.xtype
WHERE&Old&.dbo.syscolumns.[name]LIKE@%
AND&Old&.dbo.syscolumns.[id]=@TblID
ORDERBY&Old&.dbo.syscolumns.colorder
DECLARE@ColNamenvarchar(50)
DECLARE@ColTypenvarchar(20)
--机关SQL语句
SET@SQL=CREATETABLE&New&.dbo.+@TblName+(
OPEN@Col
FETCHNEXTFROM@ColINTO@ColName,@ColType
DECLARE@ColNameLastnvarchar(50)
SET@ColNameLast=
WHILE(@@FETCH_STATUS=0)
BEGIN
SET@ColName=SubString(@ColName,2,Len(@ColName)-1)
--跳太重复的列
IF(@ColName@ColNameLast)
BEGIN
SET@SQL=@SQL+@ColName++@ColType+,
SET@ColNameLast=@ColName
END
FETCHNEXTFROM@ColINTO@ColName,@ColType
END
SET@SQL=SubString(@SQL,1,Len(@SQL)-1)
SET@SQL=@SQL+)
--实行SQL语句
EXECSP_ExecuteSQL@SQL
IF(@@ERROR0)
BEGIN
RAISERROR(创立表%s失利!,11,1,@TblName)
RETURN
END
--创立下一个表
FETCHNEXTFROM@TblINTO@TblName,@TblID
END
RETURN@@ERROR
提供TCP/IP、ODBC和JDBC等多种数据库连接路径。 |
|