【发布时间】:2018-07-02 08:42:49
【问题描述】:
此 SQL 语句在我的一台服务器上引发转换错误:
DECLARE @TimeStamp datetime;
SET @TimeStamp = GETDATE();
INSERT INTO Lookups
SELECT
newid() AS Id,
'Type' AS Type, Name,
'A.Miller' AS CreatedName,
'A.Miller' AS ChangedName,
@TimeStamp AS CreatedDate,
@TimeStamp AS ChangedDate
FROM
[DBServer].[Database].[dbo].[LkValues]
WHERE
NOT Name IS NULL OR Name = ''
错误:
消息 241,第 16 级,状态 1,第 5 行
从字符串转换日期和/或时间时转换失败。
我也尝试了几个变体,没有要转换的变量是我们的格式,没有转换,没有成功:
CONVERT(datetime, GETDATE(), 110) AS CreatedDate,
CONVERT(datetime, GETDATE(), 110) AS ChangedDate
没有INSERT 的SELECT 语句会产生看起来非常好的值。
我在 SQL Server 2008 R2 (v10.50.2550.0) 上运行它。
在另一台服务器上该命令运行没有任何问题,为什么?
表 DDL:
CREATE TABLE [dbo].[Lookups]
(
[Id] [uniqueidentifier] NOT NULL,
[Typ] [varchar](16) NOT NULL,
[Name] [varchar](32) NOT NULL,
[ChangedDate] [datetime] NULL,
[ChangedName] [varchar](32) NULL,
[CreatedDate] [datetime] NULL,
[CreatedName] [varchar](32) NULL,
CONSTRAINT [PK_dbo.Lookups]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY];
【问题讨论】:
-
Lookups对应的CREATE TABLE是什么? -
你能把你的表的 DDL 贴出来
[DBServer].[Database].[dbo].[LkValues]吗?将GETDATE()的值插入datetime不会产生错误。 -
请参阅下面 Larnu 的回答 - 如果您不指定要插入的列,则选择必须与表中列的顺序相同。在这种情况下,您试图将“A.Miller”放入更改日期。选择中的列名没有任何意义
标签: sql-server