Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
misha-x3 Member Откуда: Сообщений: 70 |
Добрый день форумчане! Подскажите пожалуйста как экранировать одинарные кавычки ( ' ) в хранимой процедуре на MS SQL 2005 вот текст процедуры: alter PROCEDURE Sl @sTable nVARCHAR(255), @sField nVARCHAR(255), @sWhere nVARCHAR(255) as declare @sql nvarchar(1000) BEGIN set @sql='SELECT '+@sField+' from '+@sTable if @sWhere<>'' Set @sql=@sql+' Where '+@sWhere exec sp_executesql @sql END GO вызываю ее так: SelectPoz 'Tovar','*','sN="Комп''ютери"',0,0 выдает ошибку: Сообщение 207, уровень 16, состояние 1, строка 1 Недопустимое имя столбца "Комп'ютери". Процедура может и безсмыслена но она мне нужна как пример. может кто знает как заэкранировать кавычку ( ' ) или может есть другой вариант как сделать такой запрос с кавычкой? |
24 дек 12, 17:34 [13678715] Ответить | Цитировать Сообщить модератору |
_djХомяГ
Guest |
select '''кавычка''' |
24 дек 12, 17:36 [13678729] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
лучше параметры используйте. читайте дальше первого абзаца про sp_executesql а то "малыш дроппи" в гости придет |
24 дек 12, 17:38 [13678745] Ответить | Цитировать Сообщить модератору |
misha-x3 Member Откуда: Сообщений: 70 |
попробовал через параметры но кажись параметр присваивается только определенному полю, а мне нужно условия отбора задавать для нескольких столбцов, названия которых будут меняться alter PROCEDURE Sl @sWhere nVARCHAR(255), @st int, @en int as declare @sql nvarchar(1000) declare @Param nvarchar(1000) BEGIN set @sql='SELECT * from Tovar' if @sWhere<>'' Set @sql=@sql+' Where @sW' set @Param=N'@sW nVARCHAR(255)'; /*print @sql*/ execute sp_executesql @sql,@Param,N'@sW=@sWhere' END GO вызываю Sl 'sN="HDD"' ошибка Сообщение 4145, уровень 15, состояние 1, строка 1 Рядом с "@sW" в контексте, где ожидается условие, указано выражение типа, отличного от логического Рабочий пример есть у кого? использования параметра как полное условие Where |
24 дек 12, 18:59 [13679140] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
misha-x3, читайте внимательно, при передаче параметров кавычки уже не нужны |
24 дек 12, 19:43 [13679323] Ответить | Цитировать Сообщить модератору |
misha-x3 Member Откуда: Сообщений: 70 |
Я не совсем все здесь понимаю потому как процедуру создаю первый раз alter PROCEDURE Sl @sWhere nVARCHAR(255) as declare @sql nvarchar(1000) declare @Param nvarchar(1000) declare @Val nvarchar(1000) BEGIN set @sql='SELECT * from Tovar' if @sWhere<>'' Set @sql=@sql+' Where sN=@sW' set @Param=N'@sW nVARCHAR(255)' set @Val=N'@sW=@sWhere' print @sql execute sp_executesql @sql,@Param,@Val END GO привызове Sl 'комп''ютери' выдает пустую таблицу что я не так делаю? |
24 дек 12, 20:42 [13679498] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
-- set @Val=N'@sW=@sWhere' print @sql -- execute sp_executesql @sql,@Param,@Val execute sp_executesql @sql,@Param,@sW=@sWhere |
24 дек 12, 20:48 [13679514] Ответить | Цитировать Сообщить модератору |
misha-x3 Member Откуда: Сообщений: 70 |
Cпасибо Вам огромное, все получилось |
24 дек 12, 20:52 [13679528] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |