Access sql 语句问题

良朋 2017-12-16 06:09:31
经测试,语句
INSERT INTO tTableEasy (fID) SELECT max(ID)+1 FROM tTableEasy
在access中可以正确执行。

而语句
INSERT INTO tTableEasy (fID) VALUES (SELECT max(ID)+1 FROM tTableEasy)
则提示语法错误,那么,问题一:这条语句如果要包含VALUES关键字,应该怎样写才正确?

问题二:下面的语句怎样修改才正确?
INSERT INTO tTableEasy (fID,fName,fRemark,fParentid,fLevel) VALUES (SELECT max(ID)+1 FROM tTableEasy,'机器人运行拍照位','',23,2)
...全文
213 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
良朋 2017-12-18
  • 打赏
  • 举报
回复
引用 6 楼 From_TaiWan 的回复:
[quote=引用 4 楼 itleon 的回复:] 我想要一楼那样的语句,但在ACCESS调试不通。 二楼,不要要自增列是想将来用fid排序实现在中间插入记录。 用UNDATTE时并不知道主键、当前主键是多少,是否要先执行一下查询?那就更复杂了一些。
没有主键?那你的数据库就是一堆没用的东西[/quote] 当然是有主键的,但是你并不知道它的当前值是多少,除非先执行一次查询,然后再执行insert into 操作。 5楼的语句正是我需要的。
秋的红果实 2017-12-17
  • 打赏
  • 举报
回复
引用 4 楼 itleon 的回复:
我想要一楼那样的语句,但在ACCESS调试不通。 二楼,不要要自增列是想将来用fid排序实现在中间插入记录。 用UNDATTE时并不知道主键、当前主键是多少,是否要先执行一下查询?那就更复杂了一些。
没有主键?那你的数据库就是一堆没用的东西
xuzuning 2017-12-17
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/library/ff834799.aspx 从语法描述就解决了你的第一个问题 多记录追加查询: INSERT INTO target [(field1[, field2[, ...]])] [IN externaldatabase] SELECT [source.]field1[, field2[, ...] FROM tableexpression 单记录追加查询: INSERT INTO target [(field1[, field2[, ...]])] VALUES (value1[, value2[, ...]) 其不可闭门造车 由于但记录追加时,不支持多表查询(因为 Access 结构比较简单,尚未考虑这样处理,SQL 就支持了) 你可以这样写 INSERT INTO tTableEasy (fID,fName,fRemark,fParentid,fLevel) SELECT max(ID)+1,'机器人运行拍照位','',23,2 FROM tTableEasy 不过你并没有对 ID 赋值,那么每次插入的 fID 就都是一样的。这符合你的业务要求吗?
良朋 2017-12-17
  • 打赏
  • 举报
回复
我想要一楼那样的语句,但在ACCESS调试不通。 二楼,不要要自增列是想将来用fid排序实现在中间插入记录。 用UNDATTE时并不知道主键、当前主键是多少,是否要先执行一下查询?那就更复杂了一些。
秋的红果实 2017-12-16
  • 打赏
  • 举报
回复
INSERT INTO tTableEasy (fID) SELECT max(ID)+1 FROM tTableEasy update tTableEasy set fName='机器人运行拍照位',fRemark='',…… where 主键=当前主键 也可以将fID设置成自增列,这样,只插入fName,fRemark,fParentid,fLevel即可,用VALUES
秋的红果实 2017-12-16
  • 打赏
  • 举报
回复
用VALUES,后面必须是具体值,例如:INSERT INTO tTableEasy (fID) VALUES (2000) 用select子查询,就不用VALUES 问题一,不用VALUES,直接用INSERT INTO tTableEasy (fID) SELECT max(ID)+1 FROM tTableEasy 问题二,可以先插入select子查询,然后再以修改的方式插入具体值:'机器人运行拍照位','',23,2
qq_30335331 2017-12-16
  • 打赏
  • 举报
回复
网上找的 insert into aa (id,name) values((select case when max(id) is null then 1 else max(id)+1 end from aa),'a'); 自己写的 sqlserver 2008 r2 测试通过 INSERT INTO ZtPaperManager.dbo.PaperCode ( PaperCode , KWeight , PaperName , UnitPrice ) VALUES ( N'3' , -- PaperCode - nvarchar(2) (SELECT MAX(KWeight)+1 FROM ZtPaperManager.dbo.PaperCode) , -- KWeight - smallint N'ff' , -- PaperName - nvarchar(20) NULL -- UnitPrice - decimal ) access 来说 我用的office2016 编辑器太蛋疼 没测试

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