Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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更新集=子查询集(随机)_Sql_Sql Server - Fatal编程技术网

SQL更新集=子查询集(随机)

SQL更新集=子查询集(随机),sql,sql-server,Sql,Sql Server,我需要修改以下内容(这是伪代码): 因此,我基本上需要使用子查询中的随机引擎更新所有Cars表。在MSSQL中是否可能出现这种情况?您可以使用公共表表达式给出引擎查询行号,然后选择一个随机行号 假设您有100个引擎-查询将如下所示: ;with CTE as ( SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn FROM Engines WHERE Type = 3 ) UPDATE Cars SET En

我需要修改以下内容(这是伪代码):


因此,我基本上需要使用子查询中的随机引擎
更新
所有
Cars表。在
MSSQL
中是否可能出现这种情况?

您可以使用公共表表达式给出引擎查询行号,然后选择一个随机行号

假设您有100个引擎-查询将如下所示:

;with CTE as (
   SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
   FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*100 as int))
更新:对于任何数量的发动机

;with CTE as (
   SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
   FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*(SELECT COUNT(1) FROM CTE) as int))
更新2:多行更新(假设Cars表有ID字段或任何其他可以排序的字段)

更新3:如果汽车数量超过发动机数量,则将最后一辆替换为

FROM CTE_CARS JOIN CTE_ENGINES ON (CTE_CARS.RN - CTE_ENGINES.RN) % (SELECT COUNT(1) FROM CTE_ENGINES) = 0

您可以使用公共表表达式为引擎查询行号,然后选择一个随机行号

假设您有100个引擎-查询将如下所示:

;with CTE as (
   SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
   FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*100 as int))
更新:对于任何数量的发动机

;with CTE as (
   SELECT EngineName, ROW_NUMBER() over(order by EngineName) as rn
   FROM Engines WHERE Type = 3
)
UPDATE Cars SET Engine = (SELECT EngineName FROM CTE WHERE where rn = 1+CAST(rand()*(SELECT COUNT(1) FROM CTE) as int))
更新2:多行更新(假设Cars表有ID字段或任何其他可以排序的字段)

更新3:如果汽车数量超过发动机数量,则将最后一辆替换为

FROM CTE_CARS JOIN CTE_ENGINES ON (CTE_CARS.RN - CTE_ENGINES.RN) % (SELECT COUNT(1) FROM CTE_ENGINES) = 0

你想让所有的车都有不同的引擎吗?不,它们可以复制,但必须是随机的。我会检查Praveen的回答,你想让所有的车都有不同的引擎吗?不,它们可以复制,但它们必须是随机的。我会尽快检查Praveen的回答如果我没有固定的引擎计数(100),会发生什么?他们可能change@user2441297这必须是一艘班轮吗?如果不是,您可以在此查询之前运行另一个查询以获取引擎数。我希望使用一行程序(我在ASP.NET parser.ExecuteOnQuery()中使用此查询)。好吧,这仍然不是答案。通过这个查询,我得到随机的EngineName,这个EngineName设置为所有汽车。但我需要不同的引擎名称来支持多个更新的carsUpdated查询,假设CARS表有ID列,若我并没有固定的引擎计数(100),该怎么办?他们可能change@user2441297这必须是一艘班轮吗?如果不是,您可以在此查询之前运行另一个查询以获取引擎数。我希望使用一行程序(我在ASP.NET parser.ExecuteOnQuery()中使用此查询)。好吧,这仍然不是答案。通过这个查询,我得到随机的EngineName,这个EngineName设置为所有汽车。但我需要不同的引擎名称来支持多个更新的carsUpdated查询,假设CARS表有ID列