82 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			MySQL
		
	
	
	
		
		
			
		
	
	
			82 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			MySQL
		
	
	
	
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--单位补充英文名称
							 | 
						|||
| 
								 | 
							
								IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Base_Unit' AND COLUMN_NAME = 'UnitEnName')
							 | 
						|||
| 
								 | 
							
								BEGIN
							 | 
						|||
| 
								 | 
							
									ALTER TABLE Base_Unit ADD UnitEnName nvarchar(200);
							 | 
						|||
| 
								 | 
							
								END
							 | 
						|||
| 
								 | 
							
								GO
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--替换数据表
							 | 
						|||
| 
								 | 
							
								IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'DataIdMove') AND type = N'U')
							 | 
						|||
| 
								 | 
							
								BEGIN
							 | 
						|||
| 
								 | 
							
								CREATE TABLE [dbo].[DataIdMove](
							 | 
						|||
| 
								 | 
							
									[OldId] [nvarchar](50) NOT NULL,
							 | 
						|||
| 
								 | 
							
									[NewIds] [nvarchar](50) NULL,
							 | 
						|||
| 
								 | 
							
									[ColumType] [nvarchar](50) NULL,
							 | 
						|||
| 
								 | 
							
								 CONSTRAINT [PK_DataIdMove] PRIMARY KEY CLUSTERED 
							 | 
						|||
| 
								 | 
							
								(
							 | 
						|||
| 
								 | 
							
									[OldId] ASC
							 | 
						|||
| 
								 | 
							
								)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
							 | 
						|||
| 
								 | 
							
								) ON [PRIMARY]
							 | 
						|||
| 
								 | 
							
								EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'OldId' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DataIdMove', @level2type=N'COLUMN',@level2name=N'OldId'
							 | 
						|||
| 
								 | 
							
								EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'NewIds' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DataIdMove', @level2type=N'COLUMN',@level2name=N'NewIds'
							 | 
						|||
| 
								 | 
							
								EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'ColumType' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DataIdMove', @level2type=N'COLUMN',@level2name=N'ColumType'
							 | 
						|||
| 
								 | 
							
								EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'替换数据表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'DataIdMove'
							 | 
						|||
| 
								 | 
							
								END
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								GO
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE PROC [dbo].[SP_DataIdMove]
							 | 
						|||
| 
								 | 
							
										@colums NVARCHAR(50) = NULL	,
							 | 
						|||
| 
								 | 
							
										@trueId NVARCHAR(50) = NULL	
							 | 
						|||
| 
								 | 
							
										--,@returnVal int output
							 | 
						|||
| 
								 | 
							
								AS
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								BEGIN
							 | 
						|||
| 
								 | 
							
								--DECLARE @returnVal int =0
							 | 
						|||
| 
								 | 
							
								--SET @returnVal = 0
							 | 
						|||
| 
								 | 
							
								DECLARE @OldId nvarchar(50),@NewId nvarchar(50)
							 | 
						|||
| 
								 | 
							
								DECLARE @tablename nvarchar(1000),@columnname nvarchar(1000)
							 | 
						|||
| 
								 | 
							
								DECLARE @sql nvarchar(2000) 
							 | 
						|||
| 
								 | 
							
								DECLARE cursor_Id CURSOR FOR -- 定义游标
							 | 
						|||
| 
								 | 
							
								   SELECT OldId ,NewIds FROM DataIdMove WHERE ColumType = @colums and NewIds = @trueId
							 | 
						|||
| 
								 | 
							
								   OPEN cursor_Id
							 | 
						|||
| 
								 | 
							
								   FETCH NEXT FROM cursor_Id INTO  @OldId,  @NewId -- 抓取下一行游标数据
							 | 
						|||
| 
								 | 
							
								   WHILE @@FETCH_STATUS = 0     --(-1 语句失败, -2 被提取行不存在)
							 | 
						|||
| 
								 | 
							
								      BEGIN			
							 | 
						|||
| 
								 | 
							
									    --SET @returnVal=@returnVal+1
							 | 
						|||
| 
								 | 
							
										--print @OldId
							 | 
						|||
| 
								 | 
							
										DECLARE cursor_name CURSOR FOR -- 定义游标
							 | 
						|||
| 
								 | 
							
										SELECT DISTINCT TABLE_NAME,COLUMN_NAME
							 | 
						|||
| 
								 | 
							
										FROM INFORMATION_SCHEMA.COLUMNS
							 | 
						|||
| 
								 | 
							
										WHERE COLUMN_NAME like '%'+@colums+'%' and TABLE_NAME not like 'View_%' 
							 | 
						|||
| 
								 | 
							
										OPEN cursor_name -- 打开游标
							 | 
						|||
| 
								 | 
							
										FETCH NEXT FROM cursor_name INTO  @tablename ,@columnname  -- 抓取下一行游标数据
							 | 
						|||
| 
								 | 
							
										WHILE @@FETCH_STATUS = 0     --(-1 语句失败, -2 被提取行不存在)
							 | 
						|||
| 
								 | 
							
										BEGIN
							 | 
						|||
| 
								 | 
							
											SET @sql = 'update ' + @tablename + ' set ' + @columnname + ' =REPLACE('+@columnname+', '''+@OldId+''', '''+@NewId+''') where '+ @columnname + ' like '+'''%'+@OldId+'%'';' ;
							 | 
						|||
| 
								 | 
							
											--print @sql 
							 | 
						|||
| 
								 | 
							
											EXEC sp_executesql @sql
							 | 
						|||
| 
								 | 
							
								     	FETCH NEXT FROM cursor_name INTO @tablename,@columnname;
							 | 
						|||
| 
								 | 
							
										END
							 | 
						|||
| 
								 | 
							
										CLOSE cursor_name -- 关闭游标
							 | 
						|||
| 
								 | 
							
										DEALLOCATE cursor_name -- 释放游标
							 | 
						|||
| 
								 | 
							
								    FETCH NEXT FROM cursor_Id INTO @OldId,  @NewId 
							 | 
						|||
| 
								 | 
							
									END
							 | 
						|||
| 
								 | 
							
								CLOSE cursor_Id -- 关闭游标
							 | 
						|||
| 
								 | 
							
								DEALLOCATE cursor_Id -- 释放游标
							 | 
						|||
| 
								 | 
							
								--SELECT @returnVal
							 | 
						|||
| 
								 | 
							
								END
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								GO
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 |