通过将sp_executesql与输出变量一起使用从动态 SQL 返回值 (Or) 在末尾名称动态追加变量数据时出错



我只是在处理存储过程时遇到问题,

我的情况如下,

我在另一个存储过程中调用一个存储过程,例如,

EXEC    [SP_ADMIN_INSERT_ITEM_STOCK_DETAILS]
                        @stk_tran_no =  @cash_purchase_no,
                        @stk_tran_date = GetDate(),
                        @tran_type = 'Cash Purchase',
                        @item_code =  @item_code,
                        @quantity = @quantity

目前在上面的代码中,我们将当前日期传递给参数 @stk_tran_date。

但是现在我需要通过从其他表中获取日期来将日期传递给@stk_tran_date,例如,

select  @stk_tran_date  = Convert(datetime,cash_purchase_date,103) from Cash_Purchase_14  where cash_purchase_no = 'GOH-9/2014'

如果你观察到我的表名就像Cash_Purchase_14其中14是一个动态值,每年都在变化,因为这是2014财年,所以看起来像Cash_Purchase_14,明年它将是Cash_Purchase_15。

因此,我习惯先将这些查询编写为字符串,然后执行它们,如下所示,

  declare @SQL nvarchar(4000)
  set @SQL =N' Declare @cash_purchase_date1 datetime 
  set @cash_purchase_date1 = (select  cash_purchase_date from Cash_Purchase_'+ @Financialyearpart +'  where cash_purchase_no = ''' + @cash_purchase_no + ''')
                            print @cash_purchase_date1'
  exec executesql @SQL

但是我需要变量的值@cash_purchase_date1在此块之外,如下所示,

EXEC    [SP_ADMIN_INSERT_ITEM_STOCK_DETAILS]
                        @stk_tran_no =  @cash_purchase_no,
                        @stk_tran_date = @cash_purchase_date1,
                        @tran_type = 'Cash Purchase',
                        @item_code =  @item_code,
                        @quantity = @quantity

但它给出了一个错误,例如"声明变量@cash_purchase_date1"

在其他情况下,我尝试像在字符串旁边调用存储过程一样,

SET @SQL =' Declare @cash_purchase_date1 datetime
                        set @cash_purchase_date1 = (select  cash_purchase_date from Cash_Purchase_'+ @Financialyearpart +'  where cash_purchase_no = ' + @qt + @cash_purchase_no + @qt +')
                        print @cash_purchase_date1
                        EXEC    [SP_ADMIN_INSERT_ITEM_STOCK_DETAILS]
                        @stk_tran_no = ' + @qt + @cash_purchase_no + @qt +',
                        @stk_tran_date = @cash_purchase_date1,
                        @tran_type = ''Cash Purchase'',
                        @item_code = ' + @qt + @item_code + @qt +',
                        @quantity = ' + @quantity
exec executesql @SQL

在这种情况下,@cash_purchase_date1 的值不会替换它,只是保留相同的值。

请帮助获取块外变量的值。

如何使用变量在表名末尾动态附加值 14。

我试过像

Declare @cash_purchase_date1 datetime
set @cash_purchase_date1 =  cash_purchase_date from Cash_Purchase_+ @Financialyearpart

我想我在解释时使问题有点复杂。请帮助我解决问题。

提前谢谢。

您可以通过将sp_executesqloutput变量一起使用来从动态 sql 返回值:

 declare @SQL nvarchar(4000);
 declare @cash_purchase_date datetime;
    set @SQL = N'select @cash_purchase_date = cash_purchase_date from Cash_Purchase_' + @Financialyearpart + ' where cash_purchase_no = ''' + @cash_purchase_no + '''';
    exec sp_executesql @SQL, N'@cash_purchase_date datetime OUTPUT', @cash_purchase_date = @cash_purchase_date OUTPUT;

我认为这将解决您的问题。

最新更新