2010-09-17 5 views
1
DECLARE @SQL Varchar(Max) 
DECLARE @DESCR Varchar(Max) 

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

Проблема заключается в том, что клиент вводит апостроф в переменную @Descr.APOSTROPHE DYNAMIC SQL

В: В Microsoft SQL Server 2005, как заменить все апострофии двойным апострофом?

ответ

7

Если это вообще необходимо для динамического SQL (код, который вы указали не имеет), используйте для этого параметры с параметрами SQL и sp_executesql, чтобы избежать возможности SQL-инъекций.

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

-- Customer enters description into @Descr 


SET @SQL = 'Update TableName SET [email protected] WHERE ID=123' 

exec sp_executesql @SQL, N'@DESCR NVarchar(Max)', @DESCR [email protected] 
+0

Thanks Martin! Да, он должен быть динамичным - я не хотел усложнять этот пример. –

4

Не рекомендуется для производства, но будет работать.

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