我想将我现有的列更改为 Postgres 数据库中的自动标识。
我试过下面的脚本,但它不起作用。
如果您有相同的解决方案,请
告诉我我不想使用 postgres SEQUENCE。我想使用GENERATED ALWAYS AS IDENTITY。
ALTER TABLE public.patient ALTER COLUMN patientid Type int4
USING patientid::int4 GENERATED ALWAYS AS IDENTITY;
Run Code Online (Sandbox Code Playgroud) 我想将我自己的值插入到身份列中。
表架构:
CREATE TABLE public.userdetail (
userdetailid int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
username varchar(30) NOT NULL,
"password" varchar(1000) NOT NULL,
CONSTRAINT pk_userdetail PRIMARY KEY (userdetailid)
);
Run Code Online (Sandbox Code Playgroud)
插入查询:
INSERT INTO UserDetail (UserDetailId,UserName, Password)
VALUES(1,'admin', 'password');
Run Code Online (Sandbox Code Playgroud)
这里插入查询抛出以下错误:
无法插入“userdetailid”列
是否有任何命令可以强制插入到身份列,如 MS SQL:
SET IDENTITY_INSERT UserDetail ON
Run Code Online (Sandbox Code Playgroud)
如果您有任何解决方案,请告诉我。
我在动态 sql 查询时遇到问题。
使用 nvarchar(max) 声明 sql 查询变量并构建动态查询,然后使用 sq_executesql 运行它。
请建议您是否有任何解决方案。
下面是我的代码片段:
DECLARE @count int, @sql nvarchar(max),@where nvarchar(max)
SELECT @count = 2, @where=' Where 1 = 1 '
set @sql = '
SELECT top 2
' + cast(@count as NVARCHAR) + ' as [Count],
Name,
1 AS Column1,2 AS Column2,3 AS Column3,4 AS Column4,5 AS Column5,6 AS Column6,7 AS Column7,8 AS Column8,9 AS Column9,10 AS Column10,11 AS Column11,12 AS Column12,13 AS Column13,14 AS Column14,15 AS Column15,16 AS Column16,17 AS Column17,18 …Run Code Online (Sandbox Code Playgroud) 我想将我现有的列更改为 Postgres 数据库中的自动标识。
我使用下面的脚本来设置自动标识列并设置默认从 1 开始。
但在这里我想将标识列值重置为表的最后一个值。
如果您有任何解决方案,请告诉我。
ALTER TABLE patient
ALTER patientid SET NOT NULL,
ALTER patientid ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
Run Code Online (Sandbox Code Playgroud)
在这里,我正在设置这样的东西:
ALTER TABLE Patient
ALTER COLUMN PatientId RESTART WITH (select Max(patientId) + 1 from patient);
Run Code Online (Sandbox Code Playgroud) 我将 Postgres 数据库与复制一起使用。
我在 postgres 函数中使用了临时表。我无法在通过加入更新临时表时更新它。
下面是 Postgres 查询(tempallergyupdates是临时表):
drop table if exists tempallergyupdates;
create temp table tempallergyupdates(patientallergyid int,updateid int, newupdateid int);
update tempallergyupdates set patientallergyid = 1;
Run Code Online (Sandbox Code Playgroud)
上面的查询抛出以下异常:
无法更新表“tempallergyupdates”,因为它没有副本标识并发布更新
我必须在时间戳列中存储最多 3 毫秒的数字。
我在每个表中有两个固定列:createdDate、LastmodifiedDate。
插入 CreatedDate/LastmodifiedDate 的数据值时:
now() at time zone 'utc'
Run Code Online (Sandbox Code Playgroud)
但它存储的是 5 位毫秒数。
我只想存储毫秒的 3 个小数位。
让我建议哪种类型的数据类型仅存储毫秒的 3 位小数位。
如果您有任何解决方案,请告诉我。
我正在为Patient表的现有列设置标识列。
在这里,我想使用GENERATED ALWAYS AS IDENTITY。
因此,我使用以下语句设置了标识列(以前是serial):
ALTER TABLE Patient ALTER PatientId
ADD GENERATED ALWAYS AS IDENTITY (START WITH 1);
Run Code Online (Sandbox Code Playgroud)
对于现有的患者表,我总共有 5 条记录。( patientId1 到 5)
当我在身份设置后插入新记录时,它会抛出如下错误:
more than one owned sequence found
Run Code Online (Sandbox Code Playgroud)
即使在重置标识列后,我仍然遇到相同的错误。
ALTER TABLE Patient ALTER COLUMN PatientId RESTART WITH 6;
Run Code Online (Sandbox Code Playgroud)
如果您有任何解决方案,请告诉我。