2015-09-21 79 views
0

使用下面的代碼,我得到的錯誤:varchar數據類型爲datetime數據類型的轉換導致超出範圍的值使用腳本

Exception calling "Fill" with "1" argument(s): "The conversion of a varchar data type to a datetime data type resulted in an out-of-range value." At C:\Users\username\Desktop\TEST.ps1:47 char:1 + $CommandCompl.fill($dt7) | out-null + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SqlException

$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (200, 25) 
$Date = (get-date).ToString("yyyyMMdd") 


Clear 

$SQLTableCOMPLIA = 'abc' 
$SQLServerCOMPLIA = "123.123.123.123" 
$SQLDBNameCOMPLIA = "test" 
$UsernameCOMPLIA = "abc" 
$PasswordCOMPLIA = "pasword" 




$SQLServerLANDESK = "cba\test1" 
$SqlConnectionLANDESK = New-Object System.Data.SqlClient.SqlConnection 
$global:dt = new-object System.Data.DataTable 
$dr = "" 

$LONA = "" 
$o = 0 
$j = 0 
$globalvuln , $globalNotvuln = 0 


$global:dt7 = new-object System.Data.DataTable 

$SqlConnectionCOMPLIA = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnectionCOMPLIA.ConnectionString = "Server=$SQLServerCOMPLIA;  Database=$SQLDBNameCOMPLIA;uid=$UsernameCOMPLIA; pwd=$PasswordCOMPLIA" 

$SqlConnectionCOMPLIA.Open() | out-null 

$QueryCompl = "SELECT TOP 1 CONVERT(datetime,left(LD_publishdate,10),103) as R FROM vulns order by R DESC" 

$CommandCompl = new-object System.Data.SqlClient.SqlDataAdapter ($QueryCompl, $SqlConnectionCOMPLIA) 

$CommandCompl.fill($dt7) | out-null 

我是什麼做錯了?我該如何解決這個問題?

+0

我猜你的LD_publishdate列有無效的值,比如30天的月份31st或者這些行的內容。它基本上是自由文本,對吧? –

+0

@MegaTron是varchar類型並允許Null。這是你問的嗎? –

+1

'select convert(datetime,left('2015-06-31',10),103)'例如給出您收到的錯誤。空值不。所以我認爲這是你的問題。 –

回答

0

根據錯誤,聽起來您的SQL查詢的這部分對錶中的數據無效:CONVERT(datetime,left(LD_publishdate,10),103)。嘗試直接運行此查詢而不使用腳本並檢查輸出。

+0

我收到了「Msg 156,Level 15,State 1,Line 1 關鍵字'CONVERT'附近的語法不正確 」 –

+0

請不要只運行那一部分..運行您在$ QueryCompl – Fosco

+0

中指定的整個查詢「消息207,級別16,狀態1,行1 列名稱'LD_publishdate'。「 –

1

所以這裏的問題很簡單,問題是以下行

CONVERT(日期時間,左(LD_publishdate,10),)

,並在那裏你提到的 '103',這意味着風格參數您正試圖將其轉換爲英國/法國標準。對於英國或法國標準,你的varchar值應該是'dd/mm/yy'格式,任何其他格式都將失敗。

例如 下面的腳本將失敗,你得到

選擇轉換同樣的錯誤(日期時間,左( '2015/09/21',10),103)

雖然這會通過迅速

選擇轉換(日期時間,向左('21/09/2015' ,10),103)

無論是解決這個問題或嘗試爲你的風格適當的值。你可以在這裏找到合適的值 http://www.techonthenet.com/sql_server/functions/convert.php

希望這會有所幫助。

+0

謝謝你的詳細解釋。我不知道我的數據庫中哪些行的格式不正確。肯定有,否則我不會得到消息。我想知道是否有一種方法來使用SQL查詢來返回只有「錯誤」格式的行,所以我會知道要修復什麼以及如何修復。你能給我一個提示嗎? –

+1

使用以下腳本'select * from where ISDATE()= 0'它會給你行的日期時間格式是錯誤的 –

+0

在你的情況'select * from vulns where ISDATE(LD_publishdate)= 0' –

相關問題