2015-06-15 50 views
0

我有一個應用程序在vb.net使用Sql服務器數據庫。使更新/刪除到幾個數據庫的表的一種簡短方法

我使用實體框架6.1

該數據庫表(100+)

-On一些表有一個字段 「DelDate」(日期)

-On一些很多的表有一個字段「DelChilds」(位)

有很短的方式做這些操作:

1)有個所有表刪除所有記錄ËDelDate = 「2014年1月1日」

2)更新所有記錄 「DelChilds」 字段(例如設置爲True)

謝謝!

回答

0

您可以使用sys.columnsys.tablesexecute批量寫入動態查詢。 您可以使用實體框架調用Stored Procedure來實現此功能。

刑事訴訟法

Create Procedure UpdateDelete @date Date = '01/01/2014' 
AS 
Begin 
Declare @DelQuery Nvarchar(Max),@updatequery Nvarchar(Max), 
select @DelQuery = Stuff((
select ' Delete from ' + t.name + ' where DelDate = ''' + Convert (varchar,@date,110) + ''';' from sys.columns C JOIN sys.tables t on c.object_id = t.object_id 
where C.name = 'DelDate' for XMl Path('')),1,1,'') 

select @DelQuery 
Exec sp_executeSQL @DelQuery 

select @updatequery = Stuff((
select ' UPDATE ' + t.name + ' SET DelChilds = 1 ;' from sys.columns C JOIN sys.tables t on c.object_id = t.object_id 
where C.name = 'DelChilds' for XMl Path('')),1,1,'') 

--select @updatequery 
Exec sp_executeSQL @updatequery 
END 

對於DelDate

select 'DELETE FROM ' + t.name + ' WHERE DelDate = ''01/01/2014'' ' + Char(13) + 'GO ' from sys.columns C JOIN sys.tables t on c.object_id = t.object_id 
where C.name = 'DelDate' 

對於Delchilds

select 'UPDATE ' + t.name + ' SET DelChilds = 1 ' + Char(13) + 'GO ' from sys.columns C JOIN sys.tables t on c.object_id = t.object_id 
where C.name = 'DelChilds' 
+0

如何將這些可通過實體框架來執行,爲什麼你必須使用「從刪除... 「Delchilds,因爲這個領域應該更新。 – alex

+0

如果你喜歡這種方式(EF旁路),你可以通過Context.Database.Connection來執行它。如果您使用SQL Server,請在yyyymmdd中指定日期,否則您的程序只能在美國:) – bubi

+0

只有一些表具有「DelDate」字段,並且只有一些表具有「DelChilds」字段。這些查詢是否適用於這種情況?以及如何使用實體框架來運行這個? – alex

相關問題