【问题标题】:Why wont this sql server CE command work?为什么这个 sql server CE 命令不起作用?
【发布时间】:2011-08-08 17:55:23
【问题描述】:

我有命令:

INSERT INTO tbl_media
(DateAdded) VALUES (GetDate()) 
SELECT CAST(@@Identity AS int) 

它适用于标准 sql db 但不适用于 CE db 我收到以下错误:

SQL 执行错误。

Executed SQL statement...
Error Source: SQL Server Compact ADO.NET Data Provider
Error Message: There was an error parsing the query. [Token line number = 2, Token line offset = 31, Token in error = )]

可惜这个错误没有更有用的人知道会发生什么?

干杯

更新:::::::

在使用了 Visual Studio 编辑器(垃圾)之后,我下载了 dataport 并阅读了 MSDN。好像有2个问题...

1) SELECT CAST(@@Identity AS int) 是无效的 sql

SELECT @@Identity 是

2) SqlCe服务器不喜欢我把这两个命令放在一起:

插入到 tbl_media (添加日期) 值 (getdate()) 选择@@身份

如果我在不同时间进行插入和选择,那么它可以工作。那么我该如何解决呢?我不能在不同的时间这样做我需要在创建对象时知道它们的 ID!!!

更新 2:

根据非常有帮助的 Erik E,您不能同时执行 2 个语句。因此,以下解析为正确但不起作用:

插入到 tbl_media (添加日期)值(getdate()); 选择@@身份;

所以我真正想知道的是如何保证添加记录时不会混淆身份?

即如果有人在获取他们刚刚插入的身份的身份时创建了一条记录怎么办?

【问题讨论】:

  • 错误确实说第 2 行偏移 31 标记错误 = )
  • @Pete2K 删除 ) 后是否可以正常工作,请提供一些反馈,以便我们知道这是否仍然存在问题或可以关闭?
  • 不,我不会更新我的答案

标签: tsql sql-server-ce


【解决方案1】:

你有一个额外的)我不知道这是否能解决你的错误,但看看你有的价值

VALUES(GETDATE())) '

改成这样:

INSERT INTO tbl_media(DateAdded) 
VALUES (GetDate()) 
SELECT CAST(@@Identity AS int) 

【讨论】:

  • @Pete2k - 是时候开始拆解它了,不多。首先仅从您的 INSERT 语句开始,仅此一项有效吗?如果可行,我们知道这是 SELECT 的问题?
  • 如果第一部分单独工作,请单独尝试第二部分(选择演员..)。如果他们分开工作,那么上面的@ErikEJ 似乎一针见血。
【解决方案2】:

每个 ExecuteNonQuery 调用只能运行一条 SQL 语句。所以你必须打两次电话。

【讨论】:

  • 您好 Erik 感谢您再次提供帮助,但是如果另一个用户(来自插入记录的用户)在我有机会插入“此”用户数据记录之前插入一行怎么办?,这不意味着用户可能会意外获得其他用户记录的 ID?
  • @Pete2k - 是的,这可能会发生。
  • 那你是什么意思来确保它不呢?我的意思是你怎么能在数据库中添加一些东西并知道你是否在例如发回表单时正确添加了它?
  • SQL Server Compact 不是多用户数据库,它只在单台计算机上运行,​​如果将这 2 个调用包装在一个 SqlCeTransaction 中,则不会发生这种情况。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2020-05-29
  • 2011-06-14
  • 1970-01-01
  • 2019-03-25
相关资源
最近更新 更多