Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Pointen var lige netop at bruge lighedstegn. Problemet er at jeg har en masse procedurer, som er defineret i sql server 6.5 med brug af lighedstegn. Dem vil jeg gerne have til at fungere i 2000 som de gjorde under 6.5 - og derfor skal jeg have sat ansi null off, når jeg kører procedurerne på igen.
Jeg kan godt forstå at du prøver at gøre overgangen til 2000 "lettere", ved at kunne undgå ændringer i dine stored procedures. Men jeg mener ikke det giver meget mening at opdatere og stadig holde fast i gammel syntaks. Du kan lige så godt bruge tiden på at opdatere dine sp's (til IS NULL/IS NOT NULL) fremfor at bruge den på en hel masse "80 procents" work-arounds. Dette var det generelle råd :-)
Konkret mener jeg du er ude i en mission impossible. Se eks. flg. udsnit fra BOL:
For a script to work as intended, regardless of the ANSI nulls database option or the setting of SET ANSI_NULLS, use IS NULL and IS NOT NULL in comparisons that may contain null values.
For stored procedures, SQL Server uses the SET ANSI_NULLS setting value from the initial creation time of the stored procedure. Whenever the stored procedure is subsequently executed, the setting of SET ANSI_NULLS is restored to its originally used value and takes effect. When invoked inside a stored procedure, the setting of SET ANSI_NULLS is not changed.
Ikke desto mindre er det min opgave... Derfor skal jeg sikre mig at ANSI NULL er OFF, når jeg kører procedurerne på.
Jeg er da ret sikker på det kan lade sig gøre (hvorfor skulle der ellers være kommandoer til at gøre det med?), jeg mangler bare lidt hjælp til hvordan.
PS. Jeg kan altså ikke godtage et svar, der siger jeg skal bruge IS NULL og IS NOT NULL. Jeg var godt klar over at den løsning findes - før jeg bad om hjælp her - men jeg har altså også fravalgt den som en mulig løsning på mit spørgsmål. Det er derfor den har en mellem sværhedsgrad og ikke nem ;)
Nu skal jeg heldigvis ikke leve med din løsning. Det er muligt du kan løse problemet ved at have sat ANSI NULL til OFF når du kører din procedurer på, som der står i nederste afsnit af det udsnit jeg gav dig.
Men forvent ikke at det virker 100%, heller ikke selv om du sætter compabilitets level tilbage til Adam og Eva.
Når producenten så utvetydigt skriver at du ikke skal forvente at dine scripts kommer til at virke som forventet, uanset ANSI NULL indstillingerne, og at du skal bruge IS NULL og IS NOT NULL, er det direkte tåbeligt at forsøge. Du har sikkert en chef ligesom jeg har, og den slags giver ordrer. Men det er også noget der hedder faglig stolthed og har du bare en smule af det, bør du opdatere dine scripts til den rigtige syntaks for din version.
Om du kan acceptere svar eller ej, f... det. Jeg er her for at give gode råd, og lige nu ser jeg desværre dig på vej ud i noget værre rod og vil gerne forsøge at forhindre det .-)
Mmm.. problemet er naturligvis at der er ret mange procedurer, der skal gåes igennem. Det er fem års udvikling med forretningslogik i SQL procedurer vi taler om. Så det er ikke nogen simpel løsning at lave dem alle om. Men jeg er da glad for rådene - problemet med dette specifikke råd var bare at jeg allerede havde forkastet det ;-)
Som jeg læser det du citerer, så skal procedurerne lægges på med den "rigtige" ANSI NULL setting. Det vil sige at hvis procedurene lægges på med ANSI NULL OFF, så vil de altid blive eksekveret sådan, uanset hvordan databasen efterfølgende sættes op.
Det var også det jeg regnede med.
Problemet er at når jeg tester det - udenfor procedurer i et query vindue, som beskrevet i mit første indlæg, så virker det ikke. Og det var det jeg spurgte om hvordan det kunne være.
Og det mener jeg du har forklaringen på i det førse afsnit af citatet, "For a script to work as intended..."
Det er efterhånden længe siden jeg sidst konverterede en 6.5 og kan derfor ikke helt huske om vi havde den problemstilling. Men jeg tolker det første afsnit derhen, at uanset hvordan ANSI NULL indstillingerne er, skal du bruge IS NULL/IS NOT NULL for at være sikker på at det virker.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.