【SQLServer】テーブルからランダムにN件取得する方法

カラムPKColumn1を元に取得したチェックサム値に乱数をかけて、ランダムに行を抽出する。
抽選機能などに便利。

SELECT TOP N
BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND() AS SortNo
, *
FROM TABLE1
ORDER BY CAST((BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND()) AS int)


マイナスの値を取得したくない場合は、ABS関数を使う

SELECT TOP N
ABS(BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND()) AS SortNo
, *
FROM TABLE1
ORDER BY ABS(BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND())


整数の値を取得したい場合は、int型に変換する

SELECT TOP N
CAST(BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND() AS int) AS SortNo
, *
FROM TABLE1
ORDER BY CAST(BINARY_CHECKSUM(PKColumn1, NEWID()) * RAND() AS int)


人気ブログランキングに参加しています!ぜひクリックしてね!→


posted by aco | Comment(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

【SQLServer】既存のパブリケーションに、アーティクルを追加する

SQL Server Management Studioを使う方法もあるんだけど、今回はスクリプトでやる方法を簡潔に。

手順は以下の3ステップ。
1.アーティクルの追加
2.初期スナップショットの作成
3.サブスクリプションを同期

具体的には、パブリッシャのパブリケーションデータベースで、下記を実行する。

DECLARE @publication	sysname = N'PubXxxxxx'
DECLARE @table sysname = N'TableXxxxxxxx'
DECLARE @schemaowner sysname = N'dbo'

-- 1.アーティクルの追加
EXEC sp_addarticle
@publication = @publication,
@article = @table,
@source_object = @table,
@source_owner = @schemaowner,
@schema_option = 0x000000000803509F,
@type = N'logbased'

-- 2.初期スナップショットの作成
EXEC sp_startpublication_snapshot @publication = @publication

-- 3.自動でサブスクリプションが同期された


■これがうまくいった環境とか設定は以下
・トランザクションレプリケーション
・プッシュサブスクリプション
・パブリケーションのあるSQLServerバージョン:10.50.1600.1
・サブスクリプションのあるSQLServerバージョン:10.50.4297.0

■参考にしたのはコチラです。
https://msdn.microsoft.com/ja-jp/library/ms152493(v=sql.105).aspx

人気ブログランキングに参加しています!ぜひクリックしてね!→
posted by aco | Comment(0) | SQL Server | このブログの読者になる | 更新情報をチェックする

【SQLServer】ダーティーリードって何?

ひとことで言うと、他プロセスにて実行中のトランザクションでコミットされていないデータの検索をすること。
ちょっと何言ってるか分からない、、って人にはごめんなさい。

なるほど!って人は、以下やりかた。

SELECT * FROM Table01 WITH(NOLOCK)


ポイント:
WITH(NOLOCK)←ヒント句にNOLOCKを指定する。

これでコミットされていないデータも検索できる。
重い処理をやっている時、「どこまでできたかにゃ?」とチラ見的に実行することがあります。

ちなみに、NOLOCKだからって絶対ロックしないわけではないので注意。
これはまた、別のお話。

人気ブログランキングに参加しています!ぜひクリックしてね!→
posted by aco | Comment(0) | SQL Server | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。