2016-07-14 129 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 
相关问题