让数据库某一列等于另一列呢

时间:2022-05-21 23:37:24
问题是这样的:我们设计一个这样的数据库
第一列让它每次都自动加1,
然后现在要添加一列让它默认等于前面那列,同时我们又随便改变它的值
我的问题是,怎么实现那列默认等于第一列呢

21 个解决方案

#1


貌似没这个必要。

#2


触发器

#3


好像不能设置其默认值。但,可以通过触发器Insert实现你的想法。

#4


这个需求?
实现是可以实现,但是LZ能不能说说为什么要这样设计,
貌似好像有几个人问过这样的问题了,这样的设计好像不是很好!

实现方式,触发器,或者在新增的SQL语句中完成都可以.

#5


在 sql serve 中可以设计计算公式。可以把公式写成要等于的列名。无论怎么改都保持一样。
只不过两个数据类型要一致哦。

#6


触发器可以

#7


引用 5 楼 jaden 的回复:
在 sql serve 中可以设计计算公式。可以把公式写成要等于的列名。无论怎么改都保持一样。
只不过两个数据类型要一致哦。

帅哥我头一次听说哦,细致点,举例吧!

#8


计算字段不知道可以不

#9


搞错了 不好意思

#10


create table test
(
nid int identity(1,1) not null,
acount int default 0,
primary key(nid)
)
--测试数据
--不想出现影响信息
set nocount on
go
insert test values('210');
go
select nid,
nid1=nid,
acount from test
虚拟字段

#11


你的需求是不是这样的,
第一列唯一肯定是作为主键
另一列应该是作为用户自定义编号,如果用户不改,那么默认等于主键,业务上也应该是唯一的。

如果是这样的,那么我的建议是
主键不用自增,用varchar/nvarchar型,
两个字段的值在insert中处理。

#12


引用楼主 hopebbs 的帖子:
问题是这样的:我们设计一个这样的数据库 
第一列让它每次都自动加1, 
然后现在要添加一列让它默认等于前面那列,同时我们又随便改变它的值 
我的问题是,怎么实现那列默认等于第一列呢

第一列可以用自增列,
第二列貌似没有用处.因为和第一列内容一样,可以直接使用第一列即可.还减少了维护数据库的工作量.

#13


谢谢各位的帮忙,这个是毕设里面的,它要求就是让最后一列默认等于第一列的值,又要求可以更改其值。
触发器怎么实现呢?

#14


写一个sql不就可以了吗?
update tb set col2 = col1 呵呵。

#15


关注一下

#16


这个有想过,不过感觉挺麻烦的,因为每次添加一条记录后还得加那句子

#17


CREATE TABLE [Test_dt](
[id] [nvarchar](50) NOT NULL,
[name] [nvarchar](50) NULL,
[flag] [nvarchar](50) NULL,
 CONSTRAINT [PK_Test_dt] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


create trigger [trigger_test] on  [Test_dt] 
for insert
as
 Update [Test_dt] set [flag]= (select  top 1 [id] from inserted)
where id = (select  top 1 [id] from inserted)

#18


哈哈毕业设计? 小伙子自己好好研究一下!研究好了你可以去找工作了 

#19


引用楼主 hopebbs 的帖子:
问题是这样的:我们设计一个这样的数据库 
第一列让它每次都自动加1, 
然后现在要添加一列让它默认等于前面那列,同时我们又随便改变它的值 
我的问题是,怎么实现那列默认等于第一列呢

/想实现并不难,只要添加一个表记录最后一次的数据即可,,,插入时候提出数据+1即可

#20


但凡设计上出现这种挺 “麻烦” 的东西的时候,往往是“逻辑”出了问题!

#21


谢谢各位!

#1


貌似没这个必要。

#2


触发器

#3


好像不能设置其默认值。但,可以通过触发器Insert实现你的想法。

#4


这个需求?
实现是可以实现,但是LZ能不能说说为什么要这样设计,
貌似好像有几个人问过这样的问题了,这样的设计好像不是很好!

实现方式,触发器,或者在新增的SQL语句中完成都可以.

#5


在 sql serve 中可以设计计算公式。可以把公式写成要等于的列名。无论怎么改都保持一样。
只不过两个数据类型要一致哦。

#6


触发器可以

#7


引用 5 楼 jaden 的回复:
在 sql serve 中可以设计计算公式。可以把公式写成要等于的列名。无论怎么改都保持一样。
只不过两个数据类型要一致哦。

帅哥我头一次听说哦,细致点,举例吧!

#8


计算字段不知道可以不

#9


搞错了 不好意思

#10


create table test
(
nid int identity(1,1) not null,
acount int default 0,
primary key(nid)
)
--测试数据
--不想出现影响信息
set nocount on
go
insert test values('210');
go
select nid,
nid1=nid,
acount from test
虚拟字段

#11


你的需求是不是这样的,
第一列唯一肯定是作为主键
另一列应该是作为用户自定义编号,如果用户不改,那么默认等于主键,业务上也应该是唯一的。

如果是这样的,那么我的建议是
主键不用自增,用varchar/nvarchar型,
两个字段的值在insert中处理。

#12


引用楼主 hopebbs 的帖子:
问题是这样的:我们设计一个这样的数据库 
第一列让它每次都自动加1, 
然后现在要添加一列让它默认等于前面那列,同时我们又随便改变它的值 
我的问题是,怎么实现那列默认等于第一列呢

第一列可以用自增列,
第二列貌似没有用处.因为和第一列内容一样,可以直接使用第一列即可.还减少了维护数据库的工作量.

#13


谢谢各位的帮忙,这个是毕设里面的,它要求就是让最后一列默认等于第一列的值,又要求可以更改其值。
触发器怎么实现呢?

#14


写一个sql不就可以了吗?
update tb set col2 = col1 呵呵。

#15


关注一下

#16


这个有想过,不过感觉挺麻烦的,因为每次添加一条记录后还得加那句子

#17


CREATE TABLE [Test_dt](
[id] [nvarchar](50) NOT NULL,
[name] [nvarchar](50) NULL,
[flag] [nvarchar](50) NULL,
 CONSTRAINT [PK_Test_dt] PRIMARY KEY CLUSTERED 
(
[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


create trigger [trigger_test] on  [Test_dt] 
for insert
as
 Update [Test_dt] set [flag]= (select  top 1 [id] from inserted)
where id = (select  top 1 [id] from inserted)

#18


哈哈毕业设计? 小伙子自己好好研究一下!研究好了你可以去找工作了 

#19


引用楼主 hopebbs 的帖子:
问题是这样的:我们设计一个这样的数据库 
第一列让它每次都自动加1, 
然后现在要添加一列让它默认等于前面那列,同时我们又随便改变它的值 
我的问题是,怎么实现那列默认等于第一列呢

/想实现并不难,只要添加一个表记录最后一次的数据即可,,,插入时候提出数据+1即可

#20


但凡设计上出现这种挺 “麻烦” 的东西的时候,往往是“逻辑”出了问题!

#21


谢谢各位!