在告诉大家如何替换数据内容之前,我建议大家先了解一下SQL Server数据库的数据存储类型:在使用iwms系统的过程中,我们会经常遇到数据内容的替换 *** 作。在告诉大家如何替换数据内容之前,我建议大家先了解一下SQLServer数据库的数据存储类型:SQLServer数据类型:以上是数据库的基础知识,是做网站的朋友都应该知道的内容(无论你使用什么cms),所以建议大家都耐心看一下。数据替换一般都发生在字符串数据字段中,除了ntext类型字段以外的其他字符串数据字段都可以使用以下的sql语句进行替换:update [swf_Upload] set [Dir] = replace([Dir],'200901/14','200901/15')update [swf_Content] set [Description] =replace([Description],'200901/14','200901/15')update [swf_Content_01] set [content] = replace(convert(varchar(4000), [content]),'200901/14','200901/15') UPDATE [数据表名] SET [字段名] = REPLACE([字段名],'老字符串','新字符串')比如,替换iwms文章数据表(iwms_news)中的标题字段(title)的部分内容,我们应该这么写:UPDATE [iwms_news] SET [title] = REPLACE([title],'老字符串','新字符串')上面的sql语句在iwms后台的sql执行里面可以直接执行,基本上可以搞定所有的替换 *** 作,但是由于ntext数据长度的原因,这一方法对ntext类型字段无效。那我们该用什么方法替换ntext类型字段的内容呢?方法有两种:一是类型转换,将ntext类型转换为varchar类型,然后再用replace。适合于单页内容最大长度<4000的文章。update [数据表名] set [字段名] = replace(convert(varchar(4000), [字段名]),'老字符串','新字符串')比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写:update iwms_news set [content] = replace(convert(varchar(4000),[content]),'老字符串','新字符串')二是SQLServer存储过程declare @ptr varbinary(16)declare @artId intdeclare @Position int,@len intset @len = datalength('老字符串')declare wux_Cursor scroll Cursorforselect textptr([字段名]),[key字段名] from [数据表名]for read onlyopen wux_Cursorfetch next from wux_Cursor into @ptr,@artIdwhile @@fetch_status=0beginselect @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artIdwhile @Position>0beginset @Position=@Position-1updatetext [数据表名][字段名] @ptr @Position @len '新字符串'select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artIdendfetch next from wux_Cursor into @ptr,@artIdendclose wux_cursordeallocate wux_cursorgo比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写declare @ptr varbinary(16)declare @artId intdeclare @Position int,@len intset @len = datalength('老字符串')
首先,随便打开数据库连接,复制需要格式化的sql到窗口中,就像这样
按键盘快捷键Ctrl+Shift+B,或者选择菜单的如下选项Automate->formatscript选项,就像下面这样
这个时候d出个对话框,这个对话框就是格式化sql的一些配置项,如果不熟悉的话,建议按照笔者这么配置,如下图:
配置好后,点击ok确定,可以看到sql已经被格式化了,
用replace函数将年,月替换成横杠,日替换成空,从而形成tb的标准日志格式,然后再做比较。这里给出replace的示例:
select replace(replace(REPLACE('2017年01月01日', '年', '-'), '月', '-'), '日', '')
注: 此replace函数在SQL Server数据库上适用,其他数据库可能要做相应调整。
表数量多么,所有字段都要更新?
给个思路先:
查询所有表中带有字符型字段的字段(varchar,nvarchar 其他类型酌情考虑)
select SOname as t_name, SCname as f_name,STname as f_type fromsysobjects SO, -- 对象表
syscolumns SC, -- 列名表
systypes ST -- 数据类型表
where SOid = SCid
and SOxtype = 'U' -- 类型U表示表,V表示视图
and SOstatus >= 0 -- status >= 0 为非系统对象
and SCxtype = STxusertype
and stname in ('varchar','nvarchar')
order by SOname,scname
2根据查询出的表名和所属字段,拼接出各表的update 语句
方法有很多种,比如从上边SQL查处的结果里把表名抽出来,逐个传入以下语句
declare @str varchar(4000)declare @strTN varchar(100)
set @strTN = 'CSVTable' --定义表名
set @str = ''
select @str = @str + ',' + SCname + '=REPLACE(' + SCname + ',''#'','''')' from
sysobjects SO, -- 对象表
syscolumns SC, -- 列名表
systypes ST -- 数据类型表
where SOid = SCid
and SOxtype = 'U' -- 类型U表示表,V表示视图
and SOstatus >= 0 -- status >= 0 为非系统对象
and SCxtype = STxusertype
and stname in ('varchar','nvarchar')
and SOname = @strTN
order by SOname,scname
IF @str <> '' set @str= 'update ' + @strTN + ' set ' + SUBSTRING(@str,2,4000)
PRINT @str --打印出SQL
exec(@str) --执行SQL
在Linux里面,有一个比较好的工具sed,sed -i "s#A#B#g" filename,比如:sed -i "s#linux#windows#g" atxt,这样可以把atxt文件中所有的linux替换成windows,“#”可以换成其他的字符,可以根据实际情况来定。如果替换的内容来自文件,可以用脚本遍历文件的方式实现。例如:
旧地址文件:Atxt,需要处理的sql文件:mysqlsql,替换后的新内容:newtext
#/bin/bash
for line in `cat Atxt`;
do
sed -i "s#$line#newtext#g" mysqlsql
done
当然,也可以指定替换行的范围(例如50行到100行),具体的请参考linux下sed命令的用法
用sql的批量更新功能,把要替换字符替换成想要替换成的字符。
sql替换语句,用该命令可以整批替换某字段的内容,也可以批量在原字段内容上加上或去掉字符。
命令总解:update 表的名称 set 替换字段=REPLACE(替换字段,原来内容,新内容)
举例说明:
1)把backupfile表里url的字段内容为>
以上就是关于如何替换SQL Server数据库内容全部的内容,包括:如何替换SQL Server数据库内容、aqua data studio的sql窗口怎么查找替换、sql替换查询结果字符串中的字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)