Я пытаюсь перенести базу данных SQL Server с 2005 по SQL Server 2012.Что нового в SQL Server 2012 о кастинге в ISNULL()
Когда я отсоединить и присоединить базу данных на новый SQL Server 2012 мой приложение работает некоторое время ОК.
У меня возникли проблемы, когда мой сервер приложений пытается написать (обновить) столбцы типа BIT
. В ситуациях, когда я должен написать или столбцы обновления я получаю сообщение об ошибке:
Cannot access field 'my_column_typ_bit' as type of Integer
Код, который выполняет это заявление выглядит следующим образом:
<sequence name="ListaArtikalaSingle-update-artikal" type="script">
<SQL>
update art
set
sifra = :sifra ,
naziv = :naziv ,
naziv_strani = :naziv_strani ,
sifra_dob = :sifra_dob ,
naziv_fiskalni = :naziv_fiskalni ,
jm = :jm_id ,
tbr_id = :tbr_id ,
car_stp = :carinska_stopa ,
trosarina = :trosarina ,
opis = :opis ,
vrsta_id = :vrsta_id ,
podvrsta_id = :podvrsta_id ,
rg_id = :rabatna_grupa_id ,
vaga = :vaga ,
konsignacija = IsNull(:konsignacija ,0) ,
ambalaza = IsNull(:ambalaza ,0) ,
proizvod = IsNull(:proizvod ,0) ,
nusproizvod = IsNull(:nusproizvod ,0) ,
materijal = IsNull(:materijal ,0) ,
par_id = :par_id ,
user_id = (
case when :user_id = 0
then user_id
else :user_id
end) ,
ts = GetDate(),
podgrupa_2 = :podgrupa2_id ,
faktor_palete = :faktor_palete ,
faktor_pakovanja = :faktor_pakovanja ,
za_narudzbu = :za_narudzbu,
dani_nabave = :dani_nabave,
dani_nabave_opt = :dani_nabave_opt ,
dani_pro_avg = :dani_pro_avg ,
auto_minopt = :auto_minopt ,
car_tar_br_id = :car_tar_br_id ,
car_faktor = ISNULL(:car_faktor ,1) ,
vaga_id = ISNULL(vaga_id , :vaga_id),
car_sifra = :car_sifra ,
naknada_id = :pov_nak_id ,
tezina = :tezina ,
stp_kalo_mal = :stp_kalo_mal ,
stp_kalo_mat = :stp_kalo_mat ,
stp_kalo_vel = :stp_kalo_vel ,
jm_izv_id = :izv_jm_id ,
jm_izv_koef = :izv_jm_koef ,
drz_pod_id = :drz_pod_id ,
deklaracija_id = :deklaracija_id ,
aktivan = IsNull(:aktivan ,1) , --This is my BIT COLUMN
gift = IsNull(:gift ,0) ,
vaga_public = IsNull(:vaga_public ,0) ,
vaga_pub_id = :vaga_pub_id
where
id = :id
</SQL>
</sequence>
Эта часть кода работает под SQL Server 2005 - почему он не работает в SQL Server 2012?
У моей базы данных установлен уровень совместимости: SQL Server 2005 (90).
Я попытался изменить сортировку базы данных в соответствии с SQL Server.
Я попытаюсь зафиксировать след этого запроса, чтобы увидеть, как мое приложение отправляет этот BIT
(булев) тип. Я уверен, что в базу данных отправлено целое число 1.
Я предпочитаю вносить изменения в уровень сервера, поэтому мне не нужно проходить через множество XML-подобных, чтобы явное выделение целых чисел в биты.
Есть ли что-нибудь, что я могу сделать с моей базой данных, чтобы еще раз принять 1 как булев?
Копаем глубже Я понял, что есть проблема только при использовании функции ISNULL()
.
Я заменил isnull(@bit_typ, 0)
только @bit
, и мой запрос прошел хорошо.
Есть ли обратная совместимость для функции ISNULL
на SQL Server 2012?
ISNULL() по-прежнему поддерживается в SQL 2012. Какая именно ошибка вы получаете? –
Что это за XML, который вы показываете нам и как вы его используете? В частности, я спрашиваю, что это за объект/язык? SQL Server напрямую не выполняет XML AFAIK, поэтому это должно быть частью какого-либо другого объекта. – RBarryYoung
@SebastianMeine Не удается получить доступ к полю 'my_column_typ_bit' как тип Integer – adopilot