使用NEWID创建主键()

时间:2013-10-02 15:32:41

标签: sql sql-server primary-key newid

我有一个查询,我每晚使用来自几个不同表的拉数据,这个拉进入一个加载到我们的云服务器的upsert表。我正在尝试为每一行设置某种类型的唯一标识符/主键,但我遇到了问题。

SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)

每当我重新运行查询时,它每次都会更改NEWID()的值,因此它每晚都会将重复项加载到我的表中,而不是更新记录。无论如何我每次运行查询时都可以将newid()保留为静态值吗?

谢谢, 拉结

2 个答案:

答案 0 :(得分:2)

NEWID()按设计返回唯一(对您的计算机)GUID值。每当你运行

SELECT NEWID()

您会看到不同的值。

听起来你的UPSERT代码需要将来自源表的数据组合成一个主键,以后你可以可靠地使用它来确定是否需要插入或更新给定的行。

答案 1 :(得分:0)

每次调用时,

NEWID()都会返回一个唯一值。它不是主键的最佳选择,如果可能的话,大多数数据专业人员都会使用集群主键的int标识。

在您的情况下,由于身份和NEWID()都返回新值,因此两种解决方案都无法正常工作。您需要做的是确定哪些列确定行是否重复并且需要更新而不是插入。为此,请使用merge语句。