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