2012-11-07 22 views
1

轉換日期和/或時間從字符串「從字符串轉換日期和/或時間時,轉換失敗。」似乎沒有解決我的問題。SQL內連接在SP得到我已搜查約20個結果apertaining到錯誤信息的錯誤消息

一小段歷史,上週五進行了查詢工作得很好,返回的數據是正確的。在接下來的星期一,查詢不再起作用,並給出了此錯誤消息,「從字符串轉換日期和/或時間時轉換失敗。」因此,作戰幾個小時後,它能夠運行在它有問題的代碼的函數和查詢再次運行完美。直到今天早上。我進入辦公室並運行查詢並收到錯誤「轉換日期和/或時間從字符串轉換失敗。」所以現在我正在拉我的頭髮。

我開始通過驗證,事實上,使用IsDate函數有效日期返回每個記錄。所有的日期都是字符串格式的有效日期。我只是在做一個檢查,看看記錄是否大於1年。

我有幾個內部聯接,以及它們是否影響輸出一直納悶。

SELECT 
gc2p.partnumber, gc2p.orderby, gc2p.campaigncode, gp2a.assetfilename 
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2productrefs] gc2p 
,[StepMirror].[dbo].[stepview_nwppck_ngn_getpimweblegalattrlist1] gpwa 
,[StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a 
,[StepMirror].[dbo].[stepview_nwppck_ngn_getproduct2assetrefs] gp2a 
WHERE gc2p.partnumber=gpwa.PARTNUMBER and 
gc2p.id=gc2a.id and 
gp2a.PRODUCTNAME=gpwa.PARTNUMBER and 
ATTRIBUTENAME='New Date' AND 
ATTRIBUTEVALUE > dateadd(month,-12,getdate()) AND 
gc2p.id = '5665976' and 
gc2a.assettype='Primary Image' AND 
gp2a.ASSETTYPE = 'Primary Image' 
order by gc2p.orderby 

如果有人能給我一個很棒的助手,

編輯:查詢運行正常,當我刪除 '的AttributeValue> DATEADD(月,-12,GETDATE())'。我忘了提及拋出錯誤的查詢的確切部分。

編輯:更新查詢 - 現在正在查詢尋求類似答案的人。

SELECT TOP 18 gc2p.partnumber, gpwa.ATTRIBUTECNAME,gp2a.ASSETFILENAME, gpwa.ATTRIBUTEVALUE 
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2productrefs] gc2p 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getpimweblegalattrlist1] gpwa ON gc2p.partnumber=gpwa.PARTNUMBER and gpwa.ORDERBY='96' 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a ON gc2p.id=gc2a.id 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getproduct2assetrefs] gp2a ON gc2p.partnumber=gp2a.PRODUCTNAME 
WHERE gc2p.id = 5665976 AND gp2a.assettype='Primary Image' AND gc2a.assettype='Primary Image' 
AND(CASE WHEN ISDATE(ATTRIBUTEVALUE) = 0 then NULL ELSE ATTRIBUTEVALUE END) > dateadd(month,-12,getdate()) 
order by gc2p.orderby 
+1

什麼格式的日期嗎?你的執行用戶設置了什麼語言?這可能幫助,如果你想測試:http://stackoverflow.com/a/9126277/315711 –

+2

什麼數據類型是列'ATTRIBUTEVALUE'?是suppossed成爲迄今爲止唯一一個?哦,作爲一個好習慣,你應該改變你的隱式連接到明確的連接。 – Lamak

+0

連接可能會導致您不期望的圖簇。如果你在沒有where的地方運行連接,有沒有ATTRIBUTEVALUE爲空的地方?即使源表中沒有加入任何空值,也會發生這種情況。 –

回答

2

問題可能是你有一個在外地的AttributeValue非最新數據。你假設包括ATTRIBUTENAME='New Date'會過濾它,但它可能不取決於查詢計劃。試試...

(CASE WHEN ISDATE(ATTRIBUTEVALUE) = 0 then NULL ELSE ATTRIBUTEVALUE END) > dateadd(month,-12,getdate()) AND ... 

在複雜的連接,SQL引擎可以決定先加入的表,然後使用過濾器,這會造成不匹配是不是ATTRIBUTEVALUE每個實例將隱式轉換爲日期。

另外,請使用真實SQL連接,而不是逗號連接。這是不好的形式,並導致更多的問題比解決問題。

+0

我得到一個「不正確的語法附近')'」錯誤信息關閉該案件陳述。我的jedi sql技能缺乏。 –

+0

這不僅是可能的,而且很有可能是這樣的,「ATTRIBUTEVALUE是nvarchar(1700),可以容納任何類型的數據(零件編號,描述文本,日期等)。」語言是英語。「 – swasheck

+0

@Data你是說我做連接的方式可能會導致在連接之前選擇表,從而在ATTRIBUTEVALUE被驗證爲日期時引發錯誤? –

0

無論如何,請確保您的查詢與此無關。這都是關於表格中的數據。另外,正如我看到的查詢,似乎你加入一些視圖,並在視圖定義可能會導致此錯誤的一些轉換。如果我在那裏你,我會做一些簡單的查詢,對錶和轉換字符串列由一個DATETIME一個,直到我發現了錯誤參考。

希望它有幫助。

乾杯

+0

這些是沒有關係的平坦表。我沒有訪問任何視圖。查詢很好,並返回查詢中包含的沒有'ATTRIBUTEVALUE> dateadd(month,-12,getdate())'的正確數據。 –

+0

所以看來你已經知道這個問題了! ATTRIBUTEVALUE列的內容是什麼?在一個簡單的Select語句中做一個簡單的轉換(datetime,ATTRIBUTEVALUE),然後看看會發生什麼。你怎麼看? – Rikki

+0

ATTRIBUTEVALUE可以容納幾種類型的數據,而不僅僅是日期。由於其他數據,運行簡單的選擇會導致錯誤。 –