新闻建站cms系统、政府cms系统定制开发

广州网站建设公司-阅速公司

asp.net新闻发布系统、报纸数字报系统方案
/
http://www.ysneo.com/
广州网站建设公司
您当前位置:首页>sqlserver数据库

sqlserver数据库

金蝶云星空批量修复种子

发布时间:2025/3/3 9:52:13  作者:Admin  阅读:13  

广告:

--查询种子表异常
DECLARE @tableName VARCHAR(255);
DECLARE @tableName1 VARCHAR(255);
DECLARE @primaryKey VARCHAR(255);
DECLARE @id bigINT;
DECLARE @id1 bigINT;
DECLARE @type VARCHAR(255);
DECLARE My_Cursor1 CURSOR --定义游标
FOR
 (SELECT NAME
 FROM sysobjects
 WHERE xtype = 'U'
  AND ( NAME LIKE 'Z_%' )) --查出需要的集合放到游标中
 
OPEN My_Cursor1; --打开游标
 
FETCH NEXT FROM My_Cursor1 INTO @tableName; --读取第一行数据
 
WHILE @@FETCH_STATUS = 0
 BEGIN 
 
 
 SET @id1 = 0;
 
 SELECT @tableName1 = 'T'
    + Substring(@tableName, 2, Len(@tableName)-1);
 
 IF Object_id(@tableName1, 'U') IS NOT NULL
 BEGIN
  SET @primaryKey =NULL;
 
  SELECT @primaryKey = COLUMN_NAME
  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  WHERE TABLE_NAME = @tableName1
 
  IF @primaryKey IS NOT NULL
  BEGIN
   SELECT @type = b.NAME
   FROM syscolumns a,
    systypes b
   WHERE a.id = Object_id(@tableName1)
    AND a.xtype = b.xtype
    AND a.NAME = @primaryKey
 
   IF @type = 'int'
   OR @type = 'bigint'
   BEGIN
   DECLARE @sql NVARCHAR(1000);
 
   SET @sql = 'select @a = isnull(max(' + @primaryKey
     + '),0) from ' + @tablename1
 
   EXEC Sp_executesql
    @sql,
    N'@a bigint output',
    @id1 output--将exec的结果放入变量中的做法
						 SELECT @id = Ident_current(@tableName); 
   IF( @id < @id1 )
    PRINT @tablename + ':' + CONVERT(VARCHAR(8000), @id)
    + ',' + @tablename1 + ':'
    + CONVERT(VARCHAR(8000), @id1)
   END
  END
 END;
 
 SELECT @tableName1 = 'T'
    + Substring(@tableName, 2, Len(@tableName)-1)
    + '_H';
 
 IF Object_id(@tableName1, 'U') IS NOT NULL
 BEGIN
  SET @primaryKey =NULL;
 
  SELECT @primaryKey = COLUMN_NAME
  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  WHERE TABLE_NAME = @tableName1
 
  IF @primaryKey IS NOT NULL
  BEGIN
   SELECT @type = b.NAME
   FROM syscolumns a,
    systypes b
   WHERE a.id = Object_id(@tableName1)
    AND a.xtype = b.xtype
    AND a.NAME = @primaryKey
 
   IF @type = 'int'
   OR @type = 'bigint'
   BEGIN
   DECLARE @sql1 NVARCHAR(1000);
 
   SET @sql1 = 'select @a = isnull(max(' + @primaryKey
     + '),0) from ' + @tablename1
 
   EXEC Sp_executesql
    @sql1,
    N'@a bigint output',
    @id1 output--将exec的结果放入变量中的做法
						 SELECT @id = Ident_current(@tableName); 
   IF( @id < @id1 )
    PRINT @tablename + ':' + CONVERT(VARCHAR(8000), @id)
    + ',' + @tablename1 + ':'
    + CONVERT(VARCHAR(8000), @id1)
   END
  END
 END;
 
 FETCH NEXT FROM My_Cursor1 INTO @tableName; --读取下一行数据
 END
 
CLOSE My_Cursor1; --关闭游标
 
DEALLOCATE My_Cursor1; --释放游标
 
 
 
--修复种子表
 
 
DECLARE @tableName varchar(255);
DECLARE @tableName1 varchar(255);
declare @primaryKey varchar(255);
declare @id int;
declare @id1 int;
DECLARE My_Cursor1 CURSOR --定义游标
FOR (select name from sysobjects where xtype='U' and (name like 'Z_%')) --查出需要的集合放到游标中
OPEN My_Cursor1; --打开游标
FETCH NEXT FROM My_Cursor1 into @tableName ; --读取第一行数据
 
