2016-03-03 22 views
0

我在TEventTEmployee表上創建了2個計算列,並在這些計算列上使用Index沒有任何問題。另一方面,由於在數據操作過程中遇到了一些問題,我們需要使用除這些之外的其他表。在這一點上,我想知道是否可以通過在單獨的表上創建它們來使用這些計算列,但從TEventTEmployee表除外?除此之外,使用View而不是Computed Column更好?你能否就這兩種方法澄清我們?在單獨的表上創建計算列?

--Creating Computed Columns: 
ALTER TABLE TEvent ADD CardNoRightEight AS RIGHT(CAST(CardNo AS int), 8) 
ALTER TABLE TEmployee ADD CardNoRightEight AS RIGHT(CAST(CardNo AS int), 8) 

--Creating Index 
CREATE INDEX TEmployee_CardNoRightEight_IDX ON TEmployee (CardNoRightEight) 
CREATE INDEX TEvent_CardNoRightEight_IDX ON TEvent (CardNoRightEight) 


更新:這裏是我的加入和CTE(公共表表達式)

;WITH a AS (
    SELECT emp.EmployeeName, emp.Status, dep.DeptName, job.JobName, emp.CardNoRightEight 
    FROM TEmployee emp 
    LEFT JOIN TDeptA AS dep ON emp.DeptAID = dep.DeptID 
    LEFT JOIN TJob AS job ON emp.JobID = job.JobID 
    ), 
    b AS (
    SELECT eve.EventID, eve.EventTime, evt.EventCH, dor.DoorName, eve.CardNoRightEight 
    FROM TEvent eve 
    LEFT JOIN TEventType AS evt ON eve.EventType = evt.EventID 
    LEFT JOIN TDoor AS dor ON eve.DoorID = dor.DoorID) 

SELECT * FROM b LEFT JOIN a ON a.CardNoRightEight = b.CardNoRightEight 
ORDER BY b.EventID ASC 

回答

0

實際上,你可以做到兩者兼得SELECT查詢。

第1種方法:創建一個用戶定義的函數

CREATE FUNCTION dbo.TEvent(@Column1_Val INT) 
RETURNS INT 
AS 
    BEGIN 
     RETURN 
     (--SQL Logic) 
    END 

您還可以使用此用戶定義的函數將列添加到不同的表是這樣的:

ALTER TABLE dbo.TEvent_CardNoRightEight_IDX 
ADD CardNoRightEight AS dbo.TEvent(Column1) 

個人,但是我會建議使用意見。

+0

你能解釋一下多一點嗎?其實我寧願使用視圖,但我不能。因爲我不知道如何將上面的查詢和View結合起來?我還將我的SELECT查詢添加到上面的問題。有什麼想法嗎? – hexadecimal

+0

有什麼想法嗎? – hexadecimal

+0

嘿, 對不起昨天被抓到了東西。 您實際上可以使用上述CTE本身作爲View的最終輸出。你只需要將上面的查詢本身封裝在 「CREATE VIEW [dbo]。[vw_View] AS」語法中,並且它應該適用於你。 如果有幫助的話,可以進行回覆:) –

相關問題