我的一个表中有一个标识字段,指定为
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_Key字段中的值会有所不同(但不会像预期的那样是-1)。如果没有EXCEPT子句,User_Key字段将完全按预期工作。测试此过程涉及在每次迭代时删除并重新创建此表。
我已经完成了通常的流程文档/论坛/等等,但是在其他地方看不到这个。这是一个已知的问题,可以通过指定其他参数来修复吗?我有一个解决方法(在我的应用程序的其余部分之前包含create语句和未知值,但我宁愿将脚本保留在尽可能少的部分。
答案 0 :(得分:0)
您确定其余列的值是否正确?我怀疑错误可能就是这些。
您可以使用not exists
:
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)