我只是在处理存储过程时遇到问题,
我的情况如下,
我在另一个存储过程中调用一个存储过程,例如,
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_executesql
与output
变量一起使用来从动态 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;
我认为这将解决您的问题。