2011-12-29 74 views
1

我在具有datetime2字段的SQL Server 2008数据库中有一个视图。我需要能够通过链接的SQL Server 2005从该视图进行查询。当我运行打开光标并获取记录时,出现“从字符串转换datetime时转换失败。”错误。如何使光标适当地转换datetime2?由于datetime2而导致的SQL转换错误

这里是我的查询失败

DECLARE @time DateTime 

DECLARE db_cursor CURSOR FOR 
SELECT [DateTime] FROM [LINKEDSERVER].[DATABASENAME].[dbo].[ViewName] 
    WHERE Name = 'blah' 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @time 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    Print @time 
    FETCH NEXT FROM db_cursor INTO @time 
END 

CLOSE db_cursor 
DEALLOCATE db_cursor 

任何想法?

+1

如果您尝试使用SELECT CAST([DateTime] AS DateTime)AS [DateTime] FROM ...' – 2011-12-29 16:31:57

+1

'DATETIME2'具有更大范围的接受表格值 - 最后可能会显示一个日期'0001/01/01'在DATETIME2中完全有效,但会在DATETIME – 2011-12-29 16:52:03

+0

@marc_s中导致此错误 - 您应该将您的评论发布为答案 – Lamak 2011-12-29 17:05:05

回答

1

试图声明光标在以下方式:

DECLARE db_cursor CURSOR FOR 
SELECT cast([DateTime] as DateTime) FROM [LINKEDSERVER].[DATABASENAME].[dbo].[ViewName] 
    WHERE Name = 'blah' 

BUT

如果从DATETIME2字段远程值超出了允许DateTime类型,然后尝试以下

DECLARE @time NVARCHAR(100) 

DECLARE db_cursor CURSOR FOR 
SELECT CAST([DateTime] as NVArCHAR(100)) FROM [LINKEDSERVER].[DATABASENAME].[dbo].[ViewName] 
    WHERE Name = 'blah' 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @time 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    Print @time 
    FETCH NEXT FROM db_cursor INTO @time 
END 

CLOSE db_cursor 
DEALLOCATE db_cursor 
相关问题