powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Прилетаю, значит, я на глюкодром...
3 сообщений из 3, страница 1 из 1
Прилетаю, значит, я на глюкодром...
    #32009506
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
В базовой таблице есть поля, у которых задано значение по молчанию, а сами они NOT NULL. Делаю VIEW с группировками, с JOIN таблицы на саму себя, со всякими прочими наворотами (иерархический справочник). Пропускаю эти поля через VIEW, смотрю на них в QA (в дереве объектов раскрываю Columns) - они отображаются как NOT NULL, как и положено. Делаю еще один запрос на базе уже сделанного запроса пропускаю эти поля через второй VIEW - они в QA уже выглядят как NULL. Ну выглядят и бог с ним, мне это глубоко безразлично. Я говрою об этом только потому, что это может иметь отношение к тому, что уже не безразлично. Естественно, без INSTEAD-триггеров, запрос необновляемый. Цепляю к нему INSTEAD-триггеры, сам запрос делаю с опцией WITH VIEW_METADATA (для устранения проблем, о которых говорилось ранее многократно).
Пишу в том же QA команду добавления строки во VIEW (не важно, в первый или во второй - результат один и тот же). Если в команде добавления строки перечисляю все поля и указываю для них значения, все проходит на ура. Если опускаю те поля, о которых сказано выше, выскакивает ошибка несколько раз - по количеству пропущенных в команде полей:
Server: Msg 233, Level 16, State 2, Line 1
The column 'Fld' in table 'Tbl' cannot be null.
Да я сам знаю, что они не могут быть Null. Но в таблице-то для них указаны значения по умолчанию! И моя задача - чтобы при вставке строки подставились значения по умолчанию.
Ок, переписываю команду вот так:
insert into tbl (Fld1, Fld2, Fld3...) values (default, default, default,...)
Если я добавляю в команду под одному полю и одному default, то количество сообщений об ошибке 233, одновременно вываливающихся в QA соответственно уменьшается. Наконец я перечисляю все поля и уже потираю с удовольствием руки, полагая, что ну наконец все ошибки пропадут. Запускаю команду - теперь выскакивает уже другая ошибка:
Server: Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'Fld', table 'SomeDB.dbo.Tbl'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Что за фигня! Я же не Null туда вставлял, а default!
Самое интересное, что такая команда вставки (без default-ов), вставленная в текст хранимой процедуры, либо в текст пакета, прерывает весь пакет или всю хранимую процедуру еще до начала их выполнения. Увидев этот эффект, я просто выпал в осадок.
Запускаю хранимую процедуру, у которой злосчастный insert стоит в самом конце, а первой строчкой стои set nocount on в отладчике выскакивает в нижней части окна ошибка 233, и указатель текущей инструкции вообще не появляется! То есть set nocount on даже не пытается выполниться.
Ок, делаю в просто в окне QA пакет:
create table ttt (ID int primary key)
GO
insert into ...
GO
запускаю пакет на выполнение - create table НЕ ВЫПОЛНЯЕТСЯ!!! С той же ошибкой 233.
Ладно, думаю, возможно, очередной глюк. Поставил SP1 - ничего не изменилось!
Вот такие пироги... Получается, что значения нужно сгенерить конкретные на клиенте. А я как раз этого хочу избежать. Мне нужно, чтобы подставились как раз значения по умолчанию - с их помощью регистрируется, кто выполнил команду, с какого окомпьютера, когда и т.д. и т.п.
...
Рейтинг: 0 / 0
Прилетаю, значит, я на глюкодром...
    #32009512
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее конечно правильно, ведь View не знает, что его NOT NULL поля на самом деле имеют дефолтовое значение, поэтому и спрашивает их (или ругается)
Обойти - только в триггере вызывать функции, которые будут возвращать юзера, компутер, команду и т.д.
...
Рейтинг: 0 / 0
Прилетаю, значит, я на глюкодром...
    #32009523
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу. Мне тоже приходится явно указывать все поля при вставке во view с instead триггером. Иначе засыпет сообщениями о том, что поле такое-то не может быть NULL, хотя оно в таблице и default имеет, а часть из них вообще вычисляемые! Вот так и пихаю во все по моему мнению "левые" поля dummy-значения, а потом они уже в instead триггере либо заменяются на default'ы, либо вычисляются, либо вообще игнорируются.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Прилетаю, значит, я на глюкодром...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]