2017-04-18 93 views
0

如何在一些條件下整個表生成update語句?例如,我有表TSQL生成更新語句,條件

enter image description here

,我想指定日期(本例中'3/16/2016'),併產生類似下面的更新

UPDATE TableName SET ColumnValue = 30 AND ModifiedDate = '2016-03-17' WHERE Id = 2 

是否會有指定的日期之後更多的變化,我想爲這些更改生成所有更新。

有一些簡單的解決辦法還是我通過一些定製C#腳本有腳本這一切呢?

+0

我們需要更多的細節來回答這個問題。就像你想要更新哪些行,從哪裏獲得數據,就像那樣。 –

+0

我需要爲某些日期後更改的行生成更新語句。 (創建導出文件) – Muflix

回答

0

如果你只是想生成更新語句,你可以做這樣的事情:

declare @afterDate date = '20160316'; 

select update_statements = 'update table t set columnvalue = ' 
     +convert(varchar(10),columnvalue) 
     +', modifieddate = ''' 
     +replace(convert(varchar(10),modifieddate,120),'-','')+'''' 
     +' where id = '+convert(varchar(10),id)+';' 
from t 
where modifieddate > @afterdate; 

rextester演示:http://rextester.com/MZQ68677

回報:

+------------------------------------------------------------------------------+ 
|        update_statements        | 
+------------------------------------------------------------------------------+ 
| update table t set columnvalue = 30, modifieddate = '20160317' where id = 2; | 
+------------------------------------------------------------------------------+ 
+0

太好了,謝謝。 – Muflix

+1

@Muflix樂意幫忙! – SqlZim

1

如果你有2個相同的表,需要更新基於另一個表中的特定時間戳(@date)後發梗,那麼你可以使用下面的查詢修改中的一個表。

UPDATE T1 
SET T1.ColumnValue=T2.ColumnValue,T1.ModifiedDate=T2.ModifiedDate 
FROM Table1 T1 inner join Table2 T2 on T1.ID=T2.ID 
WHERE T2.ModifiedDate>[email protected] 
+0

感謝你,但不是我的方案,我需要有更新報表導出文件。 – Muflix

+0

在這種情況下,您可以使用該表的SQL觸發器來記錄每一個數據修改更新語句。 –

+0

你可以請更具體嗎? – Muflix

0

這使觸發器來跟蹤表格的所有更新。基於表結構,您可以在跟蹤表中添加所需的列。

CREATE TABLE EMP(ID int, NAME VARCHAR(20), SALARY MONEY) 
CREATE TABLE TrackUpdate (Id int identity, updatestmt varchar(500), DateCreated datetime) 
GO 
INSERT INTO EMP 
VALUES 
(1, 'A', 10),(2, 'E',40),(3,'B',5),(4,'F',40),(5,'I',50) 
GO 
ALTER TRIGGER TR_EMP ON EMP 
INSTEAD OF UPDATE 
AS 
BEGIN 
    declare @Name varchar(10) 
    declare @Salary MONEY 
    SELECT @Name=Name,@Salary=Salary FROM inserted 
    insert into TrackUpdate values ('update Emp SET E.Name='''[email protected]+''', '+'E.Salary='+CAST(@Salary as varchar(20)),getdate()) 
    update E SET E.Name=I.Name, E.Salary=I.Salary 
    FROM EMP E inner join inserted I on I.ID=E.ID 
END 
update EMP set Name='D' where ID=4 
select updatestmt from TrackUpdate 
--drop table EMP 
--drop table TrackUpdate