Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
bsv067
Member

Откуда:
Сообщений: 31
Проблема в том, что для разных табельных номеров (@tn) поле комментария получает значение 'Чернобыль' через раз, через два...
То есть иногда, там просто NULL...
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

...
INSERT zptb_nachisl
	SELECT DISTINCT @zpl_year,
		                 @zpl_mes,
                                 106, 
		                 @kc,
	                         @tncurr, 
		                 0, 
		                 ROUND(Convert(decimal(10,4) ,Summaitog),2),
		                 '_auto_' , 
		                 GETDATE(),
		                 'Чернобыль', 
		                 NULL, 
                                 0 
		FROM #tmp7, zptb_schet
		WHERE #tmp7.tn=@tnсurr AND zptb_schet.tn=@tncurr AND zptb_schet.date_end IS NULL AND zptb_schet.chern=1


Update последней записи напрямую не проходит, даже когда следом за этим скриптом ставлю :
UPDATE zptb_nachisl set note='Чернобыль' WHERE id=@@IDENTITY

NULL в 'Чернобыль' не превращается. В чем я не прав? С другими словами, латиницей те же проблемы :)
24 дек 13, 16:39    [15340969]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bsv067
Проблема в том, что для разных табельных номеров (@tn) поле комментария получает значение 'Чернобыль' через раз, через два...
Вариантов много:
1. триггер на zptb_nachisl
2. так как поля не перечисляются, то вставка в другие поля
3. так как владелец не указан, то вставка в другую таблицу zptb_nachisl
4. zptb_nachisl - не таблица, а вьюха
5. всё вставляетя праывильно, но вы это не видите (потому что не знаете критерии отбора записей)
6. вариант пункта 5 - запись вообще не вставляется, а вы думаете, что вставилась с неправильным полем

Вы хотя бы покажите, как проверяете результат вставки.
24 дек 13, 16:45    [15341024]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
bsv067
Member

Откуда:
Сообщений: 31
alexeyvg,
Правильный результат во вложении, сейчас добавлю неправильный

К сообщению приложен файл. Размер - 13Kb
24 дек 13, 17:13    [15341194]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
bsv067
Member

Откуда:
Сообщений: 31
alexeyvg,
На этой картинке неправильный результат. Вторая запись - пособие до 1.5 лет для лиц, проживающих в чернобыльской зоне, его надо
отметить для последующих отчетов.
Для одних табельных номеров я получаю все время нормальный коммент, для других - все время NULL
Пункты 1-6 Вашего ответа отпали, я все еще раз проверил.
Это меня так жестко клинит, или может еще что-то?

К сообщению приложен файл. Размер - 12Kb
24 дек 13, 17:19    [15341219]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bsv067
Правильный результат во вложении
Вы показываете какие то картинки, из которых ничего непонятно.

"Правильный результат " - тут ведь тоже Note=NULL? При том, что он таковым быть не может.

Вы просто, без затей, выполните запрос:
SELECT * FROM zptb_nachisl WHERE tn = @tncurr
INSERT ... SELECT ...	-- Тут вставляете ваш селект (только один селест, больше ничего!)
SELECT * FROM zptb_nachisl WHERE tn = @tncurr
И покажите результат.
bsv067
Пункты 1-6 Вашего ответа отпали, я все еще раз проверил.
Ну, я не представляю других вариантов.
Запрос INSERT ... SELECT константа не может выполнится неправильно.
24 дек 13, 17:29    [15341282]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
alexeyvg
Запрос INSERT ... SELECT константа не может выполнится неправильно.
Точнее, может, но тогда новой записи вообще не будет. А она есть (якобы, по вашим словам).

Вот в этом и нужно убедиться, выполнив вышеприведённый скрипт.
24 дек 13, 17:30    [15341288]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
sdet
Member

Откуда:
Сообщений: 463
bsv067,
выполните
UPDATE zptb_nachisl set note='Чернобыль' WHERE id=3768440

и представьте рез select для id=3768440
24 дек 13, 17:30    [15341293]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
bsv067
Пункты 1-6 Вашего ответа отпали, я все еще раз проверил.
Собственно, наиболее вероятно, что ваше клиентское приложение обнуляет это поле.

В самых запущенных случаях можно повесить логирующий триггер INSERT/UPDATE на таблицу, что бы поймать, откуда и когда идёт это обновление.
24 дек 13, 17:36    [15341327]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
Sergey057
Member

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

Вот ту интересно.
Когда делаю
UPDATE zptb_nachisl set note='Чернобыль' WHERE id=3768440

внутри процедуры, получаю note=NULL, а когда в чистом окне запускаю одну эту строку,
получаю note='Чернобыль'. Получается, это как-то зависит от параметров сессии?
Процедура начисления пособий запускается изнутри другой процедуры, там тоже выставлено:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
.
Может это как-то сказываться? И очень интересно, почему это повторяется для одних и тех-же табельных номеров из месяца в месяц, а для других все нормально.
Запускаю процедуру расчета зарплаты как индивидуально для конкретного табельного номера, так и в потоке (для всего подразделения). Результат тот же - для кого-то всегда нормально, а для кого-то NULL. Мне к доктору не пора? ;)
24 дек 13, 20:31    [15342095]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
Sergey057
Member

Откуда:
Сообщений: 31
alexeyvg,
А вот это скорее всего. Дело не в клиентском приложении, а в том, что дальше идет расчет других начислений, и в поле комментария я иногда вставляю промежуточные значения переменных, типа локальных cooсkies, а потом могу их чистить, а потом могу забыть, в каких случаях чищу. Структура таблиц, доставшихся в наследства такова, что менять что-то очень сложно и приходится изголяться... Завтра проверю и отпишусь. Спасибо за советы. Пока беру тайм-аут.
24 дек 13, 20:41    [15342122]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Sergey057
внутри процедуры, получаю note=NULL, а когда в чистом окне запускаю одну эту строку,
получаю note='Чернобыль'. Получается, это как-то зависит от параметров сессии?
Нет, от параметров сессии не зависит, запустив в чистом окне апдэйт, и немедленно после этого SELECT, вы должны увидеть изменённые значения.
Sergey057
дальше идет расчет других начислений, и в поле комментария я иногда вставляю промежуточные значения переменных
Ну тогда понятно, что где то меняется.

"Update последней записи напрямую не проходит" - должно означать, что сразу после оператора Update вы делаете эту проверку.

Так что никаких чудес, нужно элементарно отладить код.
24 дек 13, 22:14    [15342374]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Sergey057
в поле комментария я иногда вставляю промежуточные значения переменных, типа локальных cooсkies, а потом могу их чистить, а потом могу забыть, в каких случаях чищу.
Facepalm.
Sergey057
Структура таблиц, доставшихся в наследства такова, что менять что-то очень сложно и приходится изголяться...
Почему виноват всегда кто-то? Вы что не можете создать новую таблицу для "промежуточных расчетов" не меняя при этом существующие?
24 дек 13, 23:31    [15342561]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
bsv067
Member

Откуда:
Сообщений: 31
alexeyvg,
Да, все так и оказалось. Спасибо за помощь, которая заключается иногда даже в том, что надо ткнуть носом :)
25 дек 13, 11:04    [15344016]     Ответить | Цитировать Сообщить модератору
 Re: Не всегда получается вставить символьное значение при инсерте (MS SQL 2005)  [new]
bsv067
Member

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

Да, криво получилось, согласен. Коллег, от которых досталась структура, совсем ни в чем не виню - на момент, когда они писали задачу, структура была близка к идеальной, но оказалась плохо приспособленной к последующим изменениям. Но это мои проблемы. Как только появится свободное время, переделаю логику на хранение промежуточных значений в отдельной таблице. Спасибо.
25 дек 13, 11:26    [15344115]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить