2014-10-03 67 views
0

我有一个非常常见的设置,本地数据库访问2013.accde客户端运行,与一些本地表,但大多数链接表和视图运行在其公司的微软SQL Server 2005.用VBA设置MSSQL数据库变量,用于查看那里

其中一个视图应根据订单表中的字段order_type筛选订单。目前没有,过滤器控制将被执行。

该视图,我们称之为viewOrderFilter,必须是“动态的”。我认为我会通过将该视图查询中的此字段order_type与数据库变量进行匹配来实现该目标。

如何将@var_OrderFilter设置为具有VBA代码的值,以便我可以将WHERE order_type = @ var_OrderFilter添加到视图的查询中?

编辑: 这是有效的语法吗?这些可以执行查询,或者必须是存储过程或其他?在代码中,我希望测试一个int是否可以设置为NULL,但不幸的是,如果我在任何地方在Microsoft Server Management Studio中输入这个值,程序就会崩溃,所以我不能“尝试”任何东西。

DECLARE @var_OrderFilter INT 
SET @var_OrderFilter=NULL 

感谢您的建议。

+0

你不能像这样参数化一个视图,而是使用一个函数。 – 2014-10-06 07:25:57

+0

是的,通过学习视图,存储过程和函数来获得某种方式来使这个视图动态化,我发现了这一点。原因是这个视图是全局使用的,现在每个用户都应该使用一个全局的“交换机”来进行所有使用它的查询(不必使用它的所有VBA函数,分析它们并在适用的地方添加一个WHERE)检查在运行的业务系统中没有不良副作用)。我发现这样做的唯一全局方式是将内部联接添加到每个用户表格字段,这会减慢视图。添加您的评论作为答案,我会接受! – 2014-10-06 11:38:11

回答

1

你不能像这样参数化一个视图。视图必须在创建时完全定义。

要使用参数推迟决策或过滤到运行时,应该创建一个函数。

CREATE FUNCTION