問題タブ [newid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tsql - ランダム T-SQL の最適化
最初に: 私が無作為に選ぶ方法についてどう思いますか? この方法はあまりにも貧弱ですか?
テーブルTABLE_Aがあります:
id 列には、たとえば「zxg-76354GH-34347」のように、英数字の値も含めることができます。さて、私は 3060 レコードを持っています。
詳細:
もしも:
ランダム化する私のストアドプロシージャ:
そのストアド プロシージャを何度もまたは「n」回呼び出します (これを行う必要があります)。
問題は、常に「7」で始まる 4 行または 5 行を取得することです。「5」で始まる行が 3 行または 2 行になることもあります...繰り返しを避けたいと思います。どんな提案でも大歓迎です。
ありがとう。
sql - CHECKSUM(NewId())は行ごとに複数回実行されます
私が奇妙なことに出くわしたコードをレビューしたとき、誰かがあなたがABS(CHECKSUM(NewId())) % N
0からN-1までの乱数を取得するために使用できることを読んでいました(RAND()
行ごとには発生しません)が、彼らは実際にコードをテストしなかったと思います(テーブル変数を使用して簡略化され、実際のコードはTOP 1 country
以下の問題を誤って回避しました):
実行すると、次のエラーが発生します。
サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。
私の最初の質問は、サブクエリが複数の値をどのように返すことができるかということでした。そして、それが時々まったく価値を返さないのはどうしてですか?(私がSOで尋ねている質問ではないことに注意してください)テスト者:
しかし、次のことが何度実行されても、次のようになります。
返される結果は常に1,2,3です(これは、プログラマーがコードを作成するときに使用した「テスト」でした)
このすべてから、これはすべての行ではなくすべての比較に対して再実行されているためだと思います。誰かがこれを確認し、この動作を説明するための適切なリンクを提供して、彼に指摘できるようにすることができますか?
sql-server - NewID()-前/次のGUIDを公開する可能性が高いですか
GUIDは理論的には一意であり、衝突の可能性は非常に低いことを私は知っています。ただし、正しく理解していれば、使用しているアルゴリズムに応じて、生成に使用したコンピューター上の情報からシードされているため、その一意性の一部を利用できます。
GUIDが与えられた場合、ユーザーがテーブル内の他のGUIDを推測できる可能性はどのくらいありますか?
例として、購読解除機能を備えたニュースレター購読者がいる場合は、example.com /subscriber / unsubscribe/{id}に投稿するだけです。
整数のアイデンティティでは、これは明らかに悪い考えです。ID 1000のユーザーは、IDを推測することで、データベース全体を数秒で登録解除できます。
ID列がnewid()に初期化されたGUIDである場合、ユーザーが自分のIDを知っていれば、正しいIDを推測できる可能性はどのくらいありますか?
sql-server-2008 - 大きなテーブルのランダムサンプルを更新する
SQL Server 2012を使用すると、700万行のテーブルがあります。PK列はGUID(COMB GUID)です。クエリのパフォーマンスをテストしようとしていますが、最初にデータのランダムサンプリングを更新する必要があり、50,000行の列値(PKではない)を変更したいと思います。
NEWID()で上位50,000の順序を選択するには時間がかかりすぎるため、SQLServerがテーブル全体をスキャンしていると思います。TABLESAMPLEの構文が正しくないようです。空のセットが返されます。
これを機能させるための最良の方法は何ですか?
sql-server - newid()を使用してストアドプロシージャ変数に値を割り当てる方法は?
新しいGUIDを生成し、その値をに割り当てようとしていますNewReportID
。@NewReportID
ただし、手順のすべての場所をそれで置き換えるnewid()
と、各行に新しいGUIDが生成されるかどうかはわかりません。
GUIDを1つだけ生成し、NewReportIDにGUIDの値を割り当てるにはどうすればよいですか?
私は変数宣言を試しました@NewReportID varchar(50)=newid()
が、それは私に多くのエラーを与えました。
sql - あるテーブルからランダムなレコードを見つけて、このレコードで別のテーブルに参加する必要があります
背景:現在、簡単なオンライン クイズを開発しています。ユーザーが簡単な質問に答えた後、ユーザーは小さなタスクを実行して勝つ可能性を高める機会を得ます。
ユーザーが獲得したすべてのロットは別の行に挿入されるため、「ランダムな」ロットを見つける必要がある場合、勝つ可能性が高くなります (間違っている場合は修正してください)。
ロット テーブルのサンプル データ:
これは、ParticipantId 2 の参加者が 3 つのロットを持っていることを意味し、したがって、他の参加者と比較して統計的に勝つ可能性が高くなります。
私がしなければならないこと:勝者を引く必要があるときは、くじの表からランダムにくじを選びます。この後、勝者に関する情報を見つける必要があります。
現在、次の SELECT を使用しています (SELECT の改善に関するコメントを歓迎します)。その後、コードの後半で、ユーザーの情報を含む別の SELECT を使用しています。
私はこれについて頭を働かせることができません。ランダムなロットが必要で、このランダムなロットから同じ SELECT でユーザーの情報を取得する必要があります。何か案は?
sql - ユーザー定義関数でnewidを使用するテーブルへのSQL挿入
重複の可能性:
SQL サーバー関数内の newid()
テーブルを調べる関数からのパラメーターに基づいて値を返す必要があり、null の場合はこのテーブルに新しいレコードを挿入します。残念ながら、私はこの面白いエラーを取得しています: 関数内での副作用演算子 'newid' の無効な使用
ターゲット テーブルを変更できない場合の回避策はありますか? SQL Server 2008 に取り組んでいます。
sql-server - TSQL は newid を decimal(38,0) に変換します
newid()出力を 10 進数にキャストまたは変換したい(必要最小限のスペースで)
これまでのところ、私はこれをしました:
しかし、私はこのエラーが発生しています:
データ型 varchar から数値への変換中にエラーが発生しました。
たくさん検索しましたが、イライラして、助けを求めてここに来ました。
よろしくお願いします。
更新: decimal(8,0) が decimal(38,0) になり、それでも同じエラーが発生します。
sql-server - CTE で NEWID() を使用して行のランダムなサブセットを生成すると、奇妙な結果が生成されます
ストアド プロシージャに SQL を記述して、データセットをレポート対象の限られたランダムな数の行に減らしています。
Group
レポートはof で始まり、Users
必要なランダム行の総数を指定するためにフィルタが適用されます ( @SampleLimit
)。
目的の結果を得るために、まず CTE (一時テーブル) を次のように作成します。
top(@SampleLimit)
適用されたgroup by UserId
(UserID が複数回表示されるため)order by NEWID()
結果をランダムに並べる
SQL:
この結果セットを取得したら、UserId がNOT IN
前の手順で作成した CTE である結果をすべて削除します。
私が抱えている問題は、時々、指定されたよりも多くの結果が得られること@SampleLimit
と、期待どおりに機能することです。
SQL を分割してアプリケーションの外部で実行しようとしましたが、問題を再現できません。
私がやっていることに何か根本的に間違っていることはありますか?
完全を期すために-以下の回答に基づいてリファクタリングされたソリューション:
sql - ランダムな日付を単一の列に更新する (日付が繰り返される)
dpm_dateto
さて、最初に特定の日付の日付整数を特定します。それ以降は、ランダム値を列に更新する必要があります。
クエリ:
結果:
dpm_dateto
ここで、以下のクエリを使用して列を更新しようとします。
結果:
ただし、問題は、dpm_dateto
列の個別の値がそれぞれ同じ日付で更新されることです。私はこれについて頭を悩ませることができません。親切に助けてください。