Я участвую в проекте миграции баз данных с SQL Server 2005 по 2008.
Во время теста я обнаружил одно несоответствие. В соответствии с BOL http://msdn.microsoft.com/en-us/library/ms186862 (v = SQL.100) .aspx (2008) и http://msdn.microsoft .com / en-us / library / ms186862 (v = SQL.90) .aspx (2005) возвращает varchar
. Пока оба одинаковые. Однако, если мы перейдем к функции REPLACE
, тип столбца char
, тогда разница обнаружится. Посмотрите на этот код
declare @test table
(
testcharstring char(25)
)
insert into @test
select 'Hello'
union
select 'World'
union
select 'Hello world '
select
'"'+testcharstring+'"' as original
,'"'+replace(testcharstring,'a','A')+'"' as afterreplace
--,'"'+replace(rtrim(testcharstring),'a','A')+'"'
from @test
Результат из SQL Server 2005
original afterreplace
--------------------------- ---------------------------
"Hello " "Hello"
"Hello world " "Hello world"
"World " "World"
Результат из SQL Server 2008
original afterreplace
--------------------------- ---------------------------
"Hello " "Hello "
"Hello world " "Hello world "
"World " "World "
T-SQL в SQL Server 2005 удаляет даже допустимое конечное пространство, не говоря уже о том, что он угрожает char (25)
как varchar (25)
. T-SQL в SQL Server 2008 более тщательно подходит к типу и возвращает результаты в соответствии с типом, который он принимает для преобразования
У меня есть числовые позиции в разных объектах T-SQL, в основном в триггерах. Основная идея просто внести минимальные изменения для сохранения того же поведения в SQL Server 2008
Возможные способы сделать это
REPLACE
Быстрый поиск предполагает, что это невозможно, однако мой товарищ по команде хочет исследовать эта опция Rtrim ()
вместе с REPLACE
. Это потребует замены в точных местах кода в нескольких подпрограммах (где используются столбцы char) Я хотел бы спросить всех, если кто-нибудь сталкивался с этой проблемой, как вы справились?
Также приветствуются любые предложения, может быть, я просто не знаю, какие настройки на экземпляре сервера или уровне базы данных могут изменить поведение.
Заранее благодарю!