Возможно ли изменить определение таблицы для автоматической подгонки записей всех конечных пробелов при их вводе?Автозаполнение записей в базе данных?
Или это будет более эффективно/проще/обычно выполняется в коде befeore, представляющем записи?
Возможно ли изменить определение таблицы для автоматической подгонки записей всех конечных пробелов при их вводе?Автозаполнение записей в базе данных?
Или это будет более эффективно/проще/обычно выполняется в коде befeore, представляющем записи?
Если вы работаете в SQL Server, вы можете сделать это автоматически, но вы действительно должны это делать, только если вы уверены и с должным учетом. ANSI_PADDING принимает решение в SQL относительно того, будет ли он обрезать конечные пробелы вводимого значения. Этот параметр применяется во время создания таблицы и не изменяется после этого, и настройка будет работать для varchar, но не работает для nvarchar.
Тестовый скрипт, чтобы показать различие заключается в следующем:
set ansi_padding on
create table foo (myID int identity, myString varchar(50))
insert into foo values ('abcd ')
select datalength(mystring) from foo
drop table foo
set ansi_padding off
create table foo (myID int identity, myString varchar(50))
insert into foo values ('abcd ')
select datalength(mystring) from foo
На первой таблице возвращается длина данных в виде 10, так как пространства были вставлены, на втором примере они подстриженной на вставке.
Я лично предпочел бы, чтобы код контролировал то, что нужно было сделать, вместо того чтобы оставить его в настройке, но я включил примеры, чтобы показать, что это можно сделать на уровне БД, если это необходимо.
Возможно, вы можете использовать trigger - в зависимости от того, какое программное обеспечение базы данных вы используете.
хранимой процедуры или в коде клиента или триггеров и т.д.
SET ANSI_PADDING will always be ON in future, и он должен быть включен для некоторых индексов тоже.
Вы можете использовать Trigger INSTEAD OF INSERT Section. ВМЕСТО ВСТАВКИ, вы можете обрезать значение и попытаться вставить его. Если вы укажете поле как уникальный индекс, оно должно выдать исключение из-за двойного значения индекса.
Спасибо, я думаю, что, вероятно, я просто сделаю это в коде, но мне было любопытно/интересно узнать, можно ли это сделать проще или эффективнее другим способом. – 2009-10-15 09:30:59