2016-06-14 52 views
0

我使用SQL Server 2008,我想通過DB與特定名稱&所有表圈只想更新那些記錄,enddatetime列數據匹配到當前日期和時間。 enddatetime列出現在所有表中。在網上搜索後,我遇到了這個代碼,但我無法修改它的更新查詢。請有人指導我使用正確的代碼?需要遍歷數據庫中的所有表及消防某些查詢的WHERE條件得到匹配

EXEC sp_MSforeachtable 
' 
DECLARE @DateTimeToSearch datetime = GETDATE() 

IF ''?'' LIKE ''%_PHGH_LINK_DETAILS%'' 
BEGIN 
SELECT * FROM ? WHERE enddate = @DateTimeToSearch 
END 
' 
+0

另一種方法是動態創建存儲過程中查詢只是更新一些表,而不是所有: https://msdn.microsoft.com/en-us/library/ms188001.aspx – Oooogi

+1

[?......「搜索淨」,誒(HTTP:// stackoverflow.com/questions/37787517/want-to-loop-through-all-tables-in-sql-db-perform-some-operation-on-the-record) –

回答

0

對於表的名稱相匹配的字符串使用下面的查詢

EXEC sp_MSforeachtable 
' 

IF ''?'' LIKE ''%yourtablename%'' 
BEGIN 
Update ? set col1 = value where enddatetime = Getdate() 
END' 

對於表的具體列表,請使用以下查詢

EXEC sp_MSforeachtable 
' 

IF ''?'' in (''[schema-name1].[table-name1]'',''[schema-name2].[table-name2]'') 
BEGIN 
Update ? set col1 = value where enddatetime = Getdate() 
END' 
+0

我試過的代碼,表名相匹配的字符串使用您提供的,但它遇到一個錯誤是:消息207,級別16,狀態1,行5 無效列名「結束日期」。對於這裏的條件必須檢查每一個表列。 –

+0

分享您運行的查詢。檢查您的表格中名爲「狀態」的列。你指的是表中沒有的列。檢查具有名稱匹配與你的表名 –

+0

EXEC sp_MSforeachtable ' IF'中的所有表?'」 LIKE'%_PHGH_LINK_DETAILS%' BEGIN 更新?一套動作=「」 donez「」,其中狀態=「」 Order_Created' END」 –

相關問題