Как сделать триггер, что бы фильтровал данные по типу одна заглавная, остальные строчные (Заглавная)?
Здравствуйте. Как сделать триггер T-sql или MS SQL чтобы фильтровал при вводе данные.
пример таков "ВАСЯ" => "Вася", как бы не ввели, то всегда будет "Вася"
Таблица dbo.Person вот поля мои
В mysql я делал вот так (поля name, lastname, surname).
А зачем для такого триггер?
Нормальный вариант - преобразование на insert и update.
Идеал - в виде вызова stored procedure, которая пишет предобработанные данные.
Ну и моментик: есть известный литературный персонаж Джим ДиГриз - ему очень не понравится издевательство над его фамилией)
Ну обычно на словах - подразумевается что sapienti sat)
create procedure dbo.insert_or_update_illustration @id int out, @text nvarchar(max)
with encryption as
set @text = upper(substring(@text,1,1))+lower(substring(@text,2,len(@text)-1))
if @id is null begin -- create
-- calculate new id (or use identity)
insert into table (id, text) values (@id,@text)
-- если identity - добываем last id
end else begin -- update
update table set text=@text where id=@id
end
Ну и рекомендую поэкспериментировать с капитализацией первых букв например на Леонардо да Винчи
Ну и опережая продолжение - как подсказка:
set @text = может вырасти в достаточно большую конструкцию, которая будет справляться с большой базой фамильных приставок-исключений капитализации типа "фон", "дер", "де" и прочими вариациями нетипичной капитализации написания имен и фамилий, включая при необходимости логику выкидывания варнингов на предмет "человек с такой фамилией, датой рождения, адресом и инн уже присутствует в базе"
d-stream, Большое спасибо, есть куда двигаться)). Еще небольшой совет нужен. К своей БД я делаю интерфейс, чтобы ею управлять. Такие проверочные процедуры лучше делать на стороне самой бд(sql) или же на стороне интефейса( например C#)? То есть сделать все проверки на С# а в бд будут INSERTиться просто данные
Deka007, ну можно исходить из подобной концепции: "морда" владеет информацией только о текущем контексте и не более, а на стороне sql - все остальное.
То есть все проверки логической целостности, валидности, допустимости, прав - на стороне sql, а в интерфейсной части - общие валидации типа "имя должно быть задано", "в номере телефона должно быть 10 цифр" и т.п.
Это даст еще один плюс - при появлении новых аспектов - новые проверки и правки потребуются в 3-4 процедурах (если ориентироваться на Create/Read/Update/Delete или же CreateOrUpdate/Read/Delete
Ну а триггеры - удобны например при логгировании (правда есть моментики при массовых операциях)