【问题标题】:How to store result of EXEC sys.sp_executesql如何存储 EXEC sys.sp_executesql 的结果
【发布时间】:2021-07-14 17:56:15
【问题描述】:

如何将exec 的结果存储到变量中?

这是我将数据存储在变量中的尝试:

DECLARE @oltp VARCHAR(50) SET @oltp = 'emp'
DECLARE @wh VARCHAR(25) SET @wh = '_wh'
DECLARE @DatabaseName SYSNAME = @oltp + @wh;
DECLARE @oltp_data_days NVARCHAR(500)
DECLARE @Params NVARCHAR(500)
DECLARE @vi int

SET @oltp_data_days = N'(SELECT datediff(DAY, MIN(business_date), GETDATE()) AS keep_days
        FROM '+QUOTENAME(@DatabaseName)+'..sales 
        WHERE business_date > ''1/1/2000 00:00:00'')'

EXEC sp_executesql  @oltp_data_days  = @oltp_data_days
      , @Params = N'@vi INT OUTPUT'
      , @vi = @vi OUTPUT

我得到的结果为 Null。

【问题讨论】:

  • INSERT INTO...EXEC...?
  • 另外,我们现在怎么称呼你,Anu 或 Mani?因为这显然是herehere 的问题。也许阿努是同学?如果是这样,我建议也许一起工作。如果您创建了第二个帐户以避免问题被禁止,那是违反规则的。
  • EXEC sp_executesql @oltp_data_days = @oltp_data_days 也会出错。 sys.sp_executesql 没有名为 @oltp_data_days 的参数。

标签: sql sql-server tsql stored-procedures exec


【解决方案1】:

像这样:

declare @sql nvarchar(max) = N'set @vi = (select 3 as keep_days)'
declare @vi int

exec sp_executesql @sql, N'@vi int output', @vi = @vi output

select @vi 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多