T-SQL需要替换传入的值来转义单引号

时间:2017-06-19 16:15:19

标签: sql-server string stored-procedures

我有一个存储过程,其中的值从use中传入。有时用户传入具有单引号的值。例如:测试    -NOTE:我知道要逃避单引号我需要加倍...测试'的

在我的存储过程中,我正在执行另一个存储过程,该过程在插入或删除记录之前检查重复项。要检查重复项,我将值作为声明的变量传递给@valid_value。我试图创建一个语句,如果传递的值中包含单个引号,它将转义单引号。

--Original
@column_name varchar(40),
@valid_value varchar(60),
@site_entity varchar(30),
@site_entity_type varchar(1),
@site_id varchar(10),
@message varchar(200) OUTPUT
AS
DECLARE @site_specific varchar(1)
DECLARE @column_name_ref_integrity_ck varchar(60)
DECLARE @ref_integrity_ok INT
SELECT @site_specific=
(SELECT site_specific
 FROM table_name
WHERE column_name=@column_name)
SELECT @column_name_ref_integrity_ck=@column_name+'_ref_integrity_ck'
EXEC @ref_integrity_ok = @column_name_ref_integrity_ck @valid_value, @site_entity, @site_entity_type, @site_specific, @site_id, @message OUTPUT
RETURN @ref_integrity_ok




--Here is what im try to make work.
SELECT @valid_value
CASE
    WHEN @valid_value like '%''%' THEN REPLACE(@valid_value, '''','''''')

我想我选择有效值将它放在一个case中以查看valid_value是否包含单引号,然后我可以用更多引号替换valid_value单引号以进行转义。但这没有工作,我有问题使这项工作的语法正确。

这就是我所拥有的。

@column_name varchar(40),
@valid_value varchar(60),
@site_entity varchar(30),
@site_entity_type varchar(1),
@site_id varchar(10),
@message varchar(200) OUTPUT
AS
DECLARE @site_specific varchar(1)
DECLARE @column_name_ref_integrity_ck varchar(60)
DECLARE @ref_integrity_ok INT

SELECT @valid_value
    (CASE
        WHEN @valid_value like '%''%' THEN REPLACE(@valid_value, '''',''''''))

SELECT @site_specific=
(SELECT site_specific
 FROM table_name
WHERE column_name=@column_name)
SELECT @column_name_ref_integrity_ck=@column_name+'_ref_integrity_ck'
EXEC @ref_integrity_ok = @column_name_ref_integrity_ck @valid_value, @site_entity, @site_entity_type, @site_specific, @site_id, @message OUTPUT
RETURN @ref_integrity_ok

0 个答案:

没有答案