使用sp_executesql从动态SQL返回值,并在末尾名称处动态添加变量数据时出现输出变量(或)错误
我在处理存储过程时遇到了一个问题 我的情况如下, 我在另一个存储过程中调用一个存储过程,例如使用sp_executesql从动态SQL返回值,并在末尾名称处动态添加变量数据时出现输出变量(或)错误,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我在处理存储过程时遇到了一个问题 我的情况如下, 我在另一个存储过程中调用一个存储过程,例如 EXEC [SP_ADMIN_INSERT_ITEM_STOCK_DETAILS] @stk_tran_no = @cash_purchase_no, @stk_tran_date = GetDate(), @tran_type = 'Cash Purc
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\u Purchase\u 14,其中14是一个每年变化的动态值,因为这是2014财年,所以看起来像Cash\u Purchase\u 14,明年它将是Cash\u Purchase\u 15
因此,我首先将这些quire写为字符串,然后按如下所示执行它们
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\u purchase\u 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\u purchase\u 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\u purchase\u date1的值并没有取代它,只是保持不变
请帮助获取块外变量的值
或
如何使用变量动态地将值14追加到表名的末尾
我试着
Declare @cash_purchase_date1 datetime
set @cash_purchase_date1 = cash_purchase_date from Cash_Purchase_+ @Financialyearpart
我想我在解释的时候把问题弄得有点复杂了。请帮我解决这个问题
提前感谢。您可以使用带有
输出变量的sp_executesql
从动态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;
我想这会解决你的问题