Sql Serverは、指定された数字に基づいて連続数字を生成します。
3575 ワード
需要はsqlserverを使用して指定された数字と表から一連の数字を生成し、oracleのROWNUMのような機能を使用して、具体的には下記の通り実現します。
一、OracleはROWNUMを使用して実現する方式である。
二、Sql Serverは上記機能を実現する3つの方法
1.マスターを使う…スパートを使うvalues方式
spt_valuesはマスターデータベースのシステムテーブルで、numberの数値範囲は0~2047です。
2.String_を使用するSplit関数実現
select row_number()over(order by(select 1)from String_Split(space(6)')
String_SplitはSQLServer 2016の新しい関数であり、この方法は2016および以降のバージョンにのみ有効です。
(私のデータベースバージョンは2008です。この方式は検証されていません。)
3.top+ROW_を使うNUMBER()OVER方式実現
第一の方法はデータベースバージョンに対して要求がないが、値を取る範囲は0~2047に制限がある。
第二の方式はデータベースバージョンに要求があり、2016及びそれ以上である。
第三の方法はデータベースのバージョンに対して要求がないので、表と表のデータ量が生成する数字より大きいなら大丈夫です。
補足知識:データベース生成テストデータ(SQL実現)
需要
プロジェクトではたまにデータを作ってテストすることがありますが、よくあるデータの特徴から、データをテーブルテーブルテーブルテーブルテーブルテーブルにセットします。Xは4つのフィールドを含み、各フィールドの要求は以下の通りであり、5000のデータを作成する必要がある。
以上の需要は非常に簡単に見えるが、代表的で複雑な需要も小さな需要の配置によって成り立っている。
機能準備
乱数
乱数を生成するコア機能は、SQL Serverの下にRAND()のシステム関数があり、0から1の間の小数を生成することができます。これを利用して、固定区間[Min,Max]の小数点数を生成できます。Min+(Max-Min)*RAND()、またCHECKSUM(NEWID()も、一連の比較的大きな整数(9桁または10桁が多く)を生成し、ABSを再結合します。生成した乱数の範囲をよく制御することができます。
区間乱数関数
SQLを便利に書くために、あらかじめカスタム関数を作成して、区間乱数を生成します。
リストの選択
少数のエニュメレート・数値から選択されるならば、CHOOSE関数を使用することができる。
大量の候補から選択すると、増加列を含むデータベーステーブルにデータを導入して、量子クエリで選択できます。
製造数SQL
実際の需要はフィールドが非常に多いかもしれませんが、基本的には上記の書き方でパラメータを変更すればいいです。
SQLの機能は結局限られています。基本的には固定リストからランダムに選択するだけでなく、ランダムな数値データを生成するシーンに適しています。
都市名、メールボックス、人名、携帯番号、住所などのデータを大量に生成するには、もっと業務領域の特性に合うデータを作るには、純粋なSQLを使うのはちょっと大変です。次のページでは、pythonのfakerライブラリでテストデータを生成する方法を紹介します。
以上のSql Serverは連続数字を生成して、指定された数字に基づいて操作します。つまり、小編集は皆さんに全部の内容を共有しています。
一、OracleはROWNUMを使用して実現する方式である。
SELECT
ROWNUM number_list
FROM
WHERE ROWNUM <= 10;
二、Sql Serverは上記機能を実現する3つの方法
1.マスターを使う…スパートを使うvalues方式
SELECT
number
FROM
MASTER..spt_values
WHERE
TYPE = 'P'
AND number > 0
AND number <= 10;
spt_valuesはマスターデータベースのシステムテーブルで、numberの数値範囲は0~2047です。
2.String_を使用するSplit関数実現
select row_number()over(order by(select 1)from String_Split(space(6)')
String_SplitはSQLServer 2016の新しい関数であり、この方法は2016および以降のバージョンにのみ有効です。
(私のデータベースバージョンは2008です。この方式は検証されていません。)
3.top+ROW_を使うNUMBER()OVER方式実現
SELECT TOP
10 ROW_NUMBER () OVER (
ORDER BY
(SELECT 1)) number_list
FROM
(SELECT TOP 10 * FROM ) t;
第一の方法はデータベースバージョンに対して要求がないが、値を取る範囲は0~2047に制限がある。
第二の方式はデータベースバージョンに要求があり、2016及びそれ以上である。
第三の方法はデータベースのバージョンに対して要求がないので、表と表のデータ量が生成する数字より大きいなら大丈夫です。
補足知識:データベース生成テストデータ(SQL実現)
需要
プロジェクトではたまにデータを作ってテストすることがありますが、よくあるデータの特徴から、データをテーブルテーブルテーブルテーブルテーブルテーブルにセットします。Xは4つのフィールドを含み、各フィールドの要求は以下の通りであり、5000のデータを作成する必要がある。
以上の需要は非常に簡単に見えるが、代表的で複雑な需要も小さな需要の配置によって成り立っている。
機能準備
乱数
乱数を生成するコア機能は、SQL Serverの下にRAND()のシステム関数があり、0から1の間の小数を生成することができます。これを利用して、固定区間[Min,Max]の小数点数を生成できます。Min+(Max-Min)*RAND()、またCHECKSUM(NEWID()も、一連の比較的大きな整数(9桁または10桁が多く)を生成し、ABSを再結合します。生成した乱数の範囲をよく制御することができます。
区間乱数関数
SQLを便利に書くために、あらかじめカスタム関数を作成して、区間乱数を生成します。
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
ここでまず一つのビューを作成し、関数内で参照すると、SQL Serverは関数体に直接RAND関数を参照することをサポートしていないため、Invalid use of a side-effinecg operator'rand'within a functionをエラーとします。リストの選択
少数のエニュメレート・数値から選択されるならば、CHOOSE関数を使用することができる。
大量の候補から選択すると、増加列を含むデータベーステーブルにデータを導入して、量子クエリで選択できます。
製造数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
説明実際の需要はフィールドが非常に多いかもしれませんが、基本的には上記の書き方でパラメータを変更すればいいです。
SQLの機能は結局限られています。基本的には固定リストからランダムに選択するだけでなく、ランダムな数値データを生成するシーンに適しています。
都市名、メールボックス、人名、携帯番号、住所などのデータを大量に生成するには、もっと業務領域の特性に合うデータを作るには、純粋なSQLを使うのはちょっと大変です。次のページでは、pythonのfakerライブラリでテストデータを生成する方法を紹介します。
以上のSql Serverは連続数字を生成して、指定された数字に基づいて操作します。つまり、小編集は皆さんに全部の内容を共有しています。