2010-12-04 10 views
2

Einfache Frage, ich habe eine Anwendung und abhängig davon, ob Sie im Verwaltungssystem oder auf der öffentlichen Website sind, möchte ich verschiedene Ergebnisse zeigen.SQL-Spalte wahr oder falsch - eine Ansicht verwenden?

Beispiel: In der Datenbank für eine Nachricht in der Administration kann ich den Spaltenwert 'showonsite' auf false setzen. Daher möchte ich, dass dies nur im Administrationsbereich und nicht auf der Live-Site angezeigt wird.

Meine Frage ist, weil ich die gleiche Information nur mit der einzigen Spaltenänderung benötige, lebende Seite, um nur wahre Werte und Verwaltung zu zeigen, um beide zu zeigen. Was ist der effektivste Weg, um dies ohne Kopieren von Code zu erreichen?

Dank

Antwort

2

Abhängig von wo Sie Ihren Code schreiben - wenn Sie gespeicherte Prozeduren verwenden, dann nur ein Parameter wie @liveonly ausreichend sein sollte. Sameway Wenn Sie eine Inline-SQL-Abfrage direkt in einer C# -Methode verwenden, sollte ein Parameter live_only ausreichend sein, um zu bestimmen, ob die Extra-Where-Bedingung hinzugefügt wird oder nicht.

Für z. in dem SP

SELECT * 
FROM news 
WHERE ((@live_only=true AND showonsite=true) or (@live_only=false)) 

Auf diese Weise kann es für Admin-Panel mit @live_only = false aufgerufen werden, aber mit dem Wert gilt für den tatsächlichen Ort.

3

Bitte beachten Sie die zweite Abfrage.

Ich kann etwas fehlen. Könnten Sie für nichtadministrative Benutzer einfach nichtSELECT Nachrichten Geschichten mit der showonsite Spalte auf false gesetzt?

Zum Beispiel:

SELECT 
    * 
FROM 
    dbo.NewsStory 
WHERE 
    showOnSite = 1 

Edit:

Oh! Aha. Sie sprechen über das Kopieren und Einfügen der Abfrage. Es ist spät. >. <

Wenn Sie eine gespeicherte Prozedur haben, können Sie einen Wert anzuzeigen, übergeben, ob der angegebene Benutzer ein Administrator ist:

SELECT 
    * 
FROM 
    dbo.NewsStory 
WHERE 
    showOnSite = 1 
    OR @isAdmin = 1 
1

Nein, ich würde keinen Blick dafür verwenden, ein I wouldn‘ t keinen Code kopieren. Es scheint, dass dies nur ein bedingter Filter für Ihre Abfragen ist.

Sie machen es nicht klar, wie Sie die Datenzugriffs tun, aber dies könnte aasdij eine zusätzliche Linie von TSQL bedeuten, das Hinzufügen eines so Parameter hinzufügen, indem Sie eine zusätzliche LINQ .Where Klausel, etc

Verwandte Themen