现在有两张表一张是表类型,一张是公农历对照表:
- SQL code
IF OBJECT_ID('CalendarReference') IS NOT NULL DROP TABLE CalendarReference;GO--日历对照表(公历农历对照表)CREATE TABLE CalendarReference( Id INT IDENTITY (1,1) NOT NULL , CalendarDate DATETIME NOT NULL , LunarDate DATETIME NOT NULL );--插入数据INSERT INTO CalendarReference VALUES ('20130210','20130101');--创建表类型GOIF TYPE_ID('tyWeekday') IS NOT NULLDROP TYPE tyWeekday;GOCREATE TYPE tyHoliday AS TABLE (Id INT IDENTITY(1,1), HolidayDate DATETIME);
在SQL Server2008 英文版 和在 SQL Server 2008 SP1 中文简体版 分别运行下面的代码
- SQL code
declare @d char(10), @tyh AS tyHoliday;select @d=CalendarDate from CalendarReference where LunarDate='20130101';select @d;INSERT INTO @tyh VALUES (@d);SELECT * FROM @tyh;
在SQL Server2008 英文版里会报错:
Msg 242, Level 16, State 3, Line 5
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
但是在SQL Server 2008 SP1 中文简体版 里不报错。
通过调试我发现在SQL Server2008 英文版里 @d的值为:Feb 10 201, [email protected],
但是在SQL Server 2008 SP1 [email protected]:02 10 2013,插入时没报错。
这都是因为时间类型转换为CHAR类型时处理不一样。
请问下高手这种情况应该怎样处理??
------解决方案--------------------
楼主莫急,既然找到问题就好解决。
可用下面的方法转换一下:
语法
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])
--例子
-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO
-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO
这样就行了吗,你参考这个改一下你的代码就ok了。
祝福你成功。
------解决方案--------------------
My sql server was just in SQL2008R2 English version.
- SQL code
IF OBJECT_ID('CalendarReference') IS NOT NULL DROP TABLE CalendarReference;GO--日历对照表(公历农历对照表)CREATE TABLE CalendarReference( Id INT IDENTITY (1,1) NOT NULL , CalendarDate DATETIME NOT NULL , LunarDate DATETIME NOT NULL );--插入数据INSERT INTO CalendarReference VALUES ('20130210','20130101');--创建表类型GOIF TYPE_ID('tyWeekday') IS NOT NULLDROP TYPE tyWeekday;GOCREATE TYPE tyHoliday AS TABLE (Id INT IDENTITY(1,1), HolidayDate DATETIME); declare @d char(10), @tyh AS tyHoliday;select @d=convert(varchar(30),CalendarDate,120) from CalendarReference where LunarDate='20130101';INSERT INTO @tyh VALUES (@d);SELECT * FROM @tyh;-- resultId HolidayDate----------- -----------------------1 2013-02-10 00:00:00.000