Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
Всем привет.
Столкнулся со следующей проблемой: хранимой процедуре передаются параметры на запись в базу, несколько параметров текстовые строки, в логах обнаружил ошибку "2011-10-26 03:38:47 err=-1, [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "s"., SQL STATE: 42000, NATIVE ERROR: 102 (0x66)". Записать пытается строку 'Operator's Exclusive', я так понял что кавычка в слове Operator's закрывает строку после символа "r".

Добавил в процедуру SET @Text1 = REPLACE(@Text1,'''','') чтоб удалить из строки кавычки вообще, но проблема осталась. Как можно решить эту проблему? Возможно я что-то делаю неправильно.
2 ноя 11, 11:53    [11537866]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
chelsea,

покажите «конструкцию "s"» и то, что там около неё
2 ноя 11, 11:56    [11537891]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
chelsea,

не "скливайте" строку запроса с строковыми представлениями параметрами, используйте параметры и будет вам счастье.
2 ноя 11, 11:56    [11537893]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
iap,

'Operator's Exclusive'
2 ноя 11, 11:59    [11537919]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
chelsea
Возможно я что-то делаю неправильно.
Возможно.

Так покажите код и ошибку.
2 ноя 11, 12:42    [11538351]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
chelsea
iap,

'Operator's Exclusive'
То есть, там текст запроса с литеральной строкой, внутри которой одинарная кавычка?
Так удвойте её. В чём проблема?
Посмотрите на функцию QUOTENAME(Field, '''') - может, проще будет формировать строку
2 ноя 11, 12:45    [11538386]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
iap,

Запрос скомпилирован в программе, и доступа к исходному запросу у меня нет. Решать проблему можно только средствами sql

Привожу код процедуры:

ALTER  Proc [dbo].[usp_Insert_Action_Log_E]

@UserID varchar(18),
@UserUID int,
@CharID int,
@CharName varchar(50),
@CharLevel tinyint,
@CharExp int,
@MapID smallint,
@PosX real,
@PosY real,
@PosZ real,
@ActionTimeZ varchar(50),
@ActionType tinyint,
@Value1 bigint = null,
@Value2 int = null,
@Value3 int = null,
@Value4 bigint = null,
@Value5 int = null,
@Value6 int = null,
@Value7 int = null,
@Value8 int = null,
@Value9 int = null,
@Value10 int = null,
@Text1 varchar(100) = '',
@Text2 varchar(100) = '',
@Text3 varchar(100) = '',
@Text4 varchar(100) = '',
@Sql nvarchar(4000) = '',
@yyyy varchar(4) = '',
@mm varchar(2) = '',
@dd varchar(2) = '',
@Bucket smallint = -1

AS

/* ТО ЧТО ДОБАВИЛ Я */
SET @Text1 = REPLACE(@Text1,'''','')
SET @Text2 = REPLACE(@Text2,'''','')
SET @Text3 = REPLACE(@Text3,'''','')
SET @Text4 = REPLACE(@Text4,'''','')
/******************/

DECLARE @ActionTime as datetime
SELECT @ActionTime = CONVERT(datetime, @ActionTimeZ, 120)

SET @yyyy = datepart(yyyy, @ActionTime)
SET @mm = datepart(mm, @ActionTime)
SET @dd = datepart(dd, @ActionTime)


IF(LEN(@mm) = 1)
BEGIN
	SET @mm = '0' + @mm
END

IF(LEN(@dd) = 1)
BEGIN
	SET @dd = '0' + @dd
END

SET @Sql = N'
INSERT INTO PS_GameLog.dbo.ActionLog
(UserID, UserUID, CharID, CharName, CharLevel, CharExp, MapID,  PosX, PosY, PosZ, ActionTime, ActionType, 
Value1, Value2, Value3, Value4, Value5, Value6, Value7, Value8, Value9, Value10, Text1, Text2, Text3, Text4)
VALUES(@UserID, @UserUID, @CharID, @CharName, @CharLevel, @CharExp, @MapID, @PosX, @PosY, @PosZ, @ActionTime, @ActionType, 
@Value1, @Value2, @Value3, @Value4, @Value5, @Value6, @Value7, @Value8, @Value9, @Value10, @Text1, @Text2, @Text3, @Text4)'

EXEC sp_executesql @Sql, 
N'@UserID varchar(18), @UserUID int, @CharID int, @CharName varchar(50), 
@CharLevel tinyint, @CharExp int, @MapID smallint, @PosX real, @PosY real, @PosZ real, @ActionTime datetime, @ActionType tinyint, 
@Value1 bigint, @Value2 int, @Value3 int, @Value4 bigint, @Value5 int, @Value6 int, @Value7 int, @Value8 int, 
@Value9 int, @Value10 int, @Text1 varchar(100), @Text2 varchar(100), @Text3 varchar(100), @Text4 varchar(100)',
@UserID, @UserUID, @CharID, @CharName, @CharLevel, @CharExp, @MapID, @PosX, @PosY, @PosZ, @ActionTime, @ActionType, 
@Value1, @Value2, @Value3, @Value4, @Value5, @Value6, @Value7, @Value8, @Value9, @Value10, @Text1, @Text2, @Text3, @Text4
2 ноя 11, 12:55    [11538502]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
alexeyvg,

в первом посте я все показал
2 ноя 11, 12:56    [11538513]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
chelsea
Запрос скомпилирован в программе, и доступа к исходному запросу у меня нет.

А текст этого запроса будет предоставлен ?
2 ноя 11, 12:59    [11538548]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
Glory,

нет исходников
2 ноя 11, 13:01    [11538593]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
chelsea
Запрос скомпилирован в программе, и доступа к исходному запросу у меня нет. Решать проблему можно только средствами sql

Привожу код процедуры:
Ну так код процедуры правильный, ваше "/* ТО ЧТО ДОБАВИЛ Я */" в ней не нужно, ошибок при выполнении не будет хоть с вашим кодом, хоть без вашего.
2 ноя 11, 13:04    [11538617]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
chelsea
alexeyvg,

в первом посте я все показал
Ничего вы не показали.

Показать - это "репро", то есть воспроизведение ошибки.

Вы вот только сейчас процедуру выложили, при этом сама по себе процедура ошибку дать не может, потому как она просто хранится на сервере и не вызывается.

Осталось привести вызов процедуры и выложить сюда сообщение об ошибке.
2 ноя 11, 13:06    [11538644]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
chelsea
Glory,

нет исходников

Зато есть Профайлер
2 ноя 11, 13:08    [11538659]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
alexeyvg,

в лог пишется ошибка с моим и без моего

2011-10-25 17:26:01 err=-1, [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "s"., SQL STATE: 42000, NATIVE ERROR: 102 (0x66)

2011-10-25 17:26:01 DBWrite::LogGame: err=-1, query=EXEC usp_Insert_Action_Log_E 'wangzi2011',242,356,'lenovo', 1,0,2, 165.250000,118.500000,397.890015, '2011-10-25 17:26:01' ,113, 3365058089882550272,100082,NULL,55,NULL,NULL,NULL,NULL,NULL,NULL,'Operator's Exclusive','PointItem','0,0,0,0,0,0 (Option:)','2011-10-25 17:26:01'
2 ноя 11, 13:08    [11538661]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
chelsea
/* ТО ЧТО ДОБАВИЛ Я */
SET @Text1 = REPLACE(@Text1,'''','')
SET @Text2 = REPLACE(@Text2,'''','')
SET @Text3 = REPLACE(@Text3,'''','')
SET @Text4 = REPLACE(@Text4,'''','')
/******************/

/* ТО ЧТО ДОБАВИЛ Я */
SET @Text1 = QUOTENAME(@Text1,'''')
SET @Text2 = QUOTENAME(@Text2,'''')
SET @Text3 = QUOTENAME(@Text3,'''')
SET @Text4 = QUOTENAME(@Text4,'''')
/******************/
Можете так сделать????
2 ноя 11, 13:10    [11538675]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
EXEC usp_Insert_Action_Log_E 'wangzi2011',242,356,'lenovo', 1,0,2, 165.250000,118.500000,397.890015, '2011-10-25 17:26:01' ,113, 3365058089882550272,100082,NULL,55,NULL,NULL,NULL,NULL,NULL,NULL,'Operator's Exclusive','PointItem','0,0,0,0,0,0 (Option:)','2011-10-25 17:26:01' 
Ну так ошибка в строке вызова
До выполнения процедуры дело вообще не доходит
2 ноя 11, 13:10    [11538679]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
EXEC usp_Insert_Action_Log_E 'wangzi2011',242,356,'lenovo', 1,0,2, 165.250000,118.500000,397.890015, '2011-10-25 17:26:01' ,113, 3365058089882550272,100082,NULL,55,NULL,NULL,NULL,NULL,NULL,NULL,'Operator's Exclusive','PointItem','0,0,0,0,0,0 (Option:)','2011-10-25 17:26:01' 
Ну так ошибка в строке вызова
До выполнения процедуры дело вообще не доходит
+100500
А я-то и не заметил.

chelsea, QUOTENAME не надо!
2 ноя 11, 13:13    [11538707]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
chelsea
Member

Откуда:
Сообщений: 7
Glory,

Понял, спасибо.
Средствами sql это не как не решить?
2 ноя 11, 13:16    [11538733]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
chelsea
Средствами sql это не как не решить?

Нет. Сервер не может сам исправлять тексты передаваемых ему на выполнение команд
2 ноя 11, 13:23    [11538798]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Alex5555555555
Member

Откуда:
Сообщений: 114
Подниму вопрос снова
Incorrect syntax near 'MNP'. [SQLSTATE 42000] (Error 102). The step failed.

менял на 2ные, пишет что вообще не правильный квери


сообственно вот селект:

select COUNT(*) from dbo.lnpTrans with (nolock)
where Created > getdate () - 1
and RECEPTOR_NETWORK_ID = 4
and PHYSICAL_PERSON_LAST_NAME = 'MNP-TEST'
and "STATE" in ('BY_ACCEPTED_BY_DONOR', 'BY_FINISHED', 'BY_ACCEPTED')
7 май 12, 14:24    [12520145]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex5555555555
менял на 2ные, пишет что вообще не правильный квери

Правильно пишет
Зачем имя поля брать в какие то кавычки ?
7 май 12, 14:34    [12520190]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
step_ks
Member

Откуда:
Сообщений: 936
Alex5555555555, где сообщение об ошибке при выполнении этого селекта?
7 май 12, 14:36    [12520208]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Alex5555555555
Member

Откуда:
Сообщений: 114
удалили кавычки получил

Error formatting query, probably invalid parameters [SQLSTATE 42000] (Error 22050). The step failed.

селект в окне запроса отрабатывает отлично

но если сую в джоб, выпадает



Incorrect syntax near 'MNP'. [SQLSTATE 42000] (Error 102). The step failed.




полный текст джоба, запускается от sa

Declare @sqlquery nvarchar(max)
select @sqlquery =
'
select COUNT(*) from dbo.lnpTrans with (nolock)
where Created > getdate () - 1
and RECEPTOR_NETWORK_ID = 4
and PHYSICAL_PERSON_LAST_NAME ='MNP-TEST'
and "STATE" in ('BY_ACCEPTED_BY_DONOR', 'BY_FINISHED', 'BY_ACCEPTED')

'
exec msdb.dbo.sp_send_dbmail
@profile_name = 'mailalert',
@recipients = 'blabla@bla.bla',
@query = @sqlquery,
@execute_query_database='sdb',
@query_result_separator= '|',
@query_result_header = 1
7 май 12, 14:45    [12520250]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alex5555555555
полный текст джоба, запускается от sa

Ну так исправляйте вот это
select @sqlquery =
'
select COUNT(*) from dbo.lnpTrans with (nolock)
where Created > getdate () - 1
and RECEPTOR_NETWORK_ID = 4
and PHYSICAL_PERSON_LAST_NAME ='MNP-TEST'
and "STATE" in ('BY_ACCEPTED_BY_DONOR', 'BY_FINISHED', 'BY_ACCEPTED')

'

И зачем имя поля в двойных кавычках - так и непонятно
7 май 12, 14:50    [12520277]     Ответить | Цитировать Сообщить модератору
 Re: Удаление кавычек из строки  [new]
Alex5555555555
Member

Откуда:
Сообщений: 114
Glory, так что изменить, я понимаю что затык в этой части
но НЕ понимаю где

всё же делаю нормально
http://msdn.microsoft.com/ru-ru/library/ms190307.aspx
7 май 12, 15:04    [12520339]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить