我正在尝试将两列自动增加,但此列显示错误[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]
有什么问题?怎么解决?
答案 0 :(得分:1)
很抱歉我的误解,所以你想在一个表中添加两列自动增量。实际上这在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
)
答案 1 :(得分:1)
错误消息是因为您在计算列上放置了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本身是浪费资源:2个字段中的一个不应该在那里
- 一个具有系统功能名称(user_id)的字段是我不惜一切代价避免的
- 这个问题看起来像是试图为隐藏的问题提供解决方案(计算字段为id)。
答案 2 :(得分:0)
列别名适用于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]
,请考虑使用触发器。