7

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

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

非常感谢

4

5 回答 5

6

我不认为您可以在视图中创建参数。但是您可以创建一个函数,该函数采用如下输入参数。

CREATE FUNCTION dbo.Sample (@Parameter varchar(10))
RETURNS TABLE
AS
RETURN
(
 SELECT Field1, Field2,....
 FROM YourTable
 WHERE Field3 = @Parameter
)
于 2012-07-16T13:03:29.160 回答
5

不,来自 MSDN

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

集中、简化和定制每个用户对数据库的看法。

作为一种安全机制,允许用户通过视图访问数据,而不授予用户直接访问底层基表的权限。

提供向后兼容的接口来模拟架构已更改的表。

因此,基本上,这就像一个表,并且您可以将“参数”添加到表的唯一方法是在访问视图时通过过滤器语句

于 2012-07-16T13:03:31.643 回答
0

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

于 2012-07-16T13:27:00.477 回答
0

View 不能直接传递参数,但是可以使用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 
于 2018-03-05T10:46:32.927 回答
-3

你们从来没有这样做过,因为 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....

非常简单且非常强大,因为您可以使用视图向表的子集或表的联合提供 UNALTERABLE 信息。
视图不是表格,因此有时您无法做一些事情。

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

于 2015-06-30T16:47:24.440 回答