我有兩個表。事件之一和文章之一。
每個事件都有鏈接的文章,但文章可以不存在相應的事件。
我想要做的是獲得所有文章的列表,並有一個bool僞列,指示文章是否有鏈接事件。
即If在[Events]中存在行,其中ArticleID =當前ArticleID則爲true,如果不是false。sql server 2008 r2 - 條件僞列
回答
使用持久化計算列
首先創建一個函數返回true或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
然後添加計算列這樣
Alter TABLE [dbo.Article] Add HasEvents As dbo.udf_events_exist(id)
@BobTodd - 只有一個問題 - 我得到以下錯誤:「計算列'HasEvents'表'cmsArticle '不能持久,因爲列是非確定性的「 – 2011-05-15 11:19:12
ive添加了schemabinding屬性 – 2011-05-15 11:26:31
@Elad - 我敢肯定,你將無法堅持這一點。如果從'Events'表中刪除一行,函數的值將會改變。 – 2011-05-15 11:26:32
如果該值一定要堅持,你在Event表上需要一個after插入和刪除觸發器來更新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
好處是,它可以被索引
製作此
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. SQLDependency SQL Server 2008 R2
- 2. SQL Server 2008 R2 OBJECT_ID
- 3. COUNT條件爲真的列數? SQL Server 2008 R2的
- 4. 使用SQL PIVOT行列... SQL Server 2008 R2
- 5. 檢測SQL Server 2008 R2的
- 6. SQL Server 2008 R2和SQL Server 2008 R2 RTM之間的差異
- 7. 從SQL Server 2008 R2 Express升級到SQL Server 2008 R2企業
- 8. 加入兩列兩列SQL Server 2008 R2
- 9. ASP.NET,SQL Server 2008 R2,System.OverflowException
- 10. WPF和SQL Server 2008 R2 DB
- 11. SQL Server 2008 R2的樞軸
- 12. SQL Server 2008 R2 Express行號
- 13. SQL Server 2008 R2合併
- 14. SQL Server 2008 R2表查詢
- 15. 不能在SQL Server 2008 R2
- 16. Redmine與SQL Server 2008 R2
- 17. 的connectionString爲SQL Server 2008 R2
- 18. SQL Server 2008 R2中的散列表
- 19. SQL Server 2008 R2觸發器標識列
- 20. 在SQL Server 2008 R2中壓縮XML列
- 21. 列名無效:SQL Server 2008 R2
- 22. SQL Server 2000到SQL Server 2008 R2遷移
- 23. SQL Server 2008 R2對SQL Server 2012
- 24. SQL Server 2008 R2中的SQL Server Reporting Services
- 25. Sql Server 2008 R2 Reporting Services
- 26. Attunity Terada - Sql Server 2008 R2
- 27. 不能在SQL Server 2008 R2
- 28. sql server 2008 r2 express edition
- 29. SQL Server 2008 R2的性能
- 30. SQL Server 2008 R2分組
視圖你可以在這個答案。 http://stackoverflow.com/questions/5992673/get-current-record-for-a-subquery-in-t-sql/5992772#5992772 – 2011-05-15 11:05:18
@Mikael Eriksson - 感謝您的評論。這也是一個很好的解決方案,但是BobTodd的一個更好,因爲它是持久的(如果我能最終得到它) – 2011-05-15 11:22:48