2016-07-14 131 views
1

我想設置SQL Server中的變量,從視圖中選擇日期我使用的查詢是是否可以在Sql Server中的View中設置變量?

declare @var varchar(20) 
set @var = (SELECT Current_Period_SID FROM dbo.VW_Current_Period_SID_USNT) 

只是想知道有沒有辦法來設置變量視圖中的類似

CREATE VIEW mp_test AS 
declare @var varchar(20) 

set @var = (SELECT Current_Period_SID FROM dbo.VW_Current_Period_SID_USNT) 

GO 

這樣做會產生錯誤

+0

您可以編寫一個函數來設置一個變量,並將其返回。使用視圖不是正確的方法。 –

+0

還應該注意的是,如果您的子查詢返回多個值,您將收到另一個錯誤。 – BJones

+0

感謝您的回覆,我會把它作爲一個功能,然後 – mb1987

回答

1

不可以。您不能在視圖中執行此操作。我甚至不確定上述觀點的重點是什麼,因爲它沒有返回任何價值。即使你可以,你也不想。像這樣的變量只能存儲一個varchar(20)值。沒有「order by」和top語句,你會得到一個錯誤或一個非確定性的值,除非你的表恰好只有一個記錄。

+0

感謝您的回覆,然後將其作爲一項功能 – mb1987

0

您可以使用CTE輕鬆地在視圖中僞造一個變量。您可以在您的SQL Server版本中測試運行它。

CREATE VIEW vwImportant_Users AS 
WITH params AS (
    SELECT 
    varType='%Admin%', 
    varMinStatus=1) 
SELECT status, name 
    FROM sys.sysusers, params 
    WHERE status > varMinStatus OR name LIKE varType 

SELECT * FROM vwImportant_Users 

產生輸出:

status name 
12  dbo 
0  db_accessadmin 
0  db_securityadmin 
0  db_ddladmin 

還通過JOIN

WITH params AS (SELECT varType='%Admin%', varMinStatus=1) 
SELECT status, name 
    FROM sys.sysusers INNER JOIN params ON 1=1 
    WHERE status > varMinStatus OR name LIKE varType 

還通過CROSS APPLY

WITH params AS (SELECT varType='%Admin%', varMinStatus=1) 
SELECT status, name 
    FROM sys.sysusers CROSS APPLY params 
    WHERE status > varMinStatus OR name LIKE varType 
相關問題