[英]SQL Server: How to replace carriage return characters
I'm using the following procedure to replace all carriage return
characters within all tables, with ' + '
: 我正在使用以下过程将所有表中的所有
carriage return
符替换为' + '
:
CREATE PROC SearchAndReplace
(
@SearchStr nvarchar(100),
@ReplaceStr nvarchar(100)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110), @SQL nvarchar(4000), @RCTR int
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
SET @RCTR = 0
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
SET @SQL= 'UPDATE ' + @TableName +
' SET ' + @ColumnName
+ ' = REPLACE(' + @ColumnName + ', '
+ QUOTENAME(@SearchStr, '''') + ', ' + QUOTENAME(@ReplaceStr, '''') +
') WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
EXEC (@SQL)
SET @RCTR = @RCTR + @@ROWCOUNT
END
END
END
SELECT 'Replaced ' + CAST(@RCTR AS varchar) + ' occurence(s)' AS 'Outcome'
END
GO
After creating the procedure, and calling it as: 创建过程之后,将其调用为:
EXEC SearchAndReplace 'GONNA', 'GOING'
It shows: 表明:
Outcome ---------------------------------------------------- Replaced 148 occurence(s)
结果------------------------------------------------- ---代替148发生
And it's the intended result. 这是预期的结果。
First case: 第一种情况:
Calling EXEC SearchAndReplace CHAR(10), ' + '
results in the following result: 调用
EXEC SearchAndReplace CHAR(10), ' + '
导致以下结果:
Msg 102, Level 15, State 1, Server WIN-M6K7U0AQLHJ, Line 1 Incorrect syntax near '10'.
消息102,级别15,状态1,服务器WIN-M6K7U0AQLHJ,行1靠近“ 10”的语法不正确。
Second case: 第二种情况:
Calling EXEC SearchAndReplace 'CHAR(10)', ' + '
results in the following result: 调用
EXEC SearchAndReplace 'CHAR(10)', ' + '
会得到以下结果:
Outcome ---------------------------------------------------- Replaced 0 occurence(s)
结果------------------------------------------------- ---替换了0次
Third case: 第三种情况:
Calling EXEC SearchAndReplace 'CHAR(13)', ' + '
results in the following result: 调用
EXEC SearchAndReplace 'CHAR(13)', ' + '
会得到以下结果:
Outcome ---------------------------------------------------- Replaced 0 occurence(s)
结果------------------------------------------------- ---替换了0次
Which means the query failed to find the carriage return
characters and replace them; 这意味着查询未能找到
carriage return
符并替换它们; Although I'm pretty sure, from the CSV export
, there is unique cells exported as broken into many lines, due to the carriage return
characters that do obviously exist within the database. 尽管我很确定,但是从
CSV export
,由于数据库中确实存在carriage return
,因此导出的单元格被分成多行。
I'm new to SQL Server
, and I can't know exactly what I'm doing wrong. 我是
SQL Server
新手,我无法确切知道自己在做什么错。
Any help will be greatly appreciated. 任何帮助将不胜感激。
try to store Char(10)
value in a variable and then pass that variable as a parameter. 尝试将
Char(10)
值存储在变量中,然后将该变量作为参数传递。
declare @tmp varchar(10)=CHAR(10)
EXEC SearchAndReplace @tmp, ' + '
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.