首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NEWID()创建主键

用NEWID()创建主键
EN

Stack Overflow用户
提问于 2013-10-02 15:32:41
回答 2查看 1.3K关注 0票数 1

我有一个查询,我每天晚上从几个不同的表中使用拉数据,然后这个拉就进入一个重新插入表,该表被加载到我们的云服务器上。我试图为每一行设置某种类型的唯一标识符/主键,但我有问题。

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

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

谢谢你,瑞秋

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-02 15:51:28

NEWID()是通过设计返回唯一(计算机) GUID值的方法。无论什么时候你跑

代码语言:javascript
复制
SELECT NEWID()

你会看到一个不同的价值。

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

票数 2
EN

Stack Overflow用户

发布于 2013-10-02 16:01:20

NEWID()每次调用时都返回唯一值。这并不是主键的最佳选择,而且大多数数据专业人员都倾向于为集群的主键使用int标识(如果可能的话)。

在您的情况下,这两种解决方案都不能很好地工作,因为标识和NEWID()都返回新值。您需要做的是确定哪些列确定某一行是否是重复的,是否需要更新而不是插入。要做到这一点,请使用合并语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19140772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档