如何在Hana sql上创建主键列并用整数值填充

如何在Hana sql上创建主键列并用整数值填充,sql,sap,primary-key,hana,alter-table,Sql,Sap,Primary Key,Hana,Alter Table,我搜索了一下,但只能找到这个问题的部分答案 这里的目标是在现有表上创建一个新的ID列。 这个新列将是表的主键,我只想让它填充1到行数的整数值 对此有什么疑问? 我知道我必须首先更改表以创建新列: altertableadd(ID整数) 然后我可以使用串联发电机: INSERT INTO <MYTABLE.ID> SELECT SERIES_GENERATE_INTEGER(1,1,(number of rows)); 插入选择序列生成整数(1,1,(行数)); 填写该列后,我可以

我搜索了一下,但只能找到这个问题的部分答案 这里的目标是在现有表上创建一个新的
ID
列。 这个新列将是表的
主键
,我只想让它填充
1
行数
的整数值

对此有什么疑问? 我知道我必须首先更改表以创建新列:

altertableadd(ID整数)

然后我可以使用串联发电机:

INSERT INTO <MYTABLE.ID> SELECT SERIES_GENERATE_INTEGER(1,1,(number of rows));
插入选择序列生成整数(1,1,(行数));
填写该列后,我可以使用以下行:

ALTER TABLE <MYTABLE> ADD PRIMARY KEY ("ID");
altertable添加主键(“ID”);

我相信有一种更简单的方法可以做到这一点

您写道,您希望向现有表添加一个“新ID列”,并用唯一值填充它。 这不是任何DBMS中的“标准”操作,因为通常的假设是,记录是使用主键创建的,而不是重新安装的

因此,此操作的“易用性”与您想要执行的其他操作有关。 例如,如果要继续使用此ID作为主键进行进一步操作,则使用一次性生成器函数(如
SERIES\u GENERATE\u INTEGER
或查询)将不会有很大帮助,因为您必须避免重复已存在的值

我想到了两个相对简单的选择:

  • 使用序列:

    create sequence myid;
    update <table> set ID = myid.nextval;
    
    创建序列myid;
    更新集ID=myid.nextval;
    
    对于后续插入:

    insert into <table> (id, ..., ...) VALUES (myid.nextval, ..., ...) ;
    
    插入(id,…)值(myid.nextval,…);
    
    请注意,这将为每个现有记录生成一个值,而不是预定义的一组大小X

  • 使用GUID 通过使用GUID,您可以在每次调用SAP HANA中的“SYSUUID”函数时生成唯一值

    差不多

    update <table> set ID = SYSUUID;
    
    更新集ID=SYSUUID;
    
    我们应该在这里做这个把戏

    后续的插入只需调用ID值的函数


  • 您写道,您希望添加一个“现有表的新ID列”,并用唯一值填充它。 这不是任何DBMS中的“标准”操作,因为通常的假设是,记录是使用主键创建的,而不是重新安装的

    因此,此操作的“易用性”与您想要执行的其他操作有关。 例如,如果要继续使用此ID作为主键进行进一步操作,则使用一次性生成器函数(如
    SERIES\u GENERATE\u INTEGER
    或查询)将不会有很大帮助,因为您必须避免重复已存在的值

    我想到了两个相对简单的选择:

  • 使用序列:

    create sequence myid;
    update <table> set ID = myid.nextval;
    
    创建序列myid;
    更新集ID=myid.nextval;
    
    对于后续插入:

    insert into <table> (id, ..., ...) VALUES (myid.nextval, ..., ...) ;
    
    插入(id,…)值(myid.nextval,…);
    
    请注意,这将为每个现有记录生成一个值,而不是预定义的一组大小X

  • 使用GUID 通过使用GUID,您可以在每次调用SAP HANA中的“SYSUUID”函数时生成唯一值

    差不多

    update <table> set ID = SYSUUID;
    
    更新集ID=SYSUUID;
    
    我们应该在这里做这个把戏

    后续的插入只需调用ID值的函数