T-SQL语句,变量和单引号

时间:2013-08-16 19:59:23

标签: sql-server tsql

我是新手,寻找有经验的专业人士的建议。

我有一个T-SQL查询,其中包含某些值的变量(见下文)。

BEGIN  
  --SET @Where = @Where + ' AND WebName = '''+ @SearchKey + ' '' <br>OR Name = '''+ @SearchKey +''''  
  SET @Where = @Where + ' AND WebName like ''%'+ @SearchKey +  '%'' OR Name like ''%'+ @SearchKey +'%'''
END  

问题是填充信息的时间。某些变量需要处理单引号而不会出错。如何处理来自变量信息的单引号?

2 个答案:

答案 0 :(得分:4)

所以,让我们从你危险的地方开始吧。您可以SQL injection开放。

你应该参数化你的SQL,这将解决危险问题以及你的流氓撇号问题。

以下是您应该阅读并教育自己的一些资源:

  1. http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html
  2. http://software-security.sans.org/developer-how-to/fix-sql-injection-microsoft-.net-with-parameterized-queries

答案 1 :(得分:0)

您无需担心转义SQL varchar变量中的'字符。转换一次(在设置或选择时)就足够了。

参见此演示

declare @a nvarchar(100),
        @b nvarchar(100),
        @name nvarchar(100)

set @a = 'Hi, ';
set @name = 'Jim''my O''Tool';
set @b = ', you champ.'

select @name
select @a + @name + @b