2013-10-02 44 views
1

我有一个查询,我使用每天晚上从几个不同的表中拉出数据,这个拉进入一个upsert表,它被加载到我们的云服务器。我试图为每一行设置一些独特的标识符/主键,但我遇到了问题。用NEWID创建一个主键()

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

每当我重新运行查询,它改变每次NEWID()的价值,所以它装载到副本我的表每天晚上,而不是更新的记录。无论如何,我可以保持newid()每次运行查询时的静态值?

感谢, 雷切尔

+0

对不起,我不明白你的意思。你是说你插入多个表,但想要为每个表使用相同的uniqueindetifier? – Fred

+0

我从多个表中拉出来插入到一个特定的插入表中。我想要一个唯一的ID为upsert表,但我没有真正好的方法来唯一标识每一行。 – user2839262

回答

2

NEWID()是由设计独特返回(在计算机上)GUID值。无论何时运行

SELECT NEWID() 

您将看到不同的值。

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

+1

谢谢你的解释! – user2839262

0

NEWID()每次调用时都会返回一个唯一值。这不是主键的最佳选择,并且大多数数据专家在可能的情况下使用集群主键的int标识。

在你的情况下,由于身份和NEWID()都返回新值,所以这两种解决方案都无法完美工作。你需要做的是找出哪些列确定一行是否是重复的,需要更新而不是插入。为此,请使用merge声明。

+0

谢谢你的解释! – user2839262