是否可以在Sql Server中的View中设置变量?

时间:2016-07-14 19:04:32

标签: sql sql-server tsql

我想在Sql Server中设置一个变量,从我正在使用的查询中选择日期

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

执行此操作会出现错误

2 个答案:

答案 0 :(得分:1)

没有。你不能在视图中这样做。我甚至不确定上述观点的重点是什么,因为它没有返回任何值。即使你可以,你也不愿意。像这样的变量只能存储一个varchar(20)值。如果没有“order by”和top语句,您将获得错误或非确定性值,除非您的表恰好只有一条记录。

答案 1 :(得分: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