APOSTROPHE DYNAMIC SQL

时间:2010-09-17 16:30:52

标签: sql-server sql-server-2005 tsql dynamic-sql

DECLARE @SQL Varchar(Max)
DECLARE @DESCR Varchar(Max)

-- Customer enters description into @Descr
SET @SQL = 'Update TableName SET FieldName='''
+ @DESCR
+ ''' WHERE ID=123'

问题是当客户将撇号输入@Descr变量时。

问:在Microsoft SQL Server 2005中,如何用双撇号替换所有叛逆者?

2 个答案:

答案 0 :(得分:8)

如果这甚至需要是动态SQL(你所显示的代码没有),那么使用参数化SQL和sp_executesql来避免SQL注入的可能性。

DECLARE @SQL NVarchar(Max)
DECLARE @DESCR NVarchar(Max)

-- Customer enters description into @Descr


SET @SQL = 'Update TableName SET FieldName=@DESCR WHERE ID=123'

exec sp_executesql @SQL, N'@DESCR NVarchar(Max)', @DESCR =@DESCR

答案 1 :(得分:4)

不推荐用于生产,但可以使用。

SET @DESCR = REPLACE(@DESCR, '''', '''''')