WHILE @@FETCH_STATUS = 0
 BEGIN
	 print '-----------------------------------------------------------------------------------------------------------------------------------------------------';
	 print '----------------------------------------------------------start handler :'+@tableName +'-------------------------------------------------------------';
	 print '-----------------------------------------------------------------------------------------------------------------------------------------------------';
	 print '种子表:'+@tableName;
 select @id = IDENT_CURRENT(@tableName); -- 获取种子表的当前主键值
	 print '种子表的当前主键值:'
	 print @id;
	 set @id1 = 0;
	 select @tableName1 = 'T'+ substring(@tableName,2,len(@tableName)-1);
	 print '业务表对象及ID值:'+@tableName1
	 print OBJECT_ID(@tableName1, 'U'); -- 返回业务表对象的ID值
	 IF OBJECT_ID(@tableName1, 'U') IS NOT NULL --说明这个表存在
	 print '--------------------------------------------处理业务表:'+@tableName1+'-----------------------------------------------------------';
		BEGIN
		 set @primaryKey =null;
		 SELECT @primaryKey = COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=@tableName1 --获取业务表的主键名称
		 print '业务表的主键名称:'+ @primaryKey;
		 if @primaryKey is not null
			 begin
				 declare @sql NVARCHAR(1000);
				 set @sql = 'select @a = isnull(max('+@primaryKey+'),0) from ' + @tablename1 --获取业务表的主键值,构建sql
				 print '构建获取业务表的主键值sql:'+@sql;
				 BEGIN TRY
					 exec sp_executesql @sql,N'@a int output',@id1 output--将主键值放入id1中
					 print '业务表的最新主键值:'
					 print @id1
					 if(@id<@id1) --
						 begin
						 print @tablename +':'+Convert(varchar(8000),@id) +','+@tablename1 +':'+Convert(varchar(8000),@id1);
						 dbcc checkident(@tablename,reseed,@id1) --更新种子表主键值为最新
						 print '更新种子表主键值为最新业务表的主键值'
						 end
 
				 END TRY
				 BEGIN CATCH
				 print 'error is:'+ERROR_MESSAGE()
					 --SELECT 'There was an error! ' + ERROR_MESSAGE()
					 ---ProcErrorLog --调用上面的存储过程,保存错误日志
 
				 END CATCH;
  end
		END;
	 select @tableName1 = 'T'+ substring(@tableName,2,len(@tableName)-1)+'_H';
	 print '业务表对象及ID值_H:'+@tableName1;
 print OBJECT_ID(@tableName1, 'U'); -- 返回业务表对象的ID值
 IF OBJECT_ID(@tableName1, 'U') IS NOT NULL
	 print '--------------------------------------------处理H业务表:'+@tableName1+'-----------------------------------------------------------';
		BEGIN
		 set @primaryKey =null;
		 SELECT @primaryKey = COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=@tableName1
		 print '_H业务表的主键名称::'+ @primaryKey;
		 if @primaryKey is not null
			 begin
				 declare @sql1 NVARCHAR(1000);
		 		 set @sql1 = 'select @a = isnull(max('+@primaryKey+'),0) from ' + @tablename1
				 print '构建获取_H业务表的主键值sql::'+@sql;
				 BEGIN TRY
					 exec sp_executesql @sql1,N'@a int output',@id1 output--将exec的结果放入变量中的做法
					 print '业务表_H的最新主键值:'
					 print @id1
					 if(@id<@id1)
						 begin
						 print @tablename +':'+Convert(varchar(8000),@id) +','+@tablename1 +':'+Convert(varchar(8000),@id1);
						 dbcc checkident(@tablename,reseed,@id1) --更新种子表主键值为最新
						 print '更新种子表主键值为最新业务表的主键值'
						 end
				 END TRY
				 BEGIN CATCH
				 print 'error is:'+ERROR_MESSAGE()
					 --SELECT 'There was an error! ' + ERROR_MESSAGE()
					 ---ProcErrorLog --调用上面的存储过程,保存错误日志
				 END CATCH;
			 end
		END;
 
	 FETCH NEXT FROM My_Cursor1 INTO @tableName; --读取下一行数据
 END
	CLOSE My_Cursor1; --关闭游标
DEALLOCATE My_Cursor1; --释放游标
 
 

广告:

相关文章
金蝶云星空
cms新闻系统购买咨询
扫描关注 广州阅速软件科技有限公司
扫描关注 广州阅速科技