0

当我在我的数据库中插入一些东西时,我总是遇到这个奇怪的错误,我认为它应该可以工作并且顺序也应该是正确的

我的查询

INSERT INTO [123].HolidayTracker.dbo.HtVacationDay
    ( Title, 
      FromDate, 
      UserId,
      ToDate )
SELECT 
      old.[userNote] AS Title,
      newUser.UserId,
      DATEADD(HOUR, 8, old.[holidayDate]) as FromDate,
      DATEADD(HOUR, 8, 
          DATEADD(SECOND, old.[hours] * 3600, old.[holidayDate])) as ToDate
  FROM [HolidayTracker].[dbo].[UserHoliday] old
  INNER JOIN 
      [HolidayTracker].[dbo].HTUser oldUser 
      ON old.htUser_htUserId = oldUser.htUserId
  INNER JOIN 
      [ch-s-0008180].[HolidayTracker].[dbo].HtUser newUser 
      ON oldUser.email = newUser.email

错误信息

消息 257,级别 16,状态 3,第 1 行不允许从数据类型 datetime 到 int 的隐式转换。使用 CONVERT 函数运行此查询。

感谢您的帮助和快速答复

4

2 回答 2

2
INSERT INTO [123].HolidayTracker.dbo.HtVacationDay(Title,UserId,FromDate,ToDate)
....

您的插入字段为

(Title,FromDate,UserId,ToDate)

和数据为

old.[userNote],
,newUser.UserId
,DATEADD....
,DATEADD....

错误是 SELECT 中的第三个表达式(日期时间)被强制进入 UserId (int) 列。


但现在我得到这个新的错误字符串或二进制数据将被截断。

为此,您需要缩短old.[userNote]以匹配HtVacationDay.Title列的最大大小,例如

 LEFT(old.userNote, 10)
于 2013-04-04T09:28:27.833 回答
0

我觉得Insert语句和select语句的顺序不对,

你应该有

SELECT old.[userNote] AS Title,DATEADD(HOUR, 8, old.[holidayDate]) as FromDate ,newUser.UserId,DATEADD(HOUR, 8, DATEADD(SECOND, old.[hours] * 3600, old.[holidayDate ])) 作为 ToDate

FROM [HolidayTracker].[dbo].[UserHoliday] 旧 ....

或者

您可以将插入语句更改为

插入 [123].HolidayTracker.dbo.HtVacationDay(标题、用户 ID、FromDate、ToDate)

谢谢

于 2013-04-04T09:29:23.007 回答