【问题标题】:Update a Table with Dynamic SQL results within Stored Procedure使用存储过程中的动态 SQL 结果更新表
【发布时间】:2014-08-17 04:56:59
【问题描述】:

我有一个表EPFReport,我需要用存储过程填充表。

ALTER procedure [dbo].[getEPFData] @EPFCol varchar(max) , @empID varchar(max)
AS 
   DECLARE @sql nvarchar(max) ; 
   DECLARE @sql2 nvarchar(max); 

   set @sql = 'SELECT c.employeeID,c.empName, c.month,@sql1 from Common c where c.employeeID='+@empID 

   set @sql2= 'SELECT ' + @EPFCol + ' FROM Common where employeeID='+@empID       

   truncate table EPFReport; 

   INSERT into EPFReport (empID, empName, monthVal) 
      execute(@sql);

到此为止,查询@sql 的结果将被插入到表中的要求已得到满足。现在我需要用@sql2 查询更新它,所以问题是如何在存储过程中为update 语句执行查询?

PS:我用过的插入

INSERT into EPFReport (empID, empName, monthVal) 
   execute(@sql);

这里还返回一组结果(每个月)。没有一行或单元格的结果。所以分配给一个变量并更新是行不通的。

更新:该表包含这些列

[empID]  [empName]  [EPFItemValues]  [monthVal]

第一个查询只更新 3 列,第二个查询应该更新列 EPFItemValues。

【问题讨论】:

  • 澄清一下,您是否要更新您插入的内容?
  • 是的。但 EPFItemValues 列未填充查询 @sql。所以在他开始时它有 NULL 值。我正在尝试使用查询“@sql2”更新该列。

标签: sql sql-server stored-procedures sql-update dynamic-sql


【解决方案1】:

试试;

根据您的评论,以下应该有效;

DECLARE @ID int = (Select MAX(ID) From EPFReport) // or SCOPE_IDENTITY

Update EPFReport
set EPFItemValues = @sql2
where ID = @ID

【讨论】:

  • 似乎,它不执行查询。它更新查询的字符串值,例如:Query is @sql2= 'SELECT ' + @EPFCol + ' FROM Common where employeeID='+@empID 。但插入的值将是“SELECT A002 FROM Common where employeeID=1001”。预期结果是分配给单元格的一些 int 值。但它会将自己的查询分配给单元格。
  • 这正是我要问的;您是否尝试将 EPFItemValues 列更新为 SQL“SELECT A002 FROM Common where employeeID=1001”?如果是这种情况,只要您正确构建,上述内容就会起作用。
猜你喜欢
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多