2015-09-21 48 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' –

相关问题