CREATE PROCEDURE data_move
--2个变量:新旧数据库的名字
@obase varchar(20),
@nbase varchar(20),
AS
BEGIN
declare @name varchar(20);
--定义游标,查询出所有本月新建的表,"shuzhi%"
--定义动态查询语句的字符串
declare @sql_newTable nvarchar(300);
set @sql_newTable=N'declare cursor_newTable CURSOR FOR select N1.[name] from '+@nbase+'.sys.sysobjects AS N1 left OUTER JOIN '+@obase+'.sys.sysobjects AS N2  on N1.[name]=N2.[name] where N1.xtype='+char(39)+'U'+char(39)+' and N1.[name] like '+CHaR(39)+'shuzhi%'+CHaR(39)+' and N2.[name] is null';--select @sql_newTable;
--定义游标
exec sp_executesql @sql_newTable;
--打开游标
open cursor_newTable;
--取第一个新表的名字
FETCH NEXT From cursor_newTable into @name;
--比较FETCH_STATUS是否为零,判断是否有更多新表
while @@FETCH_STATUS = 0

BEGIN 
--因为旧库中不存在这样的表,所以在转移数据前先创建表
exec('CREATE TABLE '+@nbase+'.[dbo].' + @name + '(
[xwjID] [int] NULL,
[yali] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[wendu] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[midu] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[pinlv] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[liuliangshunshi] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[liuliangleiji] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[reliangshunshi] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[reliangleiji] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[yali2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[wendu2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[midu2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[pinlv2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[liuliangshunshi2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[liuliangleiji2] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[riqi] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[torf] [bit] NULL)') --取下一个表名
FETCH NEXT from cursor_newTable into @name END--关闭游标
close cursor_newTable;
--删除游标
deallocate cursor_newTable;
declare @name2 char(20)
--定义游标,取得新库中需要转移数据的表名
declare @sql_dataMove varchar(200);
set @sql_dataMove='declare cursor_dataMove cursor for select [name] from '+@obase+'.sys.sysobjects where [name] like "shuzhi%" and xtype="U"'
select @sql_dataMove;
exec sp_executesql @sql_dataMove;
--打开游标
open cursor_dataMove;--获得第一个需转移数据的表名
FETCH NEXT from cursor_dataMove into @name2;--循环
while @@FETCH_STATUS=0
begin
--定义动态查询语句变量
declare @sql_dataInsert nvarchar(300);
set @sql_dataInsert='insert into '+@obase+'.dbo.'+@name2+' select * from '+@nbase+'.dbo.'+@name2+' where datediff(month,[riqi],GetDate())>4';
--将5个月前的数据移动旧库中
exec sp_executesql @sql_dataInsert;
FETCH NEXT FROM cursor_dataMove into @name2;
end--关闭游标 
close cursor_dataMove;
--删除游标
deallocate cursor_dataMove;ENDGO
declare @oldbase varchar(20),@newbase varchar(20);set @oldbase='oldbb';
set @newbase='gksjkJY';exec data_move @oldbase,@newbase;
为什么找不到存储过程呢??
消息 156,级别 15,状态 1,过程 data_move,第 5 行
关键字 'AS' 附近有语法错误。
消息 2812,级别 16,状态 62,第 8 行
找不到存储过程 'data_move'。