Dette er fuldstændig forudsigeligt og forventet på grund af Datatypeprioritet
Til dette vil UI-kolonnen blive ændret til decimal(25,0)
where UI = 2011040773395012950010370
Denne er næsten korrekt. Den højre side er varchar og er ændret til nvarchar
where UI = '2011040773395012950010370'
Dette er virkelig korrekte version, hvor begge typer er de samme
where UI = N'2011040773395012950010370'
Fejl vil være startet, fordi UI-kolonnen nu indeholder en værdi, der ikke vil CAST til decimal(25,0).
Nogle ikke-relaterede bemærkninger:
- hvis du har et indeks i UI-kolonnen, vil det blive ignoreret i den første version på grund af den implicitte CAST påkrævet
- har du brug for unicode for at gemme numeriske cifre? Der er en alvorlig overhead med unicode-datatyper i lagring og ydeevne
- hvorfor ikke bruge
char(25)
ellernchar(25)
er værdier altid fast længde? Dine forespørgsler bruger for meget hukommelse som optimeringsværktøjet antager en gennemsnitlig længde på 128 tegn baseret pånvarchar(256)
Rediger efter kommentar
Antag ikke "hvorfor virker det nogle gange", når du ikke ved at det virker
Eksempler:
- Værdien kunne være blevet slettet og tilføjet senere
- En TOP-sætning eller SET ROWCOUNT kan betyde, at den stødende værdi ikke er nået
- Forespørgslen blev aldrig kørt, så den kunne ikke mislykkes
- Fejlen ignoreres stille af en anden kode?
Rediger 2 for forhåbentlig mere klarhed
Chat
gbn:
Tilfældig:
gbn
Som Tao nævner , er det vigtigt at forstå, at en anden ikke-relateret kan bryde forespørgslen, selvom denne er OK.