值的所有數據,這是更好比某些魔法01/01/0001
值),那麼你可以說:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
UPDATE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id]))
+ ' SET ' + QUOTENAME(name) + ' = NULL
WHERE ' + QUOTENAME(name) + ' = ''20010101'';'
FROM sys.columns
WHERE system_type_id = 40; -- date
PRINT @sql;
--EXEC sp_executesql @sql;
現在,我懷疑的情況下,並沒有工作的情況下,數據類型其實也不是date
而是datetime
/smalldatetime
。所以,你可能反而要這樣:
WHERE system_type_id IN (40,42,43,58,61);
如果你還是想用這個騙人把戲,你可以改變這一行:
+ ' SET ' + QUOTENAME(name) + ' = NULL
要這樣:
+ ' SET ' + QUOTENAME(name) + ' = ''00010101''
但這韓元」如果該列是datetime
/smalldatetime
,則工作!
請注意,您應始終使用YYYYMMDD
。 This MM/DD/YYYY
stuff is a bad habit and prone to misinterpretation up and down the stack。
什麼「並不總是工作!!!!」意思?我知道這很令人沮喪,但如果我們不瞭解整個問題,我們也試圖幫助解決問題,這令人沮喪。 – 2013-03-25 16:41:06
您是否嘗試過使用date或datetime2導入日期,該日期應該接受「01/01/01000」?您使用的是哪種字段類型? – 2013-03-25 16:42:04
嗯,我不嘲諷'01/01/0001'是一個很好的策略,無論你使用什麼樣的數據類型,都是「空白日期」。我們有足夠的「魔法價值」,我們不需要創造更多。改用'NULL'。 – 2013-03-25 16:44:36