sql 使用存储过程如何根据输入的值随机生成100条数据(不使用循环,只用一段代码如何实现)

sql 使用存储过程怎么根据输入的值随机生成100条数据(不使用循环,只用一段代码怎么实现)
sql 使用存储过程怎么根据输入的值随机生成100条数据(不使用循环,只用一段代码怎么实现)
如:输入’2014-1-1’ 随机生成100条2014内的日期

------解决方案--------------------
本帖最后由 DBA_Huangzj 于 2014-07-14 12:02:48 编辑
CREATE PROC test 
 @startdate DATETIME 
 AS 
 DECLARE   @enddate DATETIME
--SET @startdate = '2014-01-01'
SET @enddate = DATEADD(year,1,@startdate)
SELECT TOP 100   CONVERT(VARCHAR(10),DATEADD(dd,number,@startdate),23)new_date
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'
ORDER BY CHECKSUM(NEWID())
go


EXEC test '2014-01-01'

/*
new_date
----------
2014-01-21
2014-03-01
2014-07-22
2014-07-15
2014-08-30
2014-02-04
2014-02-27
2014-04-10
2014-03-28
2014-08-31
2014-01-11
2014-07-20
2014-09-17
2014-10-01
2014-01-02
2014-07-06
2014-06-14
2014-05-18
2014-02-10
2014-06-07
2014-09-25
2014-10-03
2014-07-01
2014-12-30
2014-08-25
2014-05-29
2014-02-21
2014-10-13
2014-05-19
2014-07-18
2014-10-25
2014-06-13
2014-01-09
2014-10-30
2014-03-25
2014-09-10
2014-09-05
2014-04-25
2014-04-04
2014-08-13
2014-07-21
2014-06-28
2014-07-26
2014-05-25
2014-11-23
2014-06-30
2014-10-02
2014-02-22
2014-09-19
2014-06-19
2014-05-28
2014-08-29
2014-04-24
2014-09-03
2014-01-10
2014-12-18
2014-09-23
2014-01-03
2014-07-05
2014-10-12
2014-12-15
2014-01-07
2014-03-09
2014-04-09
2014-11-10
2014-11-18
2014-12-19
2014-06-09
2014-06-01
2014-05-09
2014-08-12
2015-01-01
2014-06-29
2014-11-28
2014-03-10
2014-08-10
2014-08-05
2014-09-01
2014-03-30
2014-08-08
2014-12-14
2014-03-21
2014-05-03
2014-05-17
2014-03-13
2014-01-18
2014-09-08
2014-05-20
2014-10-26
2014-07-17
2014-03-08
2014-01-05
2014-02-08
2014-08-19
2014-10-16
2014-10-23
2014-05-27
2014-11-01
2014-12-17
2014-07-09
*/

------解决方案--------------------
改进一下,把结果集排个序
ALTER PROC test @startdate DATETIME
AS
    DECLARE @enddate DATETIME
--SET @startdate = '2014-01-01'
    SET @enddate = DATEADD(year, 1, @startdate)
    SELECT  *
    FROM    ( SELECT TOP 100
                        CONVERT(VARCHAR(10), DATEADD(dd, number, @startdate), 23) new_date
              FROM      master..spt_values
              WHERE     DATEDIFF(day, DATEADD(day, number, @startdate),
                                 @enddate) >= 0
                        AND number >= 0
                        AND type = 'p'
              ORDER BY  CHECKSUM(NEWID())
            ) a
    ORDER BY new_date
go