Detta är helt förutsägbart och förväntat på grund av Datatypprioritet
För detta kommer UI-kolumnen att ändras till decimal(25,0)
where UI = 2011040773395012950010370
Den här är nästan korrekt. Den högra sidan är varchar och ändras till nvarchar
where UI = '2011040773395012950010370'
Det här är på riktigt korrekt version där båda typerna är samma
where UI = N'2011040773395012950010370'
Fel kommer att ha startat eftersom UI-kolumnen nu innehåller ett värde som inte CAST till decimal(25,0).
Några orelaterade anteckningar:
- om du har ett index i UI-kolumnen skulle det ignoreras i den första versionen på grund av den implicita CAST som krävs
- behöver du unicode för att lagra numeriska siffror? Det finns en allvarlig omkostnad med unicode-datatyper i lagring och prestanda
- varför inte använda
char(25)
ellernchar(25)
är värden alltid fast längd? Dina frågor använder för mycket minne som optimerare antar en genomsnittlig längd på 128 tecken baserat pånvarchar(256)
Redigera, efter kommentar
Utgå inte från "varför fungerar det ibland" när du inte vet att det fungerar
Exempel:
- Värdet kunde ha tagits bort och sedan lagts till senare
- En TOP-sats eller SET ROWCOUNT kan innebära att det anstötande värdet inte nås
- Frågan kördes aldrig så den kunde inte misslyckas
- Felet ignoreras tyst av någon annan kod?
Redigera 2 för förhoppningsvis mer klarhet
Chatta
gbn:
Slumpmässigt:
gbn
Som Tao nämner , det är viktigt att förstå att en annan orelaterade kan bryta frågan även om den här är OK.