我想在表中搜索所有带有特殊字符的记录-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
如错误所述,我无法在表格中搜索特殊字符。
答案 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 + ''''
请注意,我还没有进行了上述测试。您最好的朋友在那里,可以帮助您进行调试。