【发布时间】:2018-12-21 09:47:42
【问题描述】:
我想在表格中搜索所有带有特殊字符的记录 - char(11)、char(7) 等。
我找到了一个可以帮助我找到它的存储过程。但它不接受输入参数如下:
EXEC sp_FindStringInTable '%'+char(7)+'%', 'CPOA-TALENTLink-Test-Leeds', 'TALENT_Contact_ChangeLog'
错误:
消息 102,第 15 级,状态 1,第 1 行
'+' 附近的语法不正确。
存储过程:
CREATE PROCEDURE dbo.sp_FindStringInTable
@stringToFind NVARCHAR(100),
@schema SYSNAME,
@table SYSNAME
AS
BEGIN TRY
DECLARE @sqlCommand VARCHAR(MAX) = 'SELECT * FROM [' + @schema + '].[' + @table + '] WHERE '
SELECT @sqlCommand = @sqlCommand + '[' + COLUMN_NAME + '] LIKE ''' + @stringToFind + ''' OR '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @schema
AND TABLE_NAME = @table
AND DATA_TYPE IN ('char','nchar','ntext','nvarchar','text','varchar')
SET @sqlCommand = LEFT(@sqlCommand, LEN(@sqlCommand) - 3)
EXEC (@sqlCommand)
PRINT @sqlCommand
END TRY
BEGIN CATCH
PRINT 'There was an error. Check to make sure object exists.'
PRINT error_message()
END CATCH
如错误所述,我无法在表格中搜索特殊字符。
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: sql sql-server stored-procedures special-characters