的SQL是:這個SQL有什麼問題?
execute ('delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) + '''')
的錯誤是
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'convert'.
註釋掉轉換部分刪除錯誤。怎麼了?
的SQL是:這個SQL有什麼問題?
execute ('delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0) + '''')
的錯誤是
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'convert'.
註釋掉轉換部分刪除錯誤。怎麼了?
EXECUTE (@stringvariable)
不允許串聯比@stringvariable1 + @stringvariable2
更復雜的你不得不這樣做:
DECLARE @sql nvarchar(4000)
SELECT @sql = 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(4000), 0) + '''
EXECUTE (@sql)
但是,那麼你有無效的日期錯誤...和我已經修復了報價錯誤...
取代「執行」和「打印」,刪除括號,並運行,你會得到
delete from HttpRequests where Date < '2009-08-0'
這不是一個有效的日期。
好點,但這是否解釋了編譯錯誤? – 2009-11-17 19:57:50
當涉及語法錯誤時,SQL引發的實際錯誤往往有點......任意。 – 2009-11-17 21:08:42
不,問題在於你不能在EXEC內執行這樣的操作(就像你不能調用EXEC dbo.someProc @foo =(@bar + 1);)。一旦你得到適當的日期格式,使用一個變量作爲佔位符,然後使用EXEC(@variable);. – 2009-11-17 21:19:58
查詢日期喜歡yyyyMMdd並把[max]放在[]之間。
SQL Server可以理解ISO 8601格式的日期(「yyyy-MM-dd」),'nvarchar(max)'是SQL Server的合法語法。 – 2009-11-17 19:43:52
這可以,但是很清楚是什麼意思? Max可能會誤解爲保留字。像yyyyMMdd這樣的日期比含有' - '或'/'的日期更常用。我真的不想閱讀你的代碼丹尼爾,即使它工作.. – 2009-11-17 19:55:17
丹尼爾,YYYYMMDD更安全。試試這個:SET LANGUAGE FRENCH; SELECT CONVERT(DATETIME,'2009-11-13'); – 2009-11-17 21:16:52
您似乎沒有創建有效日期。
select 'delete from HttpRequests where Date < ''2009-08-' + convert(nvarchar(max), 0)
+ '' ''
會給你:從HTTPRequests的刪去日期< '2009-08-0'
是沒有錯的發言。 SQL根本不允許將CONVERT表達式的結果傳遞給EXEC。我找不到任何文檔,但很多人都會報告這種行爲。
http://www.eggheadcafe.com/software/aspnet/34917755/pass-result-of-convert-as.aspx
'execute'不會創建存儲過程,因此您的評論不適用。參考:http://msdn.microsoft.com/en-us/library/ms188332.aspx – 2009-11-17 19:45:02
謝謝,我知道。我的觀點是關於將參數傳遞給EXEC。 – 2009-11-17 19:47:42
@LymanZerga:我的錯。我沒有意識到這種行爲。 – 2009-11-17 23:48:05
我會在最後投3票而不是4. – 2009-11-17 19:29:57
由w唉,你知道可以構建一個謂詞字符串而不需要使用動態SQL,對嗎?一般來說,你應該像動態語言中的'eval()'一樣對待SQL中的'execute':一個非常強大的,非常危險的工具,只有在沒有其他工具可以使用時纔會使用它。 – 2009-11-17 19:38:43
你知道嗎,我無法想象你在這裏試圖做什麼,這是不是更好,更安全地使用正常的日期處理函數。實際上,我無法想象通過使用這些結構,你正在嘗試做什麼。 – 2009-12-27 13:50:44