使用参数创建SQL视图

时间:2012-07-16 12:59:55

标签: sql-server sql-server-2008 view

我有一个接受参数的SQL查询。现在,当我试图将该查询包含到视图中时,我面临一个错误,因为视图不能像SP或函数那样保存参数。

因此,如果我必须创建必须包含参数的视图,那么有可能吗?

非常感谢

5 个答案:

答案 0 :(得分:6)

我不这么认为你可以在View中创建一个参数。但是你可以创建一个输入参数的函数,如下所示。

CREATE FUNCTION dbo.Sample (@Parameter varchar(10))
RETURNS TABLE
AS
RETURN
(
 SELECT Field1, Field2,....
 FROM YourTable
 WHERE Field3 = @Parameter
)

答案 1 :(得分:5)

不,from MSDN

  

创建一个定义了内容(列和行)的虚拟表   通过查询。使用此语句在一个或多个中创建数据视图   数据库中有更多表。例如,视图可用于   以下目的:

     

关注,简化和自定义每个用户拥有的感知   数据库中。

     

作为一种安全机制,允许用户通过访问数据   查看,无需授予用户直接访问权限   基础基表。

     

提供向后兼容的接口来模拟其表格   架构已经改变。

所以,基本上,这就像一个表一样,你可以在表中添加“参数”的唯一方法是在访问视图时通过filter语句

答案 2 :(得分:0)

绝对不是。 将View视为一个包含已编译数据集的表(尽管实际上视图与表不同),因此它永远不会有任何输入参数,如sp或函数。

答案 3 :(得分:0)

你们从来没有这样做过,因为VIEW是一个由查询创建的整个其他表,你可以在该查询中包含参数....它也很简单

像使用参数一样构建你的视图......

示例:

USE [iepa]
GO
/****** Object:  StoredProcedure [dbo].[get_Batch_Data]    Script Date: 06/30/2015 11:41:38 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[get_Batch_Data]
@inparm varchar(12)
AS
select *
from batch_data
where COM_Batch_ID=@inparm

现在调用这样的视图:

select from get_batch_data('61404')  <<<< 61404 is the parameter being passed....

非常简单且非常强大,因为您可以使用视图向表的子集或表的并集提供不可更改的信息。
视图不是表格,所以有时你不能做的事情。

但是当你在查询中形成一个非常复杂的连接/联合时,这些是你不能做的事情......自1999年以来一直在使用上面那个,所以我知道它有效....

答案 4 :(得分:0)

视图无法直接传递参数,但您可以使用context_info,例如

declare @v varbinary(8)
set @v = cast(cast(floor( current_timestamp as float)) as bigint) as varbinary) --
set context_info @v -- save 
select * from my_viev

create my_view as
with CTE(date) as (
  select cast(cast(substring(context_info(),1,8) as bigint) as datetime) date  -- read
)
select * from filials p
 left join filials rea on rea.number = p.number 
 and (date between         rea.dateopen and '12.12.9999')
where date between p.datestart and p.datestop