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列