ExecuteScalar gibt NULL zurück

sql
sqlserver
Tags: #<Tag:0x00007fc2c5871560> #<Tag:0x00007fc2c5871420>

#1

Heute hatte ich ein seltsames Verhalten:

Fehler

Eine SQL-Abfrage, die ich im Management Studio korrekt ausführen konnte und die ein Ergebnis geliefert hatte, hat in meinem Programm (C# Script, über die ExecuteScalar-Funktion) einfach immer NULL zurückgegeben:

SELECT total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
FROM sys.master_files 
WHERE DB_NAME(database_id) = 'MyDatabase'

Es war wie verhext.

Ursache

Dann bin ich drauf gekommen:

Der Benutzer, mit dem ich die Abfrage ausgeführt habe, war in der C#-Anwendung ein anderer (via Connection String) als im Management Studio.

Lösung

Ich musste den Benutzer zur Rolle sysadmin hinzufügen, dann lieferte die Abfrage auch Werte.

Also:

ALTER SERVER ROLE [sysadmin] ADD MEMBER [MyUser]

Die ursprüngliche SQL-Avfrage habe ich aus dieser Stack-Overflow-Antwort.