本帖最后由 hessen 于 2020-2-6 12:04 编辑
在日常运维中会出现将整个数据库中的某个字符替换为一个新的字符串,如果逐表更新会存在较大的困难也非常繁琐,工作量巨大。在经过系统权限允许后,可以通过下面的存储过程一键整个库替换。需求比如:将要门店的名称【幸福路店】更名为【幸运路店】,则只需要创建下面的存储过程后,如果是经常性的操作可在快表建立模版操作,少的话也可以在数据库直接操作。
- DECLARE @return_value int
- EXEC @return_value = [dbo].[UPDATE_VARCHARFIELD]
- @OLDNAME = N'幸福路店',
- @NEWNAME = N'幸运路店'
- SELECT 'Return Value' = @return_value
- GO
复制代码
上面是具体替换的示例,下面为要创建的存储过程
- CREATE PROCEDURE [dbo].[UPDATE_VARCHARFIELD]
- @OLDNAME VARCHAR(20),@NEWNAME VARCHAR(20)
- AS
- DECLARE @sql VARCHAR(800)
- DECLARE @tablename VARCHAR(100), @columnname VARCHAR(100),@type VARCHAR(100)
- DECLARE cursor1 CURSOR FOR
- SELECT b.name AS tbname ,a.name AS cname,a.xtype
- FROM syscolumns a ,sysobjects b
- WHERE a.id = object_id(b.name) AND (left(b.name,4) = 'SYS_' OR left(b.name,2) = 'T_' ) AND b.xtype <> 'V' AND b.xtype <> 'P' AND b.xtype <> 'FN' AND a.colstat <> 1 AND a.xtype IN('167')
-
- OPEN cursor1
- FETCH NEXT FROM cursor1 INTO @tablename,@columnname,@type
- WHILE @@fetch_status=0
- BEGIN
- SET @sql=' UPDATE '+@tablename+' SET '+@columnname+' = REPLACE( '+@columnname +','''+@OLDNAME+ ''','''+@NEWNAME+''')'
- EXEC(@sql)
- FETCH NEXT FROM cursor1 INTO @tablename,@columnname,@type
- END
- CLOSE cursor1
- DEALLOCATE cursor1
- GO
复制代码 创建后就可以如示例一样使用了。
|
|
hessen