• 締切済み

SQLServerで一意の項目がない場合の行番

こんにちは。 SQLServerで一意の項目がある場合はROW_NUMBERを使用すると思うのですが、 もし一意の項目がない場合は、どのようにテーブルやビューに行番号を ふればよいでしょうか。 お手数ですが教えていただけると幸いです。 よろしくお願いいたします。

みんなの回答

noname#223464
noname#223464
回答No.2

質問の意図がちょっと良く分からないので検討ちがいかもしれませんが・・・。 ROW_NUMBERを使用するのであれば、普通にOVERの中でORDER BYで並び替えれば良いのでは? テーブルに行番号のような連番を入れたいのであれば、2008R2までだったらIDENTITY+ユニークでも良いけれど、2010以降だったら強制シャットダウンしてしまった時の仕様が変わってる(型によって+1000とかされ気持ち悪い)から、計算できる型か、もしくは文字列型(文字数固定がおすすめ)で、現在のMaxを取得してその次の値を設定するのが良いのではないでしょうか?

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

int型の列を作って、IDENTITYの指定で「IDである」を「はい」にして、「IDの増分」を「1」にするといいかと思います。

関連するQ&A

  • accessからsqlserverへの移行について!

    accessからsqlserverへの移行について! accessからsqlserverへの移行することにしました。 問題が起きないよう先日質問させて頂いた内容でもう少し詳しく教えてください。 以下が前回の内容です。編集をしています。 accessの処理はそのままでDBをsqlserverからODBCでリンクしようと思います。 現在の運用環境はサーバは使用せずファイル共有で4台のPCで運用しています。OSはWinXPです。 現在のマシンは4台とも3年前に購入したPentiumの2.40GHzメモリは2GBです。 今回も専用サーバは使用せず現在のPCにSQLServer2005無料を使用と思っています。 データ件数は約3万件で必要な項目にはインデックスを付けてリレーションも張っています。 計算項目が多く定義と参照項目含め約300項目となり、クエリーをNo.1とNo.2の2個のに分けています。 クエリーはデータやマスタとリンクしています、No.2はNo.1の式の値を使用し計算しています。 計算式は複雑なものや計算結果⇒計算結果⇒・・・・となっています。 入力画面はレスポンスが遅く、単票印刷で約30件の処理に5~10分位かかるものがあります。 印刷はワークテーブルに必要項目を出力する等をやって見ましたが改善しませんでした。抽出に時間がかかっています。 DBをsqlserverに移行することで処理速度の改善はどの程度見込めるのでしょうか。 計算項目数が多いのであまり見込めないのではと思っています。 頂いた回答です。 >それら複数のテーブルをサーバーに置いてリンクテーブルにし、従来通りのクエリーをそのまま使った場合は、確実に遅くなります。 ?これはsqlserverのデータをリンクしクエリーはそのままにしたら遅くなるのでしょうか。  対象方法はsqlserverにクエリーをVIEWで定義すればいいでしょうか。対処方法を教えてください。 >高速化にはそれなりのテクニックが必要です。 ?参考になるサイトがあれば教えてください。 >やはり抽出に時間がかかりあまり改善しませんとのことですので、計算式なしで[select * from ...等]にしてみて流してみてください。 ?早くなった場合必要な値はどの様にして取得しているのでしょうか。 >やはり、エンジンを置くPCの性能がカギで、これが遅いのでは期待はできないとしたものです。聞けば同じマシンで代替するとのことなので、あまり期待しない方がよい と思います。 ?サーバを設置しサーバOSにするとにより処理速度はかなり速くなるのでしょうか。  専用サーバも高価なものは買えないので現在のPCと同等程度の性能となります。 よろしくお願いします。

  • SQLServerの行ロック

    VB6及びSQLServer2000で開発を行っているのですが 1つのテーブルに対して一度に複数の行ロックを 行う事が出来ずに困っています。 通常と違う方法が必要なのか、何か注意点があるのでしょうか? よろしくお願いします

  • accessでのリンクテーブルの更新

    いつもお世話になっております。 AccessからSQLServerのテーブルにリンクをはっています。 このリンクテーブルをupdate文で更新したいのですが、 「更新可能なクエリであることが必要」とでています。 以前にも類似の質問をしました。 http://okwave.jp/qa/q6581636.html しかし、いったん解決したのですが、別のところで同様の現象が でてしまいました。 調べると、リンク先のSQLServerのテーブルにはキーが存在していて、 Access側からリンクするときには自動的に一意設定されてしまいます。 発行したいupdate文はこのキーとは別の項目が一意になっていないと だめな条件付けがされているのです。 リンクをはるときに、SQLServer側ですでに設定されているキーとは 違った項目を一意項目として選択する方法はあるのでしょうか? 調べてみると、まったくキーのないテーブルをリンクするときは当然、 一意な項目を選べるのですが、キーがすでにある場合はだめな ようでした。 毎度のことでお手数なのですが、どうかよろしくお願い申し上げます。

  • 重複行を表示するビューの作成

    お世話になります。 SQLServerにでテーブルAの重複行を表示させるビューBを作りたいのですが、ビュー作成ヴィザ―トでの条件式がうまく書けません。Accessのクエリだと標準機能でできちゃうのですが、SQLServerはSQL文がうまく書けないので、よろしくお願いします。 ちなみに使用しているのはSQLServer2000です。

  • 数値の入った一番最後の行番号を求めたい

    数値の入った一番最後の行番号を求めたい     A  B  C  D 101    1     ■ 102  103    1 104    1 105 106 107    1 108 109 上のようにB列に1という数字がランダムに入っているとします。 例えばD101のセルに B列に「1」が入っている一番下の行番号(上の場合107) を求める関数はどのようにやれば良いのでしょう? 初心者の為ROWやROWSを使用して解決できなかったのですが、 VBAではなく関数でご教授いただければ幸いです。

  • SQLServerでのロックについて

    SQLServerであるテーブルを行ロックしています。 (select * from テーブルA with (UPDLOCK) where KEYCD = 1) 行ロック実行時に、他のマシンが既にロックしていた場合、それをエラーとして返す方法はありますでしょうか? (Oracleでいう"nowait"のようなもの) 最近SQLServerをやりはじめたばかりの超初心者です。 よろしくお願いします(T_T)

  • SQLServerでViewの参照・・・

    SQLServer同士のサーバで、別のサーバーの特定のViewを参照する事ができますか? <例> Aサーバーで、BサーバーのViewを参照 Select * From [B].[aaa].dbo.v_xxxx 上記のようなことがしたいのです。 データの内容上、他のテーブル・ビューは参照させたくありません。 可能な場合、お手数ですがその方法もご教授頂けるととても助かります。 宜しくお願い致します。

  • accessからsqlserverへの移行について!

    accessからsqlserverへの移行について! 現在accessでシステム運用しています。 処理に時間がかかるのでDBのみsqlserverへの移行を検討しています。 時間がかかる原因は計算項目が多く計算の為に必要な定義項目と参照項目で計算項目を含めると約300項目となります。 この為、クエリーをNo.1とNo.2の2個のクエリーに分けて対処しています。 クエリーNo.2はNo.1の式の値を使用し更に式で計算しています。 クエリーで定義している計算式も条件が複雑なものもありさらに計算結果⇒計算結果⇒・・・・となっています。 この様な内容なので入力画面はレスポンスが遅く印刷は5~10分位かかるものがあります。 とりあえず印刷処理を早くしたいと思い一旦ワークテーブルに必要項目を出力する等をやって見ましたがやはり抽出に時間がかかりあまり改善しません。 データ件数は約3万件なのでデータ件数は問題ないと思っています。 accessの処理はそのままでDBをsqlserverからODBCでリンクしようと思います。 DBをsqlserverに移行することで処理速度の改善はどの程度見込めるのでしょうか。 計算項目数が多いのであまり見込めないのではと思っています。 accessからsqlserverへの移行された方でどの位改善されたのか教えて下さい。 現在の運用環境はサーバは使用せずファイル共有で4台のPCで運用しています。OSはWinXPです。 今回も専用サーバは使用せず現在のWinXPのPCにSQLServer2005無料を使用しようと思っています。 又、accessの処理で他に早くする方法がありましたら教えて下さい。 よろしくお願いします。

  • SQLServerで項目数が異なるCSVファイルを取り込む方法

    (先ほど古いIDで登録してしまったため、削除して新しいIDで登録しなおしました) お世話になります。 SQLServer2005 を使っています。 行によってデータ型も項目数も異なる CSV ファイルがあり、それを テーブルに読み込みたいと思っています。 (POSのデータです) サイズが比較的大きいので、BULK INSERT を使いたいと思い、 以下のように記述してみました。 BULK INSERT T_hoge FROM 'c:\hoge.csv' WITH (  DATAFILETYPE = 'char',  FIELDTERMINATOR = ',',  ROWTERMINATOR = '\n' ) CSV項目数が可変なので、取り込む側のテーブルの項目数に 余裕を持たせ、1行1レコードで取り込みたいのですが、 改行を無視して取り込まれてしまうようです。 項目数可変のCSVを取り込む方法があれば教えてください。 宜しくお願い致します。

  • ACCESSでの行番号の自動採番

    いつもお世話になっています。 MSACCESSで、以下のようなしくみを作ろうとしています。 (例) 親テーブル 伝票番号(オートナンバー) 担当番号、販売先番号・・・・ 子テーブル 伝票番号(オートナンバー) 行番号、商品番号・・・・ (やりたい事) 項目"伝票番号"はリンクさせて同じ値とする。 項目"行番号"は親レコードの値が増えるたびに1から増加させていくようにしたい。 伝票番号 1 行番号 1 伝票番号 2 行番号 1 伝票番号 2 行番号 2 伝票番号 2 行番号 3 伝票番号 3 行番号 1 のように。 なにぶん初心者なものでマニュアル等調べて見ましたがうまくいきません。よろしくお願いします。