Sql server SQL Server:如何替换回车符
我使用以下过程将所有表中的所有Sql server SQL Server:如何替换回车符,sql-server,special-characters,string-formatting,carriage-return,Sql Server,Special Characters,String Formatting,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 nva
回车
字符替换为“+”
:
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
创建过程并将其称为:
EXEC SearchAndReplace'good'、'GOING'
它表明:
结果
----------------------------------------------------替换148个事件
这是预期的结果
问题:
回车符
字符并替换它们;尽管我很确定,从CSV导出
,由于回车
字符明显存在于数据库中,因此导出的单元格是唯一的,可以分成许多行
我是SQL Server的新手,不知道自己到底做错了什么 任何帮助都将不胜感激。尝试将
Char(10)
值存储在变量中,然后将该变量作为参数传递
declare @tmp varchar(10)=CHAR(10)
EXEC SearchAndReplace @tmp, ' + '
不能在存储过程调用中使用表达式。只允许使用文字和变量。当然,使用参数
'CHAR(10)
调用过程是允许的,但它会搜索确切的字符串文本C
H
A
(
1
<0
)
——这显然不在您的数据中。请注意,SQL Server将接受字符串形式的文本回车符(如中所示,在打开“
”后按ENTER键),但这对读者来说非常混乱。