Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用CTE和NEWID()更新表_Sql Server_Random_Common Table Expression - Fatal编程技术网

Sql server 使用CTE和NEWID()更新表

Sql server 使用CTE和NEWID()更新表,sql-server,random,common-table-expression,Sql Server,Random,Common Table Expression,我想尝试使用同一个表中的随机值更新一个表,但原始表没有标识或任何其他数字列 WITH cteTable1 AS ( SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS n, ENDE_NO_Address FROM TableX ) UPDATE TableX SET ENDE_NO_Address = ( SELECT ENDE_NO_Address FROM cteTable1 WHERE cteTable1.n

我想尝试使用同一个表中的随机值更新一个表,但原始表没有标识或任何其他数字列

WITH cteTable1 AS (
SELECT
    ROW_NUMBER() OVER (ORDER BY NEWID()) AS n,
    ENDE_NO_Address
FROM TableX
)
UPDATE TableX SET ENDE_NO_Address = (
   SELECT ENDE_NO_Address 
   FROM cteTable1
   WHERE cteTable1.n = This is the problem...
需要帮助的tnks

猜测

UPDATE TableX
SET ENDE_NO_Address = (
   SELECT TOP 1 ENDE_NO_Address FROM TableX ORDER BY NEWID()
   )
编辑:

WITH cte AS (
SELECT
    ROW_NUMBER() OVER (ORDER BY NEWID()) AS n1,
    ROW_NUMBER() OVER (ORDER BY (select 1)) AS n2,
    ENDE_NO_Address
FROM TableX
)
update C1 set
  ENDE_NO_Address = C2.ENDE_NO_Address
from cte as C1
  inner join cte as C2
    on C1.n1 = C2.n2

还有!?!?!!?!你的问题是什么??它不起作用吗?b) 给你一个错误(如果是:什么错误?),或者c)不给随机值??那么你说的表没有主键?@gbn:那么它不是一个真正的表……:-)我需要使用表中的原始信息来随机更新。原始表没有PK。结果与我发布的结果会有点不同。使用随机值可能更正确。我的版本不重用地址。因此,我猜我的版本实际上是对数据进行加扰,而不是像OP所说的“使用随机值”。最后一个版本将所有列都置为null,但我将select 1更改为ENDE_NO_地址,工作正常。。。TNKS alot@Ricardo-奇怪,在我的测试中没有。第一个使用表变量的方法对您有效吗?除非某个地方有错别字,否则它们是一样的。
WITH cte AS (
SELECT
    ROW_NUMBER() OVER (ORDER BY NEWID()) AS n1,
    ROW_NUMBER() OVER (ORDER BY (select 1)) AS n2,
    ENDE_NO_Address
FROM TableX
)
update C1 set
  ENDE_NO_Address = C2.ENDE_NO_Address
from cte as C1
  inner join cte as C2
    on C1.n1 = C2.n2