SqlServerは、指定された番号操作に従って連続番号を生成します

要件は、sqlserverを使用して、指定された番号とテーブルに従って一連の連続した番号を生成することです。これは、OracleのROWNUMの機能と同様であり、具体的な実装は次のとおりです。

1. Oracleは、達成するためにROWNUMを使用して
1
2
3
4
SELECT
ROWNUMのnumber_list
テーブル名FROM
ROWNUM <= 10。

2つ、SqlServer上記の機能を実現する3つの方法
1. MASTER ... spt_valuesメソッドを使用する

1
2
3
4
5
6
7
8
SELECT
number
FROM
MASTER..spt_values
WHERE
TYPE = 'P'
AND number> 0
AND number <= 10;

spt_valuesはマスターデータベースのシステムテーブルであり、数値の値の範囲は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メソッドを使用して

1
2
3
4
5
6
SELECT TOP
10 ROW_NUMBER()OVER(
ORDER BY
(SELECT 1))number_list
FROM
(SELECT TOP 10 * FROM表名)t;

最初の方法はデータベースのバージョンに要件はありませんが、値の範囲は0〜2047に制限されています。

2番目の方法には、データベースバージョンの要件があります。これは2016年以降である必要があります。

3番目の方法では、テーブル内のデータの量が生成される数よりも多い限り、データベースのバージョンは必要ありません。

補足知識:データベースはテストデータを生成します(SQL実装)

要求する

プロジェクトでテストするためにデータが作成されることがあります。一般的なデータ特性に従って、ここではデータのテーブルTable_Xに4つのフィールドが含まれていると想定します。各フィールドの要件は次のとおりであり、5000個のデータを作成する必要があります。

上記の要件は非常に単純に見えますが、より代表的なものです。複雑な要件も小さな要件で構成されています。

機能的な準備

乱数

数字を作成するコア機能はランダムな数字を生成することです。SQLServerには0から1までの小数を生成できるRAND()システム関数があります。これを使用して一定の間隔で小数を生成できます[最小、最大]:最小+(最大-最小) * RAND()に加えて、CHECKSUM(NEWID())は一連の比較的大きな整数(主に9桁または10桁)を生成し、ABSと連携して絶対値と係数演算を取得することもできます。生成を適切に制御できます。ランダムな数字の範囲がなくなりました。

インターバルランダムナンバー機能

SQLの記述に便利なように、カスタム関数を事前に作成して、間隔のランダムな数値を生成できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 - @ Minと@Maxの間の戻り値
BEGIN
DECLARE @Result DECIMAL(22,5 );
SELECT @Result = @Min +(@ Max- @ Min)* RandValue FROM vwRand;
RETURN @Result
END
GO
ここでは、SQL Serverが関数本体で直接サポートしていないため、ビューが最初に作成され、次に関数本体で参照されます。 RAND関数を引用すると、エラーが報告されます。関数内での副作用演算子「rand」の使用が無効です。

リストの選択

少数の列挙値から選択する場合は、CHOOSE関数を使用できます。

多数の候補から選択する場合は、自動インクリメント列を使用してデータをデータベーステーブルにインポートし、スカラーサブクエリで選択できます。

SQLを数える

1
2
3
4
5
6
SELECT TOP 5000
ABS(CHECKSUM(NEWID()))%100 + 1 AS Col_A
、dbo.Random_Rangehttps://blog.51cto.com/14830013/2549657(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
sys.all_columns FROM
说明

実際の要件には多くのフィールドがある場合がありますが、基本的には上記の書き込み方法を使用してパラメーターを変更できます。

結局のところ、SQLの機能は制限されており、基本的には固定リストからランダムに選択してランダムな数値データを生成する場合にのみ適しています。

都市名、メールアドレス、名前、携帯電話番号、住所、その他のデータのバッチ生成など、ビジネス分野の特性に沿ったデータを作成する場合、純粋なSQLを使用するのは少し難しいでしょう。次の記事では、pythonの偽造ライブラリを使用してデータを生成する方法を紹介します。テストデータ。

上記のSqlServerは、

おすすめ

転載: blog.51cto.com/14308901/2550968