Sql server 动态SQL将数据库中的所有datetime列随机化

Sql server 动态SQL将数据库中的所有datetime列随机化,sql-server,dynamic-sql,Sql Server,Dynamic Sql,我很难弄清楚如何使用动态SQL Server查询将我的数据库(称为OnlineStore)中的datetime字段更改为随机的,并且是在当前年份 应该注意的是,这与家庭作业有关。我的班级是相当无组织的,所以我很难知道从这里走到哪里 我的问题是:如何编写一个动态SQL Server查询,该查询可以使用循环或表变量,并获取数据库中的两个datetime列(Product.LastOrderDate、Orders.OrderDate),并在当前年份中为每一行分配一个随机日期 这就是我目前所拥有的。我愿

我很难弄清楚如何使用动态SQL Server查询将我的数据库(称为OnlineStore)中的datetime字段更改为随机的,并且是在当前年份

应该注意的是,这与家庭作业有关。我的班级是相当无组织的,所以我很难知道从这里走到哪里

我的问题是:如何编写一个动态SQL Server查询,该查询可以使用循环或表变量,并获取数据库中的两个datetime列(Product.LastOrderDate、Orders.OrderDate),并在当前年份中为每一行分配一个随机日期

这就是我目前所拥有的。我愿意接受任何改变

Declare @SQL varchar(max) = '
Declare @D1 float = cast(cast(''2017-01-01 00:00:00'' as datetime) as float);
Declare @D2 float = cast(cast(''2017-12-31 23:59:59'' as datetime) as float);
根据这一回答:

这让你几乎一路产生一个随机的日期,我把日期限制在28天,因为2月就是2月

select cast('2017-' + CAST(ABS(Checksum(NEWID()) % 12) + 1 AS varchar(2)) + '-' + CAST(ABS(Checksum(NEWID()) % 28) + 1 AS varchar(2)) as date)
您可以根据自己的需要对其进行调整。

基于此,我提出了以下建议。它在2017年1月1日随机增加n秒,以2017年的秒数为上限

第一点就是我生成了一个包含50行的表,都是2017-01-01

您将希望重点关注

if object_id('tempdb..#test') is not null drop table #test
create table #test (orderDate datetime)

-- add 50 rows to test table
;with x as
(
    select 1 as t
    union all
    select t+1
    from x
)

insert into #test
select top 50 '2017-01-01'
from x
option(maxrecursion 50)

--select * from #test

update t
set OrderDate = dateadd(second,ABS(CHECKSUM(NewId())) % datediff(second,'2017-01-01 00:00:00','2017-12-31 23:59:59'),'2017-01-01 00:00:00')
from #test t

select * from #test

这里有一半:
从sys.tables t中选择REPLACE(REPLACE('UPDATE$t SET$c=…','t',QUOTENAME(t.[name]),'$c',QUOTENAME(c.[name]),将c.[object\u id]=t.[object\u id]上的sys.columns c连接到c.[object\u id],其中t.is\ms\u shipped=0和c.system\u type\u id=61
。另一半是用一个表达式填充“…”,这个表达式会给你一个随机的日期。某物某物某物
RAND()
,某物某物
DATEDIFF
/
DATEADD
。如果需要,还有第三部分,使用
EXECUTE
和游标执行结果语句。当然,这是一个有趣的小项目。