是否可以更改SQL Server上特定數據庫的日期時間?在SQL Server實例上模擬當前日期?
是否與操作系統的日期/時間綁定?
我們希望模擬未來的日期時間用於測試目的,即GETDATE()
將在未來返回日期。
它一定是在一個半停產(分段)環境,讓不幸的是更改操作系統日期/時間不是我們的選擇。
在一個理想的世界裏,我們會啓動一個虛擬服務器,但目前也不是真正的選擇。
是否可以更改SQL Server上特定數據庫的日期時間?在SQL Server實例上模擬當前日期?
是否與操作系統的日期/時間綁定?
我們希望模擬未來的日期時間用於測試目的,即GETDATE()
將在未來返回日期。
它一定是在一個半停產(分段)環境,讓不幸的是更改操作系統日期/時間不是我們的選擇。
在一個理想的世界裏,我們會啓動一個虛擬服務器,但目前也不是真正的選擇。
如前所述,被別人號
一個真正哈克的解決辦法,將是寫自己的函數來返回你想要的日期,並使其返回GETDATE()你做測試時,和調用該函數。這樣做可能會有一些小的開銷,但它會做你所需要的。
不幸的是它與OS日期和時間有關。在這裏看到:http://msdn.microsoft.com/en-us/library/ms188383.aspx
該值從計算機上 操作系統的SQL Server實例正在運行的導出。
謝謝鯊魚,從我+1。我希望的某種神奇的解決辦法的... :-)我不知道是否有用於更改日期時間爲一個特定的EXE /線程任何硬編碼PowerShell腳本 - 儘管這聽起來很危險幾乎是不可能的/ V!看起來我將不得不進一步深入虛擬服務器選項..... EC2的時間我認爲:-) –
@AlexKey沒問題,很樂意提供幫助。 Powershell有一個'Set-Date' cmdlet(http://technet.microsoft.com/en-us/library/ee176960.aspx),但它會改變你的操作系統日期和時間。 – 2011-11-23 18:37:11
酷,謝謝你的cmdlet。 –
您可以隨時使用,並相應調整:
SELECT getutcdate()
請參見下面的更多信息 StackOverflow Question
但有沒有辦法改變從GETDATE()
結果不改變服務器日期。
EXEC xp_cmdshell 'DATE 10/10/2011'
...但不建議。
嗨,感謝您的迴應,但不幸的是,它不是調整GETDATE()的特定調用,而是調用所有對GETDATE()的調用,以便我們可以測試現有代碼。爲了使測試更健壯,我們試圖不改變代碼,而是調整環境。不管怎麼說,還是要謝謝你。 –
對不起,你的SQL問題似乎是SOL。 :) – SQLMason
感謝xp_cmdshell有趣的一點。我認爲它不在我們的分段環境中啓用,但我會記住cmd行,謝謝。 +1從我:-) –
感謝克里斯,我試圖避免改變我的代碼,但相似於Doozer的回答http://stackoverflow.com/q/8246648/141022它可能是一個來回切換的選項。感謝您的輸入。 –
另一個解決方法我已經有一些成功的是INSTEAD OF觸發器添加到被插入一個GETDATE()值的任何表並修改它還有如:
ALTER TRIGGER [dbo].[AccountsPayableReceivable_trg_i] ON [dbo].[AccountsPayableReceivable]
INSTEAD OF INSERT
AS
SET NOCOUNT ON
SELECT *
INTO #tmp_ins_AccountsPayableReceivable
FROM INSERTED
UPDATE #tmp_ins_AccountsPayableReceivable
SET dtPaymentMade = '01-Jan-1900'
WHERE dtPaymentMade between dateadd(ss, -5, getdate()) and dateadd(ss, +5, getdate())
INSERT INTO AccountsPayableReceivable
SELECT *
from #tmp_ins_AccountsPayableReceivable
(順便說一句,在where子句是存在的,因爲我的測試腳本自動生成這些觸發器,添加了對每一個datetime列的更新,所以我只想更新那些看起來像他們被插入了GETDATE()值。)
好主意,我現在處於一個不同的世界,所以不會使用它,但我喜歡理論!從我+1。 –
有趣的點(從我+1),讓我想如果有重寫GETDATE()的方式...看起來像我可以使用完整的語法dbo.GETDATE()它這意味着改變我的代碼......但不會太糟糕,但是我在2000年的兼容性模式下運行的2005年數據庫,所以我可能要求確定性/非確定性函數等問題。http:// stackoverflow .com/questions/2593047 /改變輸出的getdate –
對於所有神聖的愛,請不要叫你的新函數getdate。我想不出一個更容易產生混淆的方法,而不是爲了您自己的目的而選擇內置函數的名稱。如果您已經在更改您的代碼庫以適應您的新功能,請明確表示它正在執行其他操作。地獄,MYGETDATE會更好。 –
確實很好。 –