Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sp_executesql从动态SQL返回值,并在末尾名称处动态添加变量数据时出现输出变量(或)错误_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

使用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;
我想这会解决你的问题