如何在数据库中的所有varchar和nvarchar字段中转换换行符(将\ r \n替换为\n)

Roy*_*ker 6 sql t-sql sql-server newline

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

有没有办法迭代T-SQL中的所有表/行,并将'\ r \n'的实例替换为'\n'为varchar和nvarchar字段?

编辑:我认为替换部分会是这样的

REPLACE(@fieldContents, CHAR(13)+CHAR(10), CHAR(10))
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*lli 9

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

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
Run Code Online (Sandbox Code Playgroud)