Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Странен проблем с преобразуването на типа на SQL Server

Това е напълно предвидимо и очаквано поради предимство на типа данни

За тази цел колоната на потребителския интерфейс ще бъде променена на decimal(25,0)

where UI = 2011040773395012950010370

Този е почти правилен. Дясната страна е varchar и се променя на nvarchar

where UI = '2011040773395012950010370'

Това е наистина правилна версия, където и двата типа са еднакви

where UI = N'2011040773395012950010370'

Грешките ще са започнали, защото колоната на потребителския интерфейс вече съдържа стойност, която няма да се преобразува в decimal(25,0).

Някои несвързани бележки:

  • ако имате индекс в колоната на потребителския интерфейс, той ще бъде игнориран в първата версия поради необходимостта от косвен CAST
  • имате ли нужда от уникод за съхраняване на цифрови цифри? Има сериозни разходи с уникод типове данни при съхранение и производителност
  • защо не използвате char(25) или nchar(25) стойностите винаги ли са с фиксирана дължина? Вашите заявки използват твърде много паметта като оптимизатор приема средна дължина от 128 знака въз основа на nvarchar(256)

Редактиране, след коментар

Не предполагайте „защо работи понякога“, когато не знаете че работи

Примери:

  • Стойността може да е била изтрита и добавена по-късно
  • Клауза TOP или SET ROWCOUNT може да означава, че стойността на нарушението не е достигната
  • Заявката никога не е изпълнявана, така че не може да се провали
  • Грешката се игнорира мълчаливо от друг код?

Редактирайте 2 за надявам се повече яснота

Чат

gbn:

Произволно:

gbn

Както Тао споменава , важно е да разберете, че друг несвързан може да наруши заявката, дори ако този е ОК.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL условна поръчка по

  2. Грешка при двусмислено име на колона

  3. Актуализирайте само частта за дата на DateTime

  4. Как да напиша инструкция if else на езика за изразяване на услугите за отчет?

  5. Как да запазя резултатите от заявката за избор във временна таблица?