我有一个查询,我使用每天晚上从几个不同的表中拉出数据,这个拉进入一个upsert表,它被加载到我们的云服务器。我试图为每一行设置一些独特的标识符/主键,但我遇到了问题。用NEWID创建一个主键()
SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)
每当我重新运行查询,它改变每次NEWID()
的价值,所以它装载到副本我的表每天晚上,而不是更新的记录。无论如何,我可以保持newid()
每次运行查询时的静态值?
感谢, 雷切尔
我有一个查询,我使用每天晚上从几个不同的表中拉出数据,这个拉进入一个upsert表,它被加载到我们的云服务器。我试图为每一行设置一些独特的标识符/主键,但我遇到了问题。用NEWID创建一个主键()
SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)
每当我重新运行查询,它改变每次NEWID()
的价值,所以它装载到副本我的表每天晚上,而不是更新的记录。无论如何,我可以保持newid()
每次运行查询时的静态值?
感谢, 雷切尔
NEWID()
是由设计独特返回(在计算机上)GUID值。无论何时运行
SELECT NEWID()
您将看到不同的值。
听起来你的UPSERT代码需要将源表中的数据合并到一个主键中,以便将来可靠地使用它来确定是否需要插入或更新给定的行。
谢谢你的解释! – user2839262
NEWID()每次调用时都会返回一个唯一值。这不是主键的最佳选择,并且大多数数据专家在可能的情况下使用集群主键的int标识。
在你的情况下,由于身份和NEWID()都返回新值,所以这两种解决方案都无法完美工作。你需要做的是找出哪些列确定一行是否是重复的,需要更新而不是插入。为此,请使用merge声明。
谢谢你的解释! – user2839262
对不起,我不明白你的意思。你是说你插入多个表,但想要为每个表使用相同的uniqueindetifier? – Fred
我从多个表中拉出来插入到一个特定的插入表中。我想要一个唯一的ID为upsert表,但我没有真正好的方法来唯一标识每一行。 – user2839262