以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  sql server 外部数据源自增主键保存的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144359)

--  作者:vimin
--  发布时间:2019/12/17 21:34:00
--  sql server 外部数据源自增主键保存的问题
一个窗口中2个表,sqltable,一个支出表,一个支出明细表。明细表的主键是自增主键。
开启了事务处理,用sql的语句insert来保存两个表,现在碰到问题。
明细表新增的行,在窗口中主键都是从0开始编号的,用sql的语句直接insert,就会和后台的原来数据冲突。(使用了set identity_insert on/off语句)
但如果不是用sql语句insert的方式来保存,直接用datatable.save()就不存在这个问题。
请问这应该怎么解决?datatable.save()的保存方式是怎么解决这个问题的呢?

--  作者:有点蓝
--  发布时间:2019/12/17 21:55:00
--  
用sql的语句直接insert的时候不要包含自增主键值即可。不需要使用什么set identity_insert on/off语句

比如可以:Insert Into 订单 (编号,产品) Values(BH100,\'PD01\')

但是不可以:Insert Into 订单 (自增主键, 编号,产品) Values(1,BH100,\'PD01\')

--  作者:vimin
--  发布时间:2019/12/18 8:22:00
--  
非常感谢!
这个办法我想过,但我是用函数写的,函数中是历遍各个字段。有的表是自增主键,有的表不是自增主键。
所以我在调用函数前,如果是自增主键的表,我会插入set identity_insert on。
如果不用这种思路,怎么在函数中判断是否是自增主键,是自增主键这个字段就不insert呢?
还请老师麻烦看一下

--  作者:有点蓝
--  发布时间:2019/12/18 8:34:00
--  
如果是自己设计的表,最简单的方法就是使用系统默认的主键名称“_Identify”,或者统一一个列名称,如:id。

不然还得从数据库连接查询一次:https://zhidao.baidu.com/question/1431688173610957459.html

--  作者:vimin
--  发布时间:2019/12/18 8:36:00
--  
好的,明白了,非常感谢!