【问题标题】:Set an MSSQL database variable with VBA, to be used in a View there使用 VBA 设置 MSSQL 数据库变量,以便在此处的视图中使用
【发布时间】:2014-11-28 15:06:42
【问题描述】:

我有一个非常常见的设置,客户端运行的本地数据库 Access 2013 .accde,有一些本地表,但主要是链接表和视图在他们公司的 Microsoft SQL Server 2005 上运行。

其中一个视图应根据 order_type(订单表中的一个字段)过滤订单。目前还没有,要实现过滤控制。

视图,我们称之为 viewOrderFilter,必须是“动态的”。我想我会通过使其与视图查询中的 order_type 字段匹配到数据库变量来实现这一点。

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

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

DECLARE @var_OrderFilter INT
SET @var_OrderFilter=NULL 

感谢您的建议。

【问题讨论】:

  • 你不能像那样参数化视图,改用函数。
  • 是的,通过了解视图、存储过程和函数来获得使视图动态化的方法,我发现了这一点。原因是该视图是全局使用的,现在应该为所有使用它的查询使用全局的每用户“开关”(不必使用它遍历所有 VBA 函数,分析它们并在适用的地方添加一个 WHERE 和检查正在运行的业务系统中是否存在不希望的副作用)。我发现这样做的唯一全局方法是向每个用户表字段添加内部连接,这会减慢视图速度。添加您的评论作为答案,我会接受!

标签: sql-server vba server-variables


【解决方案1】:

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

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

CREATE FUNCTION.

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2021-04-19
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多