我有一个临时表,随机主机名填充如下:
CREATE TABLE #strings_temp (
stringtemp VARCHAR(30));
-- Create a temporary table with random strings with the same row count as table 2
DECLARE @row INT;
DECLARE @TotalRows INT;
SET @row = 0;
SET @TotalRows = (Select DISTINCT COUNT(*) From table2)
WHILE @row <= @TotalRows
BEGIN
INSERT INTO #strings_temp
(stringtemp)
select char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
+char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
+char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
+char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
+char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)+
+ '.'
+char(rand()*26+65)+char(rand()*26+65)+char(rand()*26+65)
+'.' + 'RANDOM.COM';
SET @row = @row + 1;
END;
然后我想使用CTE用临时表中的数据更新表2中的值,如下所示,但这需要花费大量时间:
-- Update the string field with the string from the temporary table
WITH Table2CTE AS
(
SELECT
stringname,
rn = ROW_NUMBER() OVER(ORDER BY NEWID())
FROM table2
)
, SampleStringData AS
(
SELECT
stringtemp,
rn = ROW_NUMBER() OVER(ORDER BY NEWID())
FROM #strings_temp
CROSS JOIN Table2CTE
)
UPDATE m
SET m.stringname = fn.stringtemp
FROM Table2CTE AS m
INNER JOIN SampleStringData AS fn
ON fn.rn = m.rn
我哪里错了?
答案 0 :(得分:1)
删除了CROSS JOIN并现已修复
-- Update the string field with the string from the temporary table
WITH Table2CTE AS
(
SELECT
stringname,
rn = ROW_NUMBER() OVER(ORDER BY NEWID())
FROM table2
)
, SampleStringData AS
(
SELECT
stringtemp,
rn = ROW_NUMBER() OVER(ORDER BY NEWID())
FROM #strings_temp
)
UPDATE m
SET m.stringname = fn.stringtemp
FROM Table2CTE AS m
INNER JOIN SampleStringData AS fn
ON fn.rn = m.rn