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

Откуда:
Сообщений: 521
День добрый!
Есть таблица, в которую заносятся данные из двух процессов, системный и пользовательский.
create table MyTable (Id int identity(1,1),Name nvarchar(50),IsSystem bit,MyCol int)


Системный процесс вносит данные в поле MyCol:

-- IsSystem=1
insert into MyTable(Name,IsSystem,MyCol)
select 'aaa',1,11 union
select 'bbb',1,22 union
select 'ccc',1,33


А для пользовательского процесса значение в MyCol должно быть типа 10000+id
T.e. пользовательский процесс вносит данные таким образом:
-- IsSystem=0
insert into MyTable(Name,IsSystem)
select 'ddd',0 union
select 'eee',0 union
select 'fff',0


и select * from MyTable должно быть:
IdNameIsSystemMyCol
1aaa 111
2bbb122
3ccc 133
4ddd010004
5eee 010005
6fff 010006


Т.е. нужно создать для колонки MyCol значение по умолчанию типа 10000+Id.
Можно это сделать как-то без использования триггера?
Спасибо!
30 апр 15, 13:42    [17586973]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Сделайте вычисляемый столбец и не мучайтесь:
alter table MyTable add MyColActual as case when IsSytem = 1 then MyCol else id + 10000 end;
30 апр 15, 13:59    [17587059]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
abrashka
Member

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

Спасибо, не хотелось бы добавлять еще одно поле :(
До сих пор использовали только ID, но решили отделить системные данные от пользовательских, решил добавить дополнительное поле MyCol, а тут еще одно прийдется добавлять :(
30 апр 15, 14:03    [17587086]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
Триггерман
Member

Откуда:
Сообщений: 113
abrashka
Можно это сделать как-то без использования триггера?
Это нужно сделать без использования триггера.
Триггер - это не игрушка, и на каждый чих его ставить нельзя.
Триггер придумали для тех, у кого не хватает мозгов обойтись без него.
30 апр 15, 14:03    [17587088]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
abrashka
Member

Откуда:
Сообщений: 521
Триггерман,

Ключевое слово "как" а не "можно ли"
30 апр 15, 14:05    [17587096]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21243
А есть смысл заполнения этого поля сразу? Если это значение не используется для связи с другими таблицами, почему не вычислять его в момент получения из таблицы
select coalesce(MyCol, 10000+Id), ...
? А если используется - почему не заполняется явно?
30 апр 15, 14:07    [17587103]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Если честно, какой-то странный у Вас подход к генерации id. Вы не задумывались о ситуации, когда

IsSystem = 0 AND Id >= 10000


Тогда различить системные и пользовательские данные придется используя IsSystem. Что в свою очередь подталкивает к мысли - зачем мне MyCol?
30 апр 15, 14:07    [17587104]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз создать значение по умолчанию.  [new]
abrashka
Member

Откуда:
Сообщений: 521
Akina,
Судя по всему так и будет... У нас просто, наверно как и везде, один пишет, другой читает :(
Так вот, тот, кто читает, хочет готовый результат, без дополнительных телодвижений.
В принципе я его уговорил, ничего страшного если это значение будет исчисляться в самом отчете.



AlanDenton ,
Мы знаем свой товар :) Речь идет о системных отчетах, сейчас их порядка 20, думаю, что до десятка тысяч дело не дойдет.


Всем спасибо!
30 апр 15, 14:36    [17587352]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить