我們寫有asp.net/c#和Web應用程序的一部分使用SQL Server作爲SGBD在我們的數據庫中,幾乎表,我們有一個名爲列「YEAR」,所以在很多select
聲明,我們有如何隱含追加列where子句中的所有SELECT語句
select * from table where ... and Year = '2012'
例如
有沒有什麼辦法來重構這些查詢,以使「和年='2012」的一部分隱?
我們寫有asp.net/c#和Web應用程序的一部分使用SQL Server作爲SGBD在我們的數據庫中,幾乎表,我們有一個名爲列「YEAR」,所以在很多select
聲明,我們有如何隱含追加列where子句中的所有SELECT語句
select * from table where ... and Year = '2012'
例如
有沒有什麼辦法來重構這些查詢,以使「和年='2012」的一部分隱?
千萬不要錯過日期時間爲一個字符串。使用SQL命令,並把它作爲 DateTime.Now.Tear()
短代碼示例:
void int SQLQueryWith Implicit Date() {
// Create a sql statement with a parameter (@ImplicitYear)
string sql = @"SELECT rank = Count(*)
FROM table
WHERE table.date >= @ImplicitYear";
// Create a sql connection
// Always use the using statement for this
using (var connection = new SqlConnection(connectionString)) {
// Create a sql command
// Always use the using statement for this
using (var command = new SqlCommand(sql, connection)) {
// Pass the dateinput argument to the command, and let
// the .NET Framework handle the conversion properly!
command.Parameters.Add(new SqlCommand("ImplicitYear", DateTime.Now.Year()));
// No need for calling .Close() or .Dispose() - the using
// statements handle that for us
return (int)command.ExecuteScalar();
}
或者,如果你對數據庫端的存儲過程,你可以把它在存儲過程中隱含的,只是通過PARAMATERS你需要的。
編輯基於更新的信息,
您可以創建數據庫端的臨時表用一個查詢將每到單獨的年。如果您指向正確的表格,您可以使用一個查詢對所有表格執行此操作,然後從其餘查詢中刪除該年份。
其他想法: 我不是太流暢與如何工作的,而是基於一個小小的研究,您可以創建過濾數據庫快照每年並更新他們在服務器端每天的基礎上。 (msdn.microsoft.com/en-us/library/ms175876.aspx) 然後運行鍼對快照(http://blogs.msdn.com/b/sqlcat/archive/2007/06/06/querying-a-database-snapshot.aspx)查詢,你不會需要包括這些年來,只要你知道快照。
讓我們說我們有30個表格20的主題有一個'Year'列,並且數據庫有過去5年的數據,並且假設我們在一年的數據一次,所以我們從下拉列表中選擇一年,有沒有什麼辦法可以做全球投影,這樣我們就可以從查詢中刪除'..and Year = ...' – 2012-02-05 00:36:07
你想要做一個Join嗎?這些表用於您的投影?如果沒有,您可以在數據庫端創建臨時表,並將每個查詢劃分爲不同的年份。你可以用一個查詢對所有表執行此操作,然後從其餘查詢中刪除年份,如果你指向正確的表 – jordanhill123 2012-02-05 00:47:05
我在尋找的是一種僅僅包含整個數據庫視圖的方法數據一年一次 – 2012-02-05 00:55:49
什麼只是將其更改爲... And Year = year(getdate())
這將送花兒給人檢索當前年份。如果這不起作用,那麼你能否更詳細地解釋一下代碼是如何設計和構建SQL的?
欄目Year僅僅是一個例子,我們可以說我們有一個專欄,它存在於所有的數據庫表中;例如讓我們說我們有一個表格,我們有100年的行='2012'和200行我們='2011',我的問題是我們可以做所有表的全局投影,只過濾行年='2012'這種方式,我們不必把and和Year ='...'一直寫到一個新的查詢中 – 2012-02-05 00:21:43
「重構」是什麼意思? – 2012-02-04 23:56:25
@ anouar204取決於您用於構建sql語句的方法。有一個代碼示例? – jordanhill123 2012-02-04 23:58:17
我們不希望加入「和Year = ...」在我們查詢所有的時間,所以如果你有什麼想法,可以幫助,這不失爲偉大 – 2012-02-05 00:01:06