【发布时间】:2011-07-14 23:58:05
【问题描述】:
输入的数据:
<F1>000001234</F1>
<F2>133228579</F2>
<F3>2011-05-25</F3>
<F4>21-332211</F4>
<F5>TxtMail</F5>
<F6/>
<F7>26/04/2011</F7>
<F8>00:09:13</F8>
<F9>0:00</F9>
<F10/>
<F11/>
<F12>Text Service</F12>
<F13>0294443333</F13>
<F14>TXT</F14>
<F15>FR</F15>
<F16>0.17</F16>
存储过程的相关部分:
@F1 VARCHAR(24) = NULL, --AccountNumber
@F2 VARCHAR(24) = NULL, --InvoiceNumber
@F3 VARCHAR(24) = NULL, --InvoiceDate
@F4 VARCHAR(24) = NULL, --CallerNumber
@F5 VARCHAR(10) = NULL, --Service
@F6 VARCHAR(10) = NULL, --
@F7 varchar(24) = NULL, --CallDate
@F8 VARCHAR(24) = NULL, --CallTime
@F9 VARCHAR(50) = NULL, --Duration
@F10 VARCHAR(50) = NULL, --
@F11 VARCHAR(10) = NULL, --
@F12 VARCHAR(24) = NULL, --Network
@F13 VARCHAR(24) = NULL, --CallingNumber
@F14 VARCHAR(10) = NULL, --Type
@F15 VARCHAR(10) = NULL, --TypeName
@F16 MONEY = NULL, --Amount
DECLARE @Date VARCHAR(20)
SET @Date = RIGHT(@F7,4)+'/'+SUBSTRING(@F7,4,2)+'/'+LEFT(@F7,2)
-- Combine the date and time into a datetime data type
-- For Time
DECLARE @time DATETIME
SET @time = CONVERT(DATETIME, @Date + ' ' + @F8)
错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
这是 CONVERT(DATETIME) 的唯一调用,我不使用 CAST
如果我直接传入数据,则插入行。如果我运行存储过程,它会超出范围。
【问题讨论】:
-
这可能与您在 SQL Server 中的区域设置有关,它的日期格式与您“直接获取数据”的方式不同?
-
它们都在同一台计算机上运行,我将 Sproc 作为普通 SQL 查询运行,声明 F1-16 并在“直接传递数据”时设置值。但你可能会做一些事情
-
我想我会尝试在一个简单的存储过程中将硬编码的日期时间直接传递到 CONVERT 函数中,以排除某些事情......然后尝试不同的格式,如果一个不起作用。只是为了深入了解真正的问题。
-
我只是去尝试了你所说的,除了形成@time之外,其他所有内容都是静态值。仍然错误。然后我剥离了那部分并将存储过程中的所有内容作为静态值传递,错误就消失了。看起来有些东西肯定不喜欢传入的格式
标签: sql sql-server-2008