我试图使两列自动递增,但此列显示错误[user_id] as id + 0 PRIMARY KEY NOT NULL
,表示
只能在计算列上创建UNIQUE或PRIMARY KEY约束
我想做的是,如果id=1,那么也将user_id=1。
CREATE TABLE [dbo.TBL_TXN_USER]
(
[id] int NOT NULL IDENTITY(1,1),
[user_id] as id + 0 PRIMARY KEY NOT NULL ,
[username] varchar(150) NOT NULL,
[fullname] varchar(150) NOT NUll,
[pwd] varchar(50) NOT NUll,
[email] varchar(150) NOT NULL,
[mobile] varchar(150) NOT NULL,
[designation] varchar(150) NOT NULL,
[deleted] int NULL,
[created_date] datetime NULL,
[creator_user_id] int NULL,
[changed_date] datetime NULL,
[changer_user_id] int NULL,
[add_content] int NULL,
[edit_content] int NULL,
[delete_content] int NULL,
[manage_user] int NULL,
[view_log] int NULL,
)
[user_id]
有什么问题?如何解决?
错误消息是因为您在计算列上放置了NOT NULL
约束
在sql server 2012上,完整的错误消息是:
只能在计算上创建UNIQUE或PRIMARY KEY约束列,而CHECK、FOREIGN KEY和NOT NULL约束需要计算列被持久化。
这是一个工作脚本(我更改了表名):
CREATE TABLE dbo.[TBL_TXN_USER]
(
[id] int NOT NULL IDENTITY(1,1),
[user_id] as id + 0 persisted not null primary key,
[username] varchar(150) NOT NULL,
[fullname] varchar(150) NOT NUll,
[pwd] varchar(50) NOT NUll,
[email] varchar(150) NOT NULL,
[mobile] varchar(150) NOT NULL,
[designation] varchar(150) NOT NULL,
[deleted] int NULL,
[created_date] datetime NULL,
[creator_user_id] int NULL,
[changed_date] datetime NULL,
[changer_user_id] int NULL,
[add_content] int NULL,
[edit_content] int NULL,
[delete_content] int NULL,
[manage_user] int NULL,
[view_log] int NULL,
);
GO
我对这个问题有几点意见
-使用固定公式并将静态值作为主键而不是id本身的计算字段是浪费资源:不应存在两个字段中的一个
-我会不惜一切代价避免使用带有系统函数名称(userid)的字段
-这个问题看起来像是试图为隐藏的问题制定一个解决方案(计算字段为id)。
很抱歉我的误解,所以你想在一个表中添加两列的自动增量。事实上,这在SQL服务器上是不接受的,所以我将在下面给你另一个选项
CREATE TRIGGER [dbo].[insert_triger] ON [dbo].[TBL_TXN_USER]
FOR INSERT
AS
update TBL_TXN_USER set [user_id] = id
where id = (
select MAX(id)
from TBL_TXN_USER
)
列别名适用于select
语句而不是create table
,对于[user_id]
,您也没有提供任何数据类型。使用以下内容创建表格:
CREATE TABLE [dbo.TBL_TXN_USER](
[id] int NOT NULL IDENTITY(1,1),
[user_id] int PRIMARY KEY NOT NULL ,
....rest of code
要更新[user_id]
,请考虑使用触发器。