我有一个查询,我每天晚上从几个不同的表中使用拉数据,然后这个拉就进入一个重新插入表,该表被加载到我们的云服务器上。我试图为每一行设置某种类型的唯一标识符/主键,但我有问题。
SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)
每当我重新运行查询时,它每次都会更改NEWID()的值,因此它每晚都会将副本加载到我的表中,而不是更新记录。无论怎样,每次运行查询时,我都可以将newid()保持为静态值吗?
谢谢你,瑞秋
发布于 2013-10-02 15:51:28
NEWID()是通过设计返回唯一(计算机) GUID值的方法。无论什么时候你跑
SELECT NEWID()你会看到一个不同的价值。
听起来,您的UPSERT代码需要将源表中的数据组合成一个主键,您以后可以可靠地使用它来确定给定的行是否需要插入或更新。
发布于 2013-10-02 16:01:20
NEWID()每次调用时都返回唯一值。这并不是主键的最佳选择,而且大多数数据专业人员都倾向于为集群的主键使用int标识(如果可能的话)。
在您的情况下,这两种解决方案都不能很好地工作,因为标识和NEWID()都返回新值。您需要做的是确定哪些列确定某一行是否是重复的,是否需要更新而不是插入。要做到这一点,请使用合并语句。
https://stackoverflow.com/questions/19140772
复制相似问题