数据库字段自增~~~~~·进者有分
在SQL SERVER 2000中 如何使这样的ID C_0001 C_0002 C_0003 自增,当插入第四条记录的时候就是C_0004! 先谢谢大家!
[解决办法]
我来了。。。
[解决办法]
再继续接
[解决办法]
1
[解决办法]
up
[解决办法]
自己用程序或SQL函数去生成这样的自增结果,SQL自己不执行这样的自动增长!!!
[解决办法]
自增列后加一自定义ID列
建一触发器 插入后根据自增列值自动在ID列插入自定义值 如C_0003
[解决办法]
嗯。
SQL的自增种子都只能是int型的。这样的不支持。
[解决办法]
写个函数吧 在SQL里
[解决办法]
sqlserver里面自增长的类型只有一个整型才可以
[解决办法]
可不可以用一个自动增长列,数据在查询的时候自己组合?用sql或者后台程序都可以
[解决办法]
自动增长
[解决办法]
//*****在新增记录的时,取数据的最大记录,然后进行组合,即可.
[解决办法]
你果你不想手动的添加的话..应该要用到触发器!自己写个吧!!
[解决办法]
建议使用纵表的方式,可以加一个父id来解决问题!
[解决办法]
用触发器,对自动增长的记录,主键经过处理后在存入
[解决办法]
写个程序就可以了
然后调用,调用一次就增长一个,
用两个字段来实现
第一个字段char型第二个字段用int
这样就可以解决了。
[解决办法]
我来蹭点分
[解决办法]
同蹭同蹭:)
[解决办法]
这个问题我以前问过.经过研究一下明白原理就好做了
工厂流水号的生成
1.用SQL函数生成自动流水号.
流水号格式为: 'R '+日期年后二位+二位数月+ '- '+二位数日期+自动编号
R0708-2001
R0708-2002
R0708-2003
自定义函数如下:
注:CaiGouInfo为采购单表,CGID为采购单自动流水号
CREATE function new_idr(@a datetime) returns varchar(50)
begin
---id为日期格式部分
declare @id varchar(50),@i int
select top 1 @id=CGID from CaiGouInfo where left(CGID,8)= 'R '+(left(convert(varchar(6),@a,12),4)+ '- '+right(convert(varchar(6),@a,12),2)) order by CGID desc
--如果没找到该日期的流水号,则新增加一个流水号,即为当天的第一个流水号
if @@rowcount=0
return 'R '+(left(convert(varchar(6),@a,12),4)+ '- '+right(convert(varchar(6),@a,12),2))+ '01 '
--如果存在该日期的流水号则在该流水的后二位自动编号上加1
set @i= rtrim(right(@id,2)) +1
set @id=rtrim(@i)
--转化流水号后二位为2位字符串
return 'R '+(left(convert(varchar(6),@a,12),4)+ '- '+right(convert(varchar(6),@a,12),2))+right( '00 '+@id ,2 )
end
调用
在数据表里的流水号字段写个默认值,则应该字段为自动流水号
default ([dbo].[new_idr](getdate()))
2.C#代码生成
因为除自动编号为的键值是不确定的.不像日期格式是确定的6位.所以SQL 自动生成流水号比较麻烦.采用C#编码生成.
注:BJID是自动生成的报价单号,CustomerProRes是客户产品资料表
//报价单为客户代码+物料名称+自动编号,自动编号自动增长
string BJID =CustomerCode+WLName;
//查找表中报价单中左边的 "客户代码+物料名称 "字符串是否是当前的客户数据
//如果找不到则新增加该客户的第一笔产品报价资料
DataSet ds_bj = kbs.LQSelectTable( "* ", "CustomerProRes ", "left(BJID,len(BJID)-3)= ' " + BJID + " ' ", " ", "bjtb ");
if (ds_bj.Tables[ "bjtb "].Rows.Count == 0)
BJID += "001 ";
else
{
//如果存在该产品的报价资料,则新增加一笔报价资料.
int AutoNo;
//读取该客户资料的最大编号
DataSet ds_bj2 = kbs.LQSelectTable( "max(BJID) as maxbjid ", "CustomerProRes ", "left(BJID,len(BJID)-3)= ' " + BJID + " ' ", " ", "bjtb2 ");
//取出该客户资料的最大编号的后两位自动编号,并加1
AutoNo =Convert.ToInt32(ds_bj2.Tables[ "bjtb2 "].Rows[0][0].ToString().Substring(ds_bj2.Tables[ "bjtb2 "].Rows[0][0].ToString().Length - 3)) + 1;
//最后两位自动编号转成两位字符串
if (AutoNo.ToString().Length == 1) BJID += "00 "+AutoNo;
else
{
if (AutoNo.ToString().Length == 2) BJID += "0 "+AutoNo;
else BJID += AutoNo;
}
}
最后直接用insert到相对应的流水号字段即可
[解决办法]
up
[解决办法]
study~~~~~
[解决办法]
up
[解决办法]
楼上的回答很详细啊,代表楼主谢谢你
[解决办法]
up~~~
接分啦~~
[解决办法]
输出时拼串 "C_000 "+id不就行了,
何必强求呢?
[解决办法]
UP
[解决办法]
输出时拼串 "C_000 "+id不就行了,
何必强求呢?
--------------
支持这个
[解决办法]
可以使用Insert触发器解决
[解决办法]
使用自定义函数可以解决,网络搜索下,多的跟米一样
[解决办法]
用SQL函数生成自动流水号可行
[解决办法]
good
[解决办法]
建一个SQL SERVER端自定义函数
create function test()
......
函数的作用是是出取现有ID除去前一部分,编号最大的加上一,再组合成你要的那种格式返回就可以了
在你插入值时
insert test into (id,.....) values (test(),....)
就OK了
[解决办法]
如果你不觉得麻烦,可以尝试用触发器,简单的写了个程序:
create table A
(
column_1 VARCHAR2(12),
column_2 VARCHAR2(12)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
---------- 1 序列 ----------
create sequence seq_ids
minvalue 1
maxvalue 9999
start with 1
increment by 1
nocache
order;
------------------------------
---------- 2 触发器 ----------
CREATE OR REPLACE TRIGGER A_trigger
BEFORE INSERT ON A
FOR EACH ROW
DECLARE
nextid varchar2(8);
BEGIN
IF :NEW.column_1 IS NULL THEN
:NEW.column_1 := 'C_0001 ';
ELSE
SELECT seq_ids.nextval INTO nextid FROM sys.dual;
END IF;
:NEW.column_2 := nextid;
:NEW.column_1 := 'C_ ' || lpad(nextid, 4, '0 ');
END A_trigger;
------------------------------
测试:
insert into A values( ' ', ' ')
第一次执行
C_00011
第二次执行
C_00011
C_00022
.......
以上是用Oracle做的,SQL Server不太会用,莫怪。
[解决办法]
up
[解决办法]
顶一个
[解决办法]
支持liqiang665() ( )~~
[解决办法]
用个笨方法,分成两个字段
[解决办法]
用笨办法就是,你的ID设为自增长
插完数据的时候:
select right( 'C_000 '+convert(varchar(20),ID),6)
[解决办法]
多谢 接分来了!
[解决办法]
jf
[解决办法]
相當詳細,這種寫法很多,只要能實現最后的效果就可以了,不要太復雜
[解决办法]
jf
[解决办法]
不会,接分而已!
[解决办法]
恩, 偶还没用过触发器, oracle也是用简单的操作而已, 这次很受用!
多谢!
[解决办法]
程序里update
[解决办法]
mark
[解决办法]
来过~
[解决办法]
最好建一个存储过程。在插入时,自动加入。
[解决办法]
顶
[解决办法]
up
[解决办法]
哈哈,学习一下上面说的方法
[解决办法]
可以看微软的例子!
[解决办法]
mark 学习。。。知道怎样的方法做可是不会做。。。。。
[解决办法]
学习一下
[解决办法]
up
[解决办法]
jf
[解决办法]
不建议使用触发器
[解决办法]
还是用程序来控制比较方便啊
[解决办法]
up
[解决办法]
up
[解决办法]
我们也有这样的功能,我们是在页面上算好了,然后在放进sql语句里面一起update进去的
[解决办法]
建议用自定义函数
[解决办法]
强,学习.
[解决办法]
up
[解决办法]
up
[解决办法]
用触发器来实现
[解决办法]
小向.
[解决办法]
jf
[解决办法]
自己用程序或SQL函数去生成这样的自增结果
[解决办法]
做人要厚道!