2015-10-15 131 views
0

我试图运行INSERT查询,但它要求我将varchar转换为空。下面的代码:INSERT查询SQL(将数据类型nvarchar转换为(空)时出错)

INSERT Runtime.dbo.History (DateTime, TagName, vValue) 
VALUES ('2015-09-10 09:00:00', 'ErrorComment', 'Error1') 

错误消息:

错误数据类型为nvarchar转换为(空)。

问题出在vValue列。

column vValue(nvarchar, null) 

它的外观在数据库:

enter image description here

vValue值由我使用的程序放置。我只是试图手动插入数据库。

最后发表的帖子与错误的栏目,我很抱歉。

+1

'Error1'无法转换为浮点数。浮动实质上是一个数字。 – Rodders

+0

http://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server链接可能会帮助你 –

+0

我使用错误的列表,但现在我得到另一个错误 – Kostas

回答

1

联系Wonderware支持后,我发现vValue专栏不支持INSERT。这是一个字符串值,更新应该通过StringHistory表进行。

0

数据库中列值的类型是什么?

如果它是浮动的,你应该插入一个数字,而不是字符串。

将“error1”投射到FLOAT是无意义的。 浮点数是一个数字例子:1.15,12.00,150.15 当您尝试CAST“Error1”浮动时,他试图将文本“error1”转换为数字,而他不能,这是逻辑。

您应该在列中插入一个数字。

+0

似乎我使用错误的栏目,但现在我得到另一个错误 – Kostas

+0

如果您尝试: INSERT Runtime.dbo.History(DateTime,TagName,value,vValue) VALUES('2015-09-10 09:00:00' ,'ErrorComment',null,'Error1') ? – Temporarylol

+0

它不起作用,因为我试图在3个柱子中插入4个值 – Kostas

0

我想我可以帮助你解决你的问题,因为我有一个体面的测试环境来进行试验。

Runtime.dbo.History不是你可以直接互动的表,它是一个View。在我们的例子这里的视图定义为:

select * from [INSQL].[Runtime].dbo.History 

...我相信这意味着你正在查看的历史数据来自史记平面文件存储本身,一个Wonderware的专有系统。您可能看到一些成功,如果您展开SQL Server Management Studio中的

Server Objects -> Linked Servers -> INSQL 

...以及与数据在那里打球,但我真的不推荐它。

这样说,你需要插入标签历史的原因是什么?可能有其他解决方法来满足您的需要。

+0

我正在使用Wonderware产品的2014 R2版本。我想要做的是在以前的时间将数据插入到Historian中。我通过Intouch插入数据,这是我想要运行的查询。 – Kostas

+0

当我实时更改程序内部的值时,Historian工作的很好,但是如果我想为先前的时间传递一些数据,我不能 – Kostas

+0

这可能是一个诚实问题,需要WW技术支持。它有点打破了历史学家的整个流程。我知道他们为历史记录使用他们的“平面文件存储”,这不一定是RDBMS样式的存储,您只能通过SSMS访问它,因为他们将该Provider提供给InSQL。我正在阅读关于InSQL编辑器的东西,可能可以使用 – Grambot

相关问题