最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作

 更新時(shí)間:2020年10月20日 14:36:46   作者:天河~  
這篇文章主要介紹了SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

需求是使用sqlserver根據(jù)指定的數(shù)字和表生成一串連續(xù)的數(shù)字,類似于oracle中ROWNUM的功能,具體實(shí)現(xiàn)如下:

一、Oracle使用ROWNUM實(shí)現(xiàn)方式

SELECT 
 ROWNUM number_list
FROM 表名
WHERE ROWNUM <= 10;

二、SqlServer實(shí)現(xiàn)上述功能的三種方式

1.使用MASTER…spt_values方式

SELECT
 number 
FROM
 MASTER..spt_values 
WHERE
 TYPE = 'P' 
 AND number > 0 
 AND number <= 10;

spt_values是master數(shù)據(jù)庫(kù)中的一張系統(tǒng)表,number的數(shù)值范圍是0~2047

2.使用String_Split函數(shù)實(shí)現(xiàn)

select row_number() over (order by (select 1)) from String_Split(space(6),' ')

String_Split是SQLServer 2016的新函數(shù),這個(gè)方法只對(duì)2016及后續(xù)版本有效。

(我的數(shù)據(jù)庫(kù)版本是2008,此方式未驗(yàn)證)

3.使用top+ROW_NUMBER () OVER方式實(shí)現(xiàn)

SELECT TOP
 10 ROW_NUMBER () OVER (
ORDER BY
 (SELECT 1)) number_list 
FROM
(SELECT TOP 10 * FROM 表名) t;

第一種方式對(duì)數(shù)據(jù)庫(kù)版本無(wú)要求,但是取值范圍有限制0~2047;

第二種方式對(duì)數(shù)據(jù)庫(kù)版本有要求,要在2016及之上;

第三種方式對(duì)數(shù)據(jù)庫(kù)版本無(wú)要求,只要表里的數(shù)據(jù)量大于要生成的數(shù)字即可;

補(bǔ)充知識(shí):數(shù)據(jù)庫(kù)生成測(cè)試數(shù)據(jù)(SQL實(shí)現(xiàn))

需求

項(xiàng)目中偶爾會(huì)有造數(shù)據(jù)進(jìn)行測(cè)試的情況,根據(jù)常見(jiàn)的數(shù)據(jù)特征,我這里假設(shè)數(shù)據(jù)某表Table_X含4個(gè)字段,每個(gè)字段的要求如下,需要造出5000條數(shù)據(jù)。

以上需求看上去非常簡(jiǎn)單,但比較具有代表性,復(fù)雜需求也是由小需求排列組合而成。

功能準(zhǔn)備

隨機(jī)數(shù)

造數(shù)的核心功能是生成隨機(jī)數(shù),SQL Server下有RAND()系統(tǒng)函數(shù)可以生成0到1之間的小數(shù),利用它可以生成固定區(qū)間 [Min,Max] 的小數(shù):Min + (Max - Min) * RAND(),另外CHECKSUM(NEWID())也可以生成一串比較大的整數(shù)(9位或10位數(shù)居多),再配合ABS取絕對(duì)值和取模運(yùn)算,就可以很好的控制所生成隨機(jī)數(shù)的范圍了。

區(qū)間隨機(jī)數(shù)函數(shù)

為了SQL寫(xiě)起來(lái)方便,可事先創(chuàng)建一個(gè)自定義函數(shù),用來(lái)生成區(qū)間隨機(jī)數(shù):

CREATE VIEW vwRand
AS
SELECT RAND() AS RandValue
GO

CREATE FUNCTION dbo.Random_Range
(
  @Min DECIMAL(22,5)
  ,@Max DECIMAL(22,5)
)RETURNS DECIMAL(22,5)
-- return value between @Min and @Max
BEGIN
  DECLARE @Result DECIMAL(22,5);
  SELECT @Result = @Min + (@Max - @Min) * RandValue FROM vwRand;
  RETURN @Result
END
GO

這里先創(chuàng)建了一個(gè)視圖,然后在函數(shù)體內(nèi)引用,是因?yàn)镾QL Server不支持直接在函數(shù)體中引用RAND函數(shù),會(huì)報(bào)錯(cuò)Invalid use of a side-effecting operator ‘rand' within a function.。

列表選擇

如果是從少量的枚舉數(shù)值中選擇,可以使用CHOOSE函數(shù)。

若從大量候選項(xiàng)中選擇,可將數(shù)據(jù)導(dǎo)入含自增列的數(shù)據(jù)庫(kù)表后,通過(guò)標(biāo)量子查詢進(jìn)行選擇。

造數(shù)SQL

SELECT TOP 5000
  ABS(CHECKSUM(NEWID())) % 100 + 1 AS Col_A
  ,dbo.Random_Range(5000, 10000) AS Col_B
  ,ISNULL(CHOOSE(ABS(CHECKSUM(NEWID())) % 3 + 1, 'S', 'M', 'L', 'XL', 'XXL'), 'M') AS Col_C
  ,DATEADD(DAY, dbo.Random_Range(0, DATEDIFF(DAY, '20000101', '20201231')), '20000101') AS Col_D
FROM sys.all_columns

說(shuō)明

實(shí)際需求可能字段非常多,但基本都可以用以上寫(xiě)法,修改參數(shù)即可;

SQL的功能畢竟有限,基本只適合從固定列表中隨機(jī)選擇,以及生成隨機(jī)數(shù)值性數(shù)據(jù)的場(chǎng)景;

若要造出更符合業(yè)務(wù)領(lǐng)域特性的數(shù)據(jù),比如批量生成城市名、郵箱、人名、手機(jī)號(hào)、地址等數(shù)據(jù),用純SQL就會(huì)有點(diǎn)吃力了,下一篇將介紹如何用python的faker庫(kù)生成測(cè)試數(shù)據(jù)。

以上這篇SqlServer生成連續(xù)數(shù)字根據(jù)指定的數(shù)字操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SQL?Server的存儲(chǔ)過(guò)程詳解

    SQL?Server的存儲(chǔ)過(guò)程詳解

    這篇文章主要為大家介紹了SQLServer的存儲(chǔ)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 使用 TOP 子句限制UPDATE 語(yǔ)句更新的數(shù)據(jù)

    使用 TOP 子句限制UPDATE 語(yǔ)句更新的數(shù)據(jù)

    這篇文章主要介紹了使用 TOP 子句限制UPDATE 語(yǔ)句更新的數(shù)據(jù),需要的朋友可以參考下
    2014-08-08
  • SQL Server自動(dòng)生成日期加數(shù)字的序列號(hào)

    SQL Server自動(dòng)生成日期加數(shù)字的序列號(hào)

    需要生成下面的序列號(hào),前半部分是yyyymmdd格式的年月日時(shí)間數(shù)字,后半部分則是每天都從1順序增長(zhǎng)的數(shù)字,位數(shù)要固定,中間不足的補(bǔ)0。
    2009-08-08
  • SQLite如何修改字段類型

    SQLite如何修改字段類型

    這篇文章主要介紹了SQLite修改字段類型的方法,SQLite不支持直接修改字段類型,如需要修改字段類型,本文給大家分享相關(guān)方法處理,需要的朋友可以參考下
    2024-07-07
  • sqlserver數(shù)據(jù)庫(kù)移動(dòng)數(shù)據(jù)庫(kù)路徑的腳本示例

    sqlserver數(shù)據(jù)庫(kù)移動(dòng)數(shù)據(jù)庫(kù)路徑的腳本示例

    前段時(shí)間做過(guò)這么一件事情,把原本放在c盤(pán)的所有數(shù)據(jù)庫(kù)(除了sql server系統(tǒng)文件外)文件Move到D盤(pán),主要是為了方便后續(xù)管理以及減少磁盤(pán)I/O阻塞(C,D是2個(gè)獨(dú)立磁盤(pán))。腳本需輸入2個(gè)參數(shù):目標(biāo)數(shù)據(jù)庫(kù)名字和目標(biāo)目錄
    2013-12-12
  • SQL Server中發(fā)送HTML格式郵件的方法

    SQL Server中發(fā)送HTML格式郵件的方法

    這篇文章主要介紹了SQL Server中發(fā)送HTML格式郵件的方法,需要的朋友可以參考下
    2014-10-10
  • SQL Server數(shù)據(jù)庫(kù)中設(shè)置索引的策略分享

    SQL Server數(shù)據(jù)庫(kù)中設(shè)置索引的策略分享

    在 SQL Server 中,索引通過(guò)加快數(shù)據(jù)檢索速度在優(yōu)化查詢性能方面發(fā)揮著關(guān)鍵作用,在數(shù)據(jù)庫(kù)中設(shè)置索引的策略受數(shù)據(jù)庫(kù)結(jié)構(gòu)、表的大小和將要運(yùn)行的查詢類型的影響,以下是如何將索引應(yīng)用于這些不同類型的表的詳細(xì)分類,需要的朋友可以參考下
    2024-12-12
  • insert select與select into 的用法使用說(shuō)明

    insert select與select into 的用法使用說(shuō)明

    將一個(gè)table1的數(shù)據(jù)的部分字段復(fù)制到table2中,或者將整個(gè)table1復(fù)制到table2中,這時(shí)候我們就要使用SELECT INTO 和 INSERT INTO SELECT 表復(fù)制語(yǔ)句了
    2011-12-12
  • 解決在SQL腳本中的注釋引起的奇怪問(wèn)題

    解決在SQL腳本中的注釋引起的奇怪問(wèn)題

    通過(guò)osql.exe這個(gè)工具來(lái)對(duì)相關(guān)的數(shù)據(jù)庫(kù)腳本進(jìn)行更新,昨天突然發(fā)現(xiàn)安裝包報(bào)錯(cuò)了,說(shuō)腳本錯(cuò)誤,研究發(fā)現(xiàn)有個(gè)不錯(cuò)的解決方法,需要的朋友不要錯(cuò)過(guò)
    2013-11-11
  • 詳解SQL Server中的事務(wù)與鎖問(wèn)題

    詳解SQL Server中的事務(wù)與鎖問(wèn)題

    在數(shù)據(jù)庫(kù)方面,對(duì)于非DBA的程序員來(lái)說(shuō),事務(wù)與鎖是一大難點(diǎn),針對(duì)該難點(diǎn),本篇文章試圖采用圖文的方式來(lái)與大家一起探討sqlserver事務(wù)與鎖問(wèn)題
    2018-02-02

最新評(píng)論

井陉县| 永昌县| 渑池县| 甘南县| 绩溪县| 淅川县| 青州市| 增城市| 济宁市| 永新县| 南雄市| 邵武市| 武平县| 读书| 丰原市| 芜湖市| 满城县| 周至县| 武夷山市| 广水市| 天长市| 磐石市| 林周县| 梁山县| 佛坪县| 安阳市| 高台县| 祁阳县| 观塘区| 颍上县| 雷山县| 和林格尔县| 巢湖市| 天柱县| 沁水县| 武城县| 丹棱县| 读书| 盖州市| 高要市| 南郑县|