In den letzten Jahren hatten wir mehrere Fälle in denen die Funktion suser_sid am SQL-Server-2005 nicht anständig funktionierte. Ich habe ein paar Prozeduren geschrieben, die Logins anlegen. Darin wird meistens gefragt ob es den Login schon gibt ("IF suser_sid(N'LoginName') IS NULL …"). Wenn nicht, dann wird er mit CREATE-LOGIN angelegt. Alle paar Monate kommt es bei einem Kunden vor, dass genau hier die Meldung kommt, dass es den Login schon gibt. Das ist ziemlich eigenartig und bei uns intern nicht reproduzierbar. Beim Kunden auf dessen System kann man das dann aber sehr gut reproduzieren.
Deswegen bin ich wieder dazu übergegangen – wie damals – auf die System-Views zuzugreifen (z.B. sys.syslogins). Nicht schön, aber das funktioniert immer.
Heute trat das gleiche Problem erstmalig mit user_id() auf! Gleiches Szenario: Wenn es den User noch nicht gibt ("IF user_id(N'UserName') IS NULL EXEC sp_adduser …"), dann lege ihn an. Da kam bei einem Kunden die Meldung, dass es den User schon gäbe. Das finde ich ja sowas von lästig!
Ich rate daher – entgegen der Meinung von Microsoft – von der Verwendung von SUSER_SID und USER_ID ab. Dann wohl doch lieber die daten selber aus den System-Views lesen… 🙁