powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите вставить NULL
14 сообщений из 14, страница 1 из 1
Помогите вставить NULL
    #39960682
olkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую, задача такая, есть таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table dbo.ELARDocs  
(  
 XRecID int identity(1,1) primary key not null,  
 uploadDate datetime not null,
 docID int not null,  
 rccID int null default null,  
 verID int not null,
 docGUID varchar(255) not null,
 refName varchar(255) null default null,
 taskIDs varchar(1024) null default null
);  



Используемое приложение делает вставку в эту таблицу данные, проблема в том, что иногда в поля rccID , refName и taskIDs
могут передаваться пустые строки, в результате, после insert-а, в поле rccID пишется 0, в полях refName и taskIDs - пустота, а мне нужно, чтобы в этих полях стоял NULL.
Пробовал у этих полей в объявлении таблицы ставить "default null" (как в моем примере) - не помогает.

Так же попробовал написать триггер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create trigger ELARDocsInsert
on ELARDocs instead of insert
as begin
	insert into ELARDocs (uploadDate, docID, rccID, verID, docGUID, refName, taskIDs)
	select [uploadDate], [docID],
		case rccID when 0 then null 
			-- when rccID = '' then null
		end,
		verID,
		docGUID,
		case refName when '' then null end,
		case taskIDs when '' then null end
	from inserted
end


Но в этом случае SQL Server ругается на case:
Код: sql
1.
None of the result expressions in a CASE specification can be NULL.  



Что можно сделать? Т.е нужно, чтобы, если пишем в эти три поля '' или 0, то в них должно быть именно NULL, а не 0 или пустота.
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960685
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olkir,

не дочитали справку по синтаксису по CASE, там есть еще и else.
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960691
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olkir,

Код: sql
1.
 rccID int null default null

, это новые веяния в дизайне БД?

Лучше используйте NULLIF(field, 0)
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960694
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
olkir,

не дочитали справку по синтаксису по CASE, там есть еще и else.


Если ELSE вообще не писать, то будет => ELSE NULL
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960696
olkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

О, точно, заработало )
Можно ещё вопрос, почему на одну вставку, сервер обрабатывает каких-то две(?) строки, т.е он возвращает

Код: sql
1.
2.
3.
4.
5.
(затронута одна строка)

(затронута одна строка)

Время выполнения: 2020-05-22T15:18:06.8091147+05:00


Откуда два раза вот эта раза про одну строку? для примера инсерт делал такой:

Код: sql
1.
2.
-- т.е у меня тут 3 пустых поля и я ожидал, что будет затронута либо 1 строка, либо 3(по одной на каждый пустой параметр)
insert into ELARDocs values(getdate(), '3347676', '', '15854873', '91d97c33-a163-4d31-b9de-10564f6ff299', '', '' )



И ещё вопрос, здесь без триггера не обойтись?
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960700
olkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,

Это я пробовал разные варианты, думал что если в поле пустота, то там по умолчанию подставляется null... не подставляется (

NULLIF(field, 0)
Её так же в case надо использовать?
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960707
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olkir
a_voronin,

Это я пробовал разные варианты, думал что если в поле пустота, то там по умолчанию подставляется null... не подставляется (

NULLIF(field, 0)

Её так же в case надо использовать?

"А Кока-Колу надо пить до или после?", вместо, Голубушка, вместо.
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960730
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olkir,

напишите в триггере SET NOCOUNT ON.
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960732
olkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,
Понял, но опять же, она подойдёт если у нас одно условие проверки, а если нужно проверить и на 0 и на '', использовать условие или можно по OR соединить, типа:
Код: sql
1.
select uploadDate, docID,  (NULLIF(field, 0) or NULLIF(field, ''))... 


from...

типа так?
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960735
olkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Добавил, спасибо )
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960742
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olkir
a_voronin,
Понял, но опять же, она подойдёт если у нас одно условие проверки, а если нужно проверить и на 0 и на '', использовать условие или можно по OR соединить, типа:
Код: sql
1.
select uploadDate, docID,  (NULLIF(field, 0) or NULLIF(field, ''))... 

Во первых, 0 или '' не может быть, может быть только '0' или ''

Во вторых, я даже не знаю, как можно написать выражение NULLIF(field, 0) or NULLIF(field, '') ???

Нужно просто сделать вложенный NULLIF
Код: sql
1.
select uploadDate, docID,  NULLIF(NULLIF(field, '0'), ''))... 



ИМХО, это лучше CASE
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960748
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
olkir
a_voronin,
Понял, но опять же, она подойдёт если у нас одно условие проверки, а если нужно проверить и на 0 и на '', использовать условие или можно по OR соединить, типа:
Код: sql
1.
select uploadDate, docID,  (NULLIF(field, 0) or NULLIF(field, ''))... 

Во первых, 0 или '' не может быть, может быть только '0' или ''

Во вторых, я даже не знаю, как можно написать выражение NULLIF(field, 0) or NULLIF(field, '') ???

Нужно просто сделать вложенный NULLIF
Код: sql
1.
select uploadDate, docID,  NULLIF(NULLIF(field, '0'), ''))... 



ИМХО, это лучше CASE


Если посмотреть на исходный пример триггера, то имелось ввиду

Код: sql
1.
2.
3.
		case rccID when 0 then null  end => NULLIF(rccID, 0)

		case refName when '' then null end => NULLIF(refName , '')
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960749
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
чуть короче, а так кому что удобнее читать

Код: sql
1.
2.
3.
select uploadDate, docID,  NULLIF(NULLIF(field, '0'), ''))... 

select uploadDate, docID, case when field not in ( '0', '') then field end
...
Рейтинг: 0 / 0
Помогите вставить NULL
    #39960961
I dont know
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy,

Спасибо, не знал этих приёмов. Вопрос решен )
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите вставить NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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