请问添加数据时如何自动加上编号...如:表A 中有字段A1和A2,A1是主键,我用这条语句添加数据:insert into A(A2) values (...) (急啊)

dan_sapphire 2004-04-22 08:08:44
请问如何自动加上编号,

我在ASP中要往数据库中添加数据,主键是'编号',添加数据时怎样让系统自动添加?
如:表A 中有字段A1和A2,A1是主键,

我用这条语句添加数据:
str = "insert into A (A2) values ('" & num &"')"
即:insert into A(A2) values (...)

A1让系统自动添加
...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dan_sapphire 2004-04-23
  • 打赏
  • 举报
回复
已经搞好了,是在企业管理器中搞的。

谢谢大家,上次的问题也是你们这几个人帮忙解决的,非常感谢!!!
laughsmile 2004-04-22
  • 打赏
  • 举报
回复
也可以:
CREATE PROC AUTOINSERT
@num varchar(300) --A2的值
as
begin
insert into A
SELECT CONVERT(VARCHAR(50),getdate(),120) AS A1 , @num AS A2
end

laughsmile 2004-04-22
  • 打赏
  • 举报
回复
CREATE PROC AUTOINSERT
@num varchar(300) --A2的值
as
begin
insert into A
SELECT cast ((select SUM(1) from A) as varchar(1000)) AS A1 ,@num AS A2
end

这样在asp中向存储过程AUTOINSERT传入参数@num,然后调用存储过程就可以实现这个功能了.
(假设A1是varchar)
haoK 2004-04-22
  • 打赏
  • 举报
回复
不方便使用自增的标志列时
可以写个函数产生新的编号

以下这个函数, 传入一个日期, 可以产生'20040422001', '20040422002' ... 这样的新发货单号
不知有用否?


CREATE FUNCTION fnNewSendCode
(
@Date DATETIME
)
RETURNS VARCHAR(11)
AS
BEGIN
SET @Date = CAST(CONVERT(VARCHAR(10), @Date, 126) AS DATETIME)

DECLARE @NewNO INT
DECLARE @NowCount INT

SELECT @NowCount = CAST(RIGHT(MAX(CSendCode), 3) AS INT)
FROM TX_SendGoodInfo
WHERE CAST(LEFT(CSendCode, 8) AS DATETIME) = @Date

IF @NowCount IS NULL
BEGIN
SET @NewNO = 1
END
ELSE
BEGIN
SET @NewNO = @NowCount + 1
END

RETURN CONVERT(VARCHAR(8), @Date, 112) + RIGHT('000' + CAST(@NewNO AS VARCHAR), 3)

END

zjcxc 元老 2004-04-22
  • 打赏
  • 举报
回复
--如果是已经建好的表,要将字段修改成自增(标识)字段,可以直接在企业管理器里面修改.

--也可以用下面的存储过程


/*--将表中的某个字段转换成标识字段,并保留原来的值

注意,因为要删除原表,所以,如果表和其他表的关联,这些关联要重新创建

--邹建 2003.12--*/

/*--调用示例

exec p_setid '表名','要转换的字段名'
--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_setid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_setid]
GO

CREATE PROC P_SETID
@tbname sysname, --要处理的表名
@fdname sysname --要转换为标识字段的字段名
as
declare @s1 varchar(8000),@s2 varchar(8000),@tmptb sysname
select @s1='',@s2='',@tmptb='[tmp_'+@tbname+'_bak]'
select @s1=@s1+',['+name+']'
+case name when @fdname then '=identity(bigint,1,1)' else '' end
,@s2=@s2+',['+name+']'
from syscolumns where object_id(@tbname)=id
select @s1=substring(@s1,2,8000),@s2=substring(@s2,2,8000)
exec('select top 0 '+@s1+' into '+@tmptb+' from ['+@tbname+']
set identity_insert '+@tmptb+' on
insert into '+@tmptb+'('+@s2+') select '+@s2+' from ['+@tbname+']
set identity_insert '+@tmptb+' off
')
exec('drop table ['+@tbname+']')
exec sp_rename @tmptb,@tbname
go

--使用测试

--创建测试的表
create table 表(编号 bigint,姓名 varchar(10))
insert into 表
select 1,'张三'
union all select 2,'李四'
union all select 4,'王五'
go

--调用存储过程,将编号字段改为标识字段
exec p_setid '表','编号'
go

--显示处理结果
select * from 表

--显示是否修改成功
select name from syscolumns
where object_id('表')=id and status=0x80
go

--删除测试
drop table 表
zjcxc 元老 2004-04-22
  • 打赏
  • 举报
回复
--创建表的时候,将字段属性设置为自动增加

如果在企业管理器中建表,就将字段的标识属性设置为"是"

如果是创建表的时候,就像楼上那样建表


以后为表插入数据的时候,标识字段不赋值就行了.
DigJim 2004-04-22
  • 打赏
  • 举报
回复
创建的数据库时,把主键设为identity

CREATE TABLE MyTable
(
A1 int identity(1,1),
A2 varchar(12) null
)

--------
insert into MyTable(A2) values (...)
txlicenhe 2004-04-22
  • 打赏
  • 举报
回复
将A1设为自动增长的字段即可。
int identity(1,1)
haoK 2004-04-22
  • 打赏
  • 举报
回复
A1可以改用 自增一的列

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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