在存储过程中将特殊字符[char(11),char(7)]作为字符串传递

时间:2018-12-21 09:47:42

标签: sql sql-server stored-procedures special-characters

我想在表中搜索所有带有特殊字符的记录-char(11),char(7)等。

我找到了一个可以帮助我找到它的存储过程。但是它不接受如下输入参数:

EXEC sp_FindStringInTable '%'+char(7)+'%', 'CPOA-TALENTLink-Test-Leeds', 'TALENT_Contact_ChangeLog'

错误

  

第15级状态1行1的消息102
  “ +”附近的语法不正确。

存储过程:

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 

如错误所述,我无法在表格中搜索特殊字符。

2 个答案:

答案 0 :(得分:2)

在调用过程表达式时,除了文字或变量外,其他方法均无效。

将串联分配给变量,然后将该变量传递给过程。

DECLARE @p varchar(max) = '%' + char(7) + '%';

EXEC sp_FindStringInTable @p, 'CPOA-TALENTLink-Test-Leeds', 'TALENT_Contact_ChangeLog';

答案 1 :(得分:0)

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[AddData] -- Add the parameters for the stored procedure here @DATABASENAME varchar(100) AS BEGIN SET NOCOUNT ON; insert into UserControlTenant.dbo.tenantData (tenant_name, receipt_id , amount, date, time) select * from "@DATABASENAME".dbo.transactiondata END GO '[' + @schema + ']'这样的字符串连接是不安全的。 远离它。我怀疑参数化查询将解决此问题:

' LIKE ''' + @stringToFind + ''''

请注意,我还没有进行了上述测试。您最好的朋友在那里,可以帮助您进行调试。