【问题标题】:SQL management studio and Bind variablesSQL 管理工作室和绑定变量
【发布时间】:2015-11-05 10:38:09
【问题描述】:

我的数据库开发技能相当有限,但我最近在 Oracle SQL 开发人员中做了一些工作,使用绑定变量(即“:bv1”)作为参数占位符。

现在我在 MS SQL Server Management Studio(2012 版)中使用“@BV1”作为参数进行了一些类似的工作,但是当我在 Management Studio 中测试查询时,我不知道如何声明参数(即在执行时给它们实际值)。 Oracle SQL 曾经在您开始执行时弹出一个框来添加值,但我在 MS 版本中找不到类似的东西。

编辑:所以只是举一个我正在尝试执行的例子。我有一个带有这样的 where 子句的 select 语句:

WHERE FIELD_NAME in ( @BV1,@BV2,@BV3,@BV4,@BV5,@BV6,@BV7,@BV7,@BV8,@BV8)

当我单击执行时,它只是错误地说“必须声明标量变量“@BV1”。”在 Oracle 中,它通常会提示我为 BV 提供值。

【问题讨论】:

  • 什么意思?如果您从存储过程的上下文菜单中选择Execute,您确实会得到一个参数列表。你试过什么?您是否尝试在 SQL Server 中使用 Oracle 语法?为什么不只是exec mysproc 1exec mysproc @someVariable

标签: sql-server oracle ssms


【解决方案1】:

您无法在 SQL Management Studio 中执行此操作。您需要在脚本中声明和设置变量:

DECLARE @my_int INT 
SET @my_int = 0

【讨论】:

  • 我明白了……当我有 40 个参数时有点费力,但是哦……谢谢!
  • 天哪,太可悲了....在最新版本的 SSMS(当前为 18.5)中是否相同?
【解决方案2】:

SSMS 不直接支持参数化查询(如果查询需要真正参数化,您可以使用 sp_executesql)。

可以使用带有局部变量的模板来提示值替换。按 SHIFT-CTRL-M 显示替换对话框。下面的模板示例。

DECLARE 
      @BV1 sysname = <@BV1, sysname, BV1 value>
    , @BV2 sysname = <@BV2, sysname, BV2 value>
    , @BV3 sysname = <@BV3, sysname, BV3 value>
    , @BV4 sysname = <@BV4, sysname, BV4 value>
    , @BV5 sysname = <@BV5, sysname, BV5 value>
    , @BV6 sysname = <@BV6, sysname, BV6 value>
    , @BV7 sysname = <@BV7, sysname, BV7 value>
    , @BV8 sysname = <@BV8, sysname, BV8 value>;

SELECT ...
WHERE FIELD_NAME in ( @BV1,@BV2,@BV3,@BV4,@BV5,@BV6,@BV7,@BV7,@BV8,@BV8);

【讨论】:

    【解决方案3】:

    你总是必须先在脚本中声明你的变量:

    DECLARE @BV1 AS INT = 1;
    

    SQL Management Studio 在执行时不会提示为您声明它们。

    无论如何,在您的示例中,您似乎只是想要一些简单的东西,例如:

    WHERE FIELD_NAME in ( 1 ,2 ,3 )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多