在存储过程中使用动态SQL结果更新表

时间:2014-08-17 04:56:59

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

我有一个表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

1 个答案:

答案 0 :(得分:0)

尝试;

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

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

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