我有一个查询,我每晚使用来自几个不同表的拉数据,这个拉进入一个加载到我们的云服务器的upsert表。我正在尝试为每一行设置某种类型的唯一标识符/主键,但我遇到了问题。
SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)
每当我重新运行查询时,它每次都会更改NEWID()
的值,因此它每晚都会将重复项加载到我的表中,而不是更新记录。无论如何我每次运行查询时都可以将newid()
保留为静态值吗?
谢谢, 拉结
答案 0 :(得分:2)
NEWID()
按设计返回唯一(对您的计算机)GUID值。每当你运行
SELECT NEWID()
您会看到不同的值。
听起来你的UPSERT代码需要将来自源表的数据组合成一个主键,以后你可以可靠地使用它来确定是否需要插入或更新给定的行。
答案 1 :(得分:0)
NEWID()都会返回一个唯一值。它不是主键的最佳选择,如果可能的话,大多数数据专业人员都会使用集群主键的int标识。
在您的情况下,由于身份和NEWID()都返回新值,因此两种解决方案都无法正常工作。您需要做的是确定哪些列确定行是否重复并且需要更新而不是插入。为此,请使用merge语句。