我想在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
执行此操作会出现错误
答案 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