Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 红移-在某些情况下插入初始单个值时不考虑标识种子值_Sql_Amazon Redshift_Identity Column - Fatal编程技术网

Sql 红移-在某些情况下插入初始单个值时不考虑标识种子值

Sql 红移-在某些情况下插入初始单个值时不考虑标识种子值,sql,amazon-redshift,identity-column,Sql,Amazon Redshift,Identity Column,我的一个表中有一个标识字段,指定为 User_Key BIGINT PRIMARY KEY IDENTITY(-1,1) NOT NULL 种子被设置为-1以解释未知值(在我的所有表中都是通用的),并且每次都会追加该表,而不是删除并重新创建该表,但该过程被设置为在意外删除该表时重新创建该表 由于RedShift不支持if语句(理想情况下,如果表不存在,我只会插入未知值),因此我的解决方法(使用EXCEPT)如下所示 CREATE TABLE IF NOT EXISTS TBL

我的一个表中有一个标识字段,指定为

User_Key BIGINT PRIMARY KEY IDENTITY(-1,1) NOT NULL
种子被设置为-1以解释未知值(在我的所有表中都是通用的),并且每次都会追加该表,而不是删除并重新创建该表,但该过程被设置为在意外删除该表时重新创建该表

由于RedShift不支持if语句(理想情况下,如果表不存在,我只会插入未知值),因此我的解决方法(使用EXCEPT)如下所示

CREATE TABLE IF NOT EXISTS TBL
        (User_Key BIGINT PRIMARY KEY IDENTITY(-1,1) NOT NULL
        ,Col1 VARCHAR(255) NOT NULL
        ,Col2 INT
        ,COL3 VARCHAR(255) NOT NULL

INSERT INTO TBL
        (Col1
        ,Col2
        ,Col3)
SELECT
        'Unknown'
        NULL
        'Etc'
EXCEPT
SELECT
        Col1
        ,Col2
        ,Col3
FROM TBL
使用EXCEPT子句,User_键字段中的值会发生变化(但决不会像预期的那样为-1)。如果没有EXCEPT子句,User_键字段将完全按照预期工作,不会失败。测试这个过程需要在每次迭代中删除并重新创建这个表


我已经做了流程文档/论坛/等的常规扫描,但在其他地方看不到报告。这是一个可以通过指定其他参数来解决的已知问题吗?我有一个解决方法(在我的应用程序中的其余过程之前,将create语句和unknown value括起来,但我宁愿将脚本保留在尽可能少的部分中。

是否确定其余的列具有正确的值?我怀疑错误可能就在这些方面

您可以使用
不存在

INSERT INTO TBL (Col1, Col2, Col3)
    SELECT x.*
    FROM (SELECT 'Unknown' as col1, NULL as col2, 'Etc' as col3) x
    WHERE NOT EXISTS (SELECT 1 FROM tbl WHERE tbl.user_key = -1)

值应该是正确的,因为行被正确插入到空表中,尽管用户_键与种子不匹配。您的解决方案工作得非常好-谢谢。