2014-02-06 37 views
0

我有我的選擇錯誤VARCHAR值的隱式轉換爲varchar

SELECT CONVERT(VARCHAR ,p.DataRegistrazione, 103) AS DataRegistrazione, ld.BarcodeFronte, ld.BarcodeRetro, ld.CodiceMSP, ld.CodiceFiscale, ld.Cognome, ld.Nome, ld.Sesso, 
     CONVERT(VARCHAR ,ld.DataNascita,103) AS DataNascita, Convert(VARCHAR ,ld.DataAccettazione,103) AS DataAccettazione , ld.RepartoAccettazione, ld.NumeroEpisodio, ld.CodiceEsenzione, ld.TipoDoc, ld.Attivo, 
     ld.FlagLavorato, CONVERT(VARCHAR ,ld.FlagSpunta) AS FlagSpunta, Convert(VARCHAR ,ld.DataSpunta,103) AS DataSpunta, ld.Batch, 
     CONVERT(VARCHAR ,p.Data,103) AS Data, CONVERT(VARCHAR ,p.Posizione) AS Posizione, CONVERT(VARCHAR ,p.IsDownloaded) AS IsDownloaded , 
     CONVERT(VARCHAR ,CASE WHEN p.SystemField3 IS NULL THEN 0 ELSE 1 END) AS Caricato 

FROM dbo.LavorazioniDES ld LEFT OUTER JOIN dbo.PSafed p ON ld.BarcodeFronte COLLATE DATABASE_DEFAULT = p.BarcodeFronte COLLATE DATABASE_DEFAULT 

WHERE Convert(VARCHAR ,ld.DataSpunta,103) = convert(VARCHAR ,DATEADD(day,-1,GETDATE()),103) AND ld.FlagLavorato IN ('000','002') AND IsDeleted=0 

我得到這個錯誤,我不知道什麼轉換我應該改變?

Implicit conversion of varchar value to varchar cannot be performed because the collation of the value is unresolved due to a collation conflict 
+2

這不回答你的問題,但從來沒有使用'VARCHAR()'沒有長度的參數。在某些情況下它有一個默認值'1'。代碼應該有'varchar(255)'或者任何你想要的長度。 –

+0

你爲什麼不一次一次刪除你的'Convert()',並將其縮小到哪個字段導致你的問題? – gvee

+0

在轉換日期的WHERE連接之後,您可能需要另一個'COLLATE DATABASE_DEFAULT':'Convert()= Convert(...)COLLATE DATABASE_DEFAULT'。整理+日期鑄造ouch :-) – StuartLC

回答

0
SELECT CONVERT(VARCHAR(103), p.DataRegistrazione) AS DataRegistrazione , 
     ld.BarcodeFronte , 
     ld.BarcodeRetro , 
     ld.CodiceMSP , 
     ld.CodiceFiscale , 
     ld.Cognome , 
     ld.Nome , 
     ld.Sesso , 
     CONVERT(VARCHAR(103), ld.DataNascita) AS DataNascita , 
     CONVERT(VARCHAR(103), ld.DataAccettazione) AS DataAccettazione , 
     ld.RepartoAccettazione , 
     ld.NumeroEpisodio , 
     ld.CodiceEsenzione , 
     ld.TipoDoc , 
     ld.Attivo , 
     ld.FlagLavorato , 
     CONVERT(VARCHAR(103), ld.FlagSpunta) AS FlagSpunta , 
     CONVERT(VARCHAR(103), ld.DataSpunta) AS DataSpunta , 
     ld.Batch , 
     CONVERT(VARCHAR(103), p.Data) AS Data , 
     CONVERT(VARCHAR(103), p.Posizione) AS Posizione , 
     CONVERT(VARCHAR(103), p.IsDownloaded) AS IsDownloaded , 
     CASE WHEN p.SystemField3 IS NULL THEN 0 
      ELSE 1 
     END AS Caricato 
FROM dbo.LavorazioniDES ld 
     LEFT OUTER JOIN dbo.PSafed p ON ld.BarcodeFronte 
COLLATE DATABASE_DEFAULT = p.BarcodeFronte COLLATE DATABASE_DEFAULT 
WHERE CONVERT(VARCHAR(103), ld.DataSpunta) = CONVERT(VARCHAR(103), DATEADD(day, -1, GETDATE())) 
     AND ld.FlagLavorato IN ('000', '002') 
     AND IsDeleted = 0 

注:CONVERT()應該Col1 = CONVERT(VARCHAR(255),Col1)

相關問題