Dapper einzelnen Wert zurückgeben
Möchte ich diesen einfachen test durchzuführen, um zu sehen, ob eine Tabelle vorhanden ist. Ich dachte, es wäre einfach nur return einen int-Wert, je nachdem, ob die Tabelle vorhanden ist.
Unten ist das, was ich haben versucht, und funktioniert nicht:
result = connection.ExecuteScalar<int>(@"
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '@tableSchema'
AND TABLE_NAME = '@tableName'))
RETURN 0;
RETURN 1;
", new { tableSchema, tableName });
Fehlermeldung:
Einer RETURN-Anweisung mit einem Rückgabewert nicht verwendet werden, in diesem Zusammenhang.
Es ist etwas wirklich noddy...
Du musst angemeldet sein, um einen Kommentar abzugeben.
ExecuteScalar
Es nicht zurück, ist der Rückgabewert der SQL-Anweisungen. Sie könnten einfach verwenden
Dann können Sie
ExecuteScalar
und zurück1
wenn die Tabelle vorhanden ist. Bitte beachten Sie, dass ich auch korrigiert, die Parameter in den SQL-Anweisungen. Sie müssen nicht abgegrenzt werden von'
.Statt mit IF..ELSE-Anweisung können Sie die folgende Abfrage, und überprüfen, ob das Ergebnis größer als null ist.
BTW deine Abfrage syntax Fehler, das ist, warum Sie sehen, dass Fehler.
Alle oben genannten Antworten sind korrekt und machen Sinn. Aber Sie sollten erstellen Sie eine gespeicherte Prozedur, die dies überprüfen. So haben Sie weniger Gelegenheit haben, zu syntax-Fehlern und so leichter zu beheben.
Ich empfehlen, dass das Verfahren akzeptiert Schemaname und Tabellenname als Parameter. Dann wählen Sie 0 oder wählen Sie 1 je nachdem, ob die Tabelle gefunden wird oder nicht. Dapper ausführen können Verfahren, kein prob.
Wie andere schon gesagt haben, Sie sind immer Fehler becase Sie Ihre SQL-Abfrage enthält Fehler. Versuchen Sie es direkt im SQL-und Sie se den gleichen Fehler.
Wenn Ihre Werte angenommen, zeigt nun die Anzahl der Tabellen, die Sie zurückgeben, dann Karthik AMR Lösung scheint die beste.
Wenn die Werte 1 und 0 ist nicht wirklich eine zu zählen, wie viele Tische vorhanden, aber könnte auch einige chars, dann könnte dies auch für die Arbeit: