【问题标题】:What is the SQL Server equivalent of EXECUTE IMMEDIATE INTO in OracleOracle 中 EXECUTE IMMEDIATE INTO 的 SQL Server 等效项是什么
【发布时间】:2019-09-01 08:05:53
【问题描述】:

Oracle 中 EXECUTE IMMEDIATE INTO 的 SQL Server 等效项是什么?

例如

DECLARE QRY varchar(100);

val int;

BEGIN

QRY:='select count(*) from production.product';

**EXECUTE IMMEDIATE** QRY **into** val;

dbms_output.put_line(val);

END;

/

【问题讨论】:

  • 我想要一种方法来存储从 select 语句返回的总行数的值。
  • 我的目的是将动态查询返回的值存储到给定变量中。我只是给了一个例如为了您的快速了解。请帮助我。
  • 比方说,代替总数。我想将给定列的 SUM 值存储到变量中。那么我的代码应该是什么。只需替换查询,如 QRY:=select sum(quantity) from production.product

标签: oracle11g sql-server-2012 dynamic-sql


【解决方案1】:

EXECUTE IMMEDIATE 的 T-SQL 等效项是 Dynamic Sql

DECLARE @intCount int
EXECUTE sp_executesql N'select @intCount=count(*) from product', N'@intCount int output', @intCount output;
Print(@intCount)

或者,您可以使用

DECLARE @intCount2 int
SELECT @intCount2 = count(*) from product

【讨论】:

  • 您没有存储返回的总行数的值。这就是我的目的和 EXECUTE IMMEDIATE INTO 的目的
  • 我想要一种方法来存储从 select 语句返回的总行数的值。
  • 您没有动态执行它。我想动态执行它并将它的值存储在一个变量中。请采用其他选项,例如表中给定列的总和并将其存储在变量中。
【解决方案2】:

您不能将标量变量设置为动态查询的结果,但可以将结果插入到表变量中。这行得通。

DECLARE @tbl TABLE (RowCnt INT NULL);

DECLARE
   @QRY varchar(100);

BEGIN

  SET @QRY = 'select <Aggregate Function> from tableName'; --Builds the dynamic query

  INSERT @tbl
    (
      RowCnt
    )
  EXECUTE(@QRY); --Executes the query

  SELECT 
    * 
  FROM @tbl;

END;

【讨论】:

  • 谢谢先生。你很有帮助。一切正常,我已经验证了我的答案
  • 太棒了!我很高兴能提供帮助。
猜你喜欢
  • 2019-06-26
  • 2011-06-26
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2023-03-18
  • 2016-12-22
  • 2010-11-19
相关资源
最近更新 更多