2010-12-04 9 views
2

Simple question, j'ai une application et selon si vous êtes dans le système d'administration ou sur le site Web public, je veux montrer des résultats différents. Exemple: dans la base de données pour un article de presse dans l'administration, je peux définir la valeur de la colonne 'showonsite' sur false. Donc, j'aimerais que cela apparaisse dans le panneau d'administration seulement et non sur le site en direct.Colonne SQL true ou false - utiliser une vue?

Ma question est, car j'ai besoin de la même information juste avec le seul changement de colonne, le site en direct pour montrer uniquement les vraies valeurs et l'administration pour montrer les deux. Quel est le moyen le plus efficace d'y parvenir sans copier le code?

Merci

Répondre

2

dépend où vous écrivez votre code - si vous utilisez des procédures stockées, puis juste un paramètre comme @liveonly devrait être suffisant. De même si vous utilisez directement une requête sql inline dans une méthode C#, alors un paramètre live_only devrait être assez bon, pour déterminer si la condition supplémentaire where sera ajoutée ou non.

Par exemple. dans la SP

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

De cette façon, il peut être appelé avec @live_only = false pour le panneau d'administration, mais avec la valeur true pour le site réel.

3

Veuillez voir la deuxième requête.

Il se peut que je manque quelque chose. Pour les utilisateurs non-administrateurs, pourriez-vous simplement pasSELECT les articles avec la colonne showonsite définie sur false?

Par exemple:

SELECT 
    * 
FROM 
    dbo.NewsStory 
WHERE 
    showOnSite = 1 

Edit:

Oh! Je vois. Vous parlez de copier et coller la requête. Il est tard. >. <

Si vous avez une procédure stockée, vous pouvez passer une valeur pour indiquer si l'utilisateur donné est un administrateur:

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

Non, je ne voudrais pas utiliser une vue pour cela, un I wouldn » t copier n'importe quel code. Il semble que ce soit juste un filtre conditionnel sur vos requêtes.

Vous ne faites pas clairement la façon dont vous faites l'accès aux données, mais cela pourrait signifier aasdij une ligne supplémentaire de TSQL, en ajoutant l'ajout d'un paramètre si, en ajoutant une clause LINQ .Lorsque supplémentaire, etc