J'ai deux tables. Un des événements et un des articles.
Chaque événement a un article lié, mais les articles peuvent exister sans événements correspondants.
Ce que je veux faire est obtenir une liste de tous les articles et avoir une pseudo-colonne bool qui indique si l'article a un événement lié ou non.
c.-à-d. S'il existe une ligne dans [Events] où ArticleID = l'articleID actuel alors vrai, sinon faux.sql server 2008 r2 - pseudo-colonne conditionnelle
Répondre
Utilisez une colonne calculée persistante
d'abord créer une fonction pour retourner true ou false
-- This function will provide the computed column definition
CREATE FUNCTION udf_article_has_events (@id int)
RETURNS bit
WITH SCHEMABINDING
AS
BEGIN
DECLARE @retval bit
set @retval = 0
if exists(select * from [Events] where ArticleId = @id)
set @retval = 1
RETURN @retval
END
ajouter ensuite la colonne calculée comme celui-ci
Alter TABLE [dbo.Article] Add HasEvents As dbo.udf_events_exist(id)
@BobTodd - Juste un problème - J'obtiens l'erreur suivante: "Colonne calculée 'HasEvents' dans la table 'cmsArticle 'ne peut pas être persisté car la colonne est non-déterministe " –
ive a ajouté l'attribut schemabinding –
@Elad - Je suis sûr que vous ne pourrez pas persister. La valeur de la fonction changera si vous supprimez une ligne de la table 'Events'. –
Si la valeur doit être persisté, vous besoin d'un déclencheur after insert et delete sur la table Event pour mettre à jour la colonne Article.HasEvents
CREATE TRIGGER SetHAsEvents
ON dbo.[Events]
FOR INSERT
AS
Update Article Set HasEvents = dbo.udf_article_has_events(inserted.ArticleId)
Where Id = inserted.ArticleId
GO
avantage d'une colonne est persistante qu'il peut être indexé
Créer une vue de ce
SELECT *, CASE
WHEN E.ArticleID IS NULL THEN false
ELSE true
END as EventExist
FROM Article A
LEFT JOIN Events E ON A.ArticleID = E.ArticleID
- 1. SQL Server 2008 R2
- 2. pagination SQL Server 2008 R2
- 3. Détecte SQL Server 2008 R2
- 4. SQL Server 2008 R2 Grouping
- 5. SQL Server 2008 - Plage conditionnelle
- 6. Mise à niveau de SQL Server 2008 R2 Express vers SQL Server 2008 R2 Enterprise
- 7. Paramètre manquant SQL Server 2008 R2
- 8. WPF et SQL Server 2008 R2 DB
- 9. Requêtes spatiales SQL Server 2008 R2
- 10. tutorial sql server 2008 Reporting Services R2
- 11. Vue compliquée de SQL Server 2008 R2
- 12. SQL Server 2008 R2 Excel Importer
- 13. SQL Server 2008 R2 Champ calculé Problème
- 14. Autorisations utilisateur SQL Server 2008 R2
- 15. Décharge MySQL vers SQL Server 2008 R2
- 16. Performances SSIS sur SQL Server 2008 R2
- 17. Sql Server 2008 R2 - Parallel Data Warehouse
- 18. Linux accédant à SQL Server 2008 R2?
- 19. SQL Server 2008 R2 RTM sur MSDN?
- 20. SQL Server 2008 r2 MDX GetDate()
- 21. support FluentNhibernate pour SQL Server 2008 R2
- 22. Paging efficace dans SQL Server 2008 R2
- 23. SQL Server 2008 R2 Géographie Distance?
- 24. SSRS utilisant Sql Server 2008 R2
- 25. SQL Server 2008 R2 comment créer ASSEMBLY
- 26. SQL SERVER 2008 R2 DBCC PAGE PUZZLED
- 27. Interblocages dans SQL Server 2008 R2
- 28. Réplication SQL Server 2008 R2 Problème
- 29. Hashtable dans SQL Server 2008 R2
- 30. Limitation de l'hémisphère SQL Server 2008 R2
Vous pouvez faire comme dans cette réponse. http://stackoverflow.com/questions/5992673/get-current-record-for-a-subquery-in-t-sql/5992772#5992772 –
@Mikael Eriksson - Merci pour le commentaire. C'est aussi une bonne solution, mais celle de BobTodd est meilleure car elle est persistante (Si je peux la faire fonctionner éventuellement) –