我正在从构建的系统中的一个错误中恢复,我没有考虑到在发布带有文本区域的HTML表单时,IE会生成IE生成Windows样式的换行符(\r\n),其他浏览器会生成Unix样式的换行符(\n) 。现在,我需要在SQL-Server数据库的varchar和nvarchar字段中,将所有Windows风格的换行符(\r\n)转换为Unix风格的换行符(\n)。

有没有一种方法可以遍历T-SQL中的所有表/行,并将varchar和nvarchar字段的'\r\n'实例替换为'\n'?

编辑:我认为替换部分将类似于

REPLACE(@fieldContents, CHAR(13)+CHAR(10), CHAR(10))

困难的部分是在所有varchar和nvarchar字段中执行此操作。

最佳答案

像这样吗?然后,您可以动态执行这些字符串,或者只是剪切/粘贴结果并在查询窗口中执行它们。

select 'update ' + sc.name + '.' + t.name + ' set ' + c.name + ' = replace(' + c.name + ', CHAR(13)+CHAR(10), CHAR(10))'
from sys.columns c
    inner join sys.systypes st
        on c.system_type_id = st.xtype
            and CHARINDEX('varchar', st.name) <> 0
    inner join sys.tables t
        on c.object_id = t.object_id
    inner join sys.schemas sc
        on t.schema_id = sc.schema_id

关于sql - 如何在数据库中的所有varchar和nvarchar字段之间转换换行符(用\n替换\r\n),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3112747/

10-15 09:54