SQL Server
- SQLテーブルをインデックスしてSELECTを高速
テーブルのおインデックス項目はSELECTすると検索が早いのですが、 インデックスではない項目をWHEREすると時間がかかります。 そこでテーブルカラム全部をインデックス化することでの メリット、デメリットは何でしょうか?
- ベストアンサー
- SQL Server
- ENTRE
- 回答数2
- SQLServer2008のSQLを可変にする方法
SQL初心者です。 以下の3つのテーブルを条件によって結合したり、しなかったりを行いたいのですが、そもそもSQLServerのストアドプロシージャでそれが実現出来るのかもわかりません。。。。 どなたかご教授をお願い致しますm(_ _)m 使用するテーブルは以下の3つです。 1.ITEM_MST 項目: ITEM_CD, ITEM_NM, BUMON_CD 2.BUMON_MST 項目:BUMON_CD, BUMON_NM, CLASS_CD 3.CLASS_MST 項目:CLASS_CD, CLASS_NM, LOCAL_CD 実行するSP------------------------------------------------ test_SP( @引数1 , @引数2 ) SPの中で実行されるSQL-------------------------------------- SELECT ITM.ITEM_CD, ITM.ITEM_NM, BMN.BUMON_NM FROM ITEM_MST ITM INNER JOIN BUMON_MST BMN ON BMN.BUMON_CD = ITM.BUMON_CD WHERE ITM.CD = @引数1 ------------------------------------------------------------ 上記のSQLに対して、もし「@引数2 = 1」だったら CLASS_MSTテーブルを結合してLOCAL_CDの昇順で表示する以下のSQLを追加して表示させたいです。 INNER JOIN CLASS_MST CLS ON CLS.CLASS_CD = BMN.CLASS_CD ORDER BY CLS.LOCAL_CD そもそも引数によって、SQL文の結合するテーブルを変更する事は可能なのでしょうか? 調べ方が悪いのか、ネットで検索しても解決方法がわかりませんでした。。。 どうかご教授お願い致します。
- 締切済み
- SQL Server
- a_ta_ka
- 回答数1
- 64bitのSQL Server 2005
SQL Server 2005 Express Edition Service Pack 4をWindows8(64bit)が入ったPCにインストールしようとしています。 32bitと64bitの両方がサポートされたSQLEXPR_JPN.EXEをダウンロードし、インストールを実行すると、64bitマシンなのに、なぜかデータベースサービス等全てProgram Files (x86)配下にインストールされます。 以前、同じくWindows8(64bit)が入っている別マシンにSQL Server 2005 Expressをインストールしたことがありますが、その時はProgram Files配下にインストールされ、64bitとして認識されたようです。 ちなみに、SQL Serve 2008、2008 R2、2012等は、きちんと64bitとしてインストールされております。 64bitのみのインストーラーや、64bitとしてインストールというインストールオプションがあれば良いのですが・・・ 同じ64bitのWindows8にインストールしようとしているのに、なぜ、このような違いがあるのかわかりません。 どなたか、正常に64bitとしてインストールできる方法をご存知であれば教えてください。
- ベストアンサー
- SQL Server
- hiro_033
- 回答数2
- SQL SERVER で大量データの削除
delete from table1 where id = 1; delete from table1 where id = 2; delete from table1 where id = 3; もしくは、 delete from table1 where (id = 1) or (id = 2) or (id = 1) という具合のSQLを実行します。 条件は大体20万件程度です。 こちらを実行するとかなり遅いので、 なんとか一括で早く実行する方法はないものでしょうか? 今のところ、プログラムの都合上、プロシージャの中で行なってます。 PROCEDURE UPDATE(@DELSQL nvarchar(max)) EXEC (@DELSQL) @DELSQLに上記SQLが入ります。 大量のINSERTの時は、BULK INSERTのようなやり方があり、 回避できたのですが、困ってます。 どうかよろしくお願いします。
- ベストアンサー
- SQL Server
- boooone
- 回答数1
- SQLServer Insertが遅い
1台のPCで発生している問題です。SQLServerで、Select命令は即戻ってくるのですが、Insertの処理は遅く、1件に2秒くらいかかっており、理由が分からず困っています。他のPCからは、SelectもInsertも問題ありません。 <SQLServer環境> ・バージョン:SQLServer2005 Express ・OS:WindowsXP ・ポート番号:1433固定 <クライアント環境> ・OS:Windows7 ※問題の発生しているPCも、問題の発生しないPCも、共に同じOS・同様のスペックです。 <当方でテストした内容> ※全テストで、実行前にテーブルはtruncateし、トランザクションは未使用で実行しています。 (1) 1件づつ Insertし、計3000件を登録 →問題発生PCでは、1件に2秒くらいかかる。問題なしPCでは、3秒くらいで全て終了 (2) sqlBulkCopyを利用し、配列変数に格納したデータ計3000件を一括登録 (配列格納後に測定) →問題発生PCでは、15秒で30件くらい。問題なしPCでは、3秒くらいで全て終了 (3) bcpin で、テキストファイルの計3000件を登録 →問題発生PCでは、30秒くらい経っても開始されず。問題なしPCでは、1秒くらいで全て終了 (4) Select命令発行 →問題発生PC、問題なしPC 共に、1秒くらいで全て終了。 (5) bcpout で、テーブルより計3000件をテキストファイルに落とす →問題発生PC、問題なしPC 共に、1秒くらいで全て終了。 bcpinについては、ためしに、 -S IPアドレス\Express,1433 と、ポート番号を付けて実行もしてみましたが、結果は同じで、問題発生PCでは、開始に時間がかかり、問題なしPCでは即終了しました。 以上の結果より、問題なく動くクライアントもあるため、Server側の問題ではなく、問題発生クライアントPCの環境に問題があるのではないかと思っていますが、SQLServerの接続、Selectやbcpoutには問題なく、Insertやbcpinといったデータ挿入のみが遅いという点で、何に問題があるのか、さっぱり検討がつきません。 このような場合、どういった点を調査したらよいのでしょうか?
- 締切済み
- SQL Server
- haribote
- 回答数2
- パスワードをsqlスクリプトで変更する
agusupです。 SQLServerパスワードをsqlスクリプトで変更する方法を教えてください。 :::::::::::::::::::::::::以下sqlスクリプトで記述します。 USE [common] GO /****** 変数の宣言 ******/ declare @PASSWORD as char(25) /****** テーブルのパスワードを変数に取込む ******/ SELECT @PASSWORD = [password] FROM [common].[dbo].[users_pass] where [ID] = 'testuser' /****** testuserのパスワードを変数@PASSWORDに変更する ******/ ALTER LOGIN [testuser] WITH password = @PASSWORD GO 以上。 この内容でユーザのパスワードを変更できると思ったのですが、 ALTER LOGINを実行すると'@PASSWORD' 付近に不適切な構文があります。というエラーメッセージが発生します。 因みに以下の内容を実行すると正常終了します。 USE [master] GO ALTER LOGIN [testuser] WITH password = 'mylogin' GO これらのことからpassword = 変数@PASSWORDをどのようにしたら実行できるのか教授願います。 宜しくお願いします
- 締切済み
- SQL Server
- agusup
- 回答数1
- SQLサーバー接続について
DB初心者です。 ODBCからSQLサーバーへのアクセスを設定したく、奮闘しておりますが うまくいかず困っております。 先方から支給されたのは、 DB名、ID、パスワード、ホスト名、ポート番号、MySQLのバージョン5.0.90で、 その通り設定したつもりが、以下のようなエラーが出てソース作成できません。 --- 接続できませんでした。: SQLState: '01000' SQL Server エラー: 11001 [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionOpen(Connect()). 接続できませんでした。: SQLState: '08001' SQL Server エラー: 6 [Microsoft][ODBC SQL Server Driver][TCP/IPSockets]指定された SQL Server が見つかりません。 --- エラー番号で検索してみても原因がわからず・・・ 詳しい方いらっしゃいましたらお願いいたしますm(__)m
- ベストアンサー
- SQL Server
- piyodama
- 回答数1
- 特定条件でWHERE句の条件を変更したい
@jouken int @sql varchar(MAX) @select varchar(MAX) @where varchar(MAX) set @select = 'select * from table1' set @where = ' where case when @jouken = 0 then 'field1 = 1' when @jouken = 1 then 'field1 = 1 or field2 = 1' when @jouken = 2 then 'field1 = 1 or field2 = 1 or field3 = 1' end ' set @sql=@select+@where exec(@sql) 上記のような文字列の組み合わせでの作成でやりたいことはできたのですが、 こちらを直接SQLの中でやりたいのです。 以下の文は機能しません。 select * from table1 where case when @jouken = 0 then field1 = 1 when @jouken = 1 then field1 = 1 or field2 = 1 when @jouken = 2 then field1 = 1 or field2 = 1 or field3 = 1 end ご教授の程、よろしくお願い致します
- ベストアンサー
- SQL Server
- boooone
- 回答数1
- ODBCでSQLServerテーブルが参照できない
自宅のパソコンでSQLServerをインストールし、 それにデータベース・テーブルなどを作成し、VisuualStudioでC#/ASP.NETのアプリを開発しています。 今回、データベースのマスタをメンテナンスするツールをAccessで作成したいので ODBC接続の設定を行い、 Access側からリンクテーブルでSQLServerのテーブルを参照したいのですが SQLServverで作成したテーブルが一覧に一切表示できず、何かシステムテーブルのようなものだけが表示されます。 会社では上記のことが問題なく行えました。 会社で違うのは、SQLServerは別のサーバーマシン内にある点です。 自宅の場合、データベースサーバーも同じパソコンのため上手くいかないのでしょうか。 自宅でも効率よく作業したいので同じように環境構築したいのです。 何か、原因等わかる方がおられましたら ご教授願います。
- ベストアンサー
- SQL Server
- noname#258812
- 回答数1
- テーブルAとBをくっつけてOrderBy
SQLで テーブルAとテーブルBがあり、 AとBの構造はほぼ同じとします。 Selectで引用する際に、 seelct * from (A + B) みたいなAとBをくっつけて、 あるカラムをOrderByしたいと思っております。 いったんTempテーブルなどに落とし込むなども考えましたが、 スマートではなく、時間もかかることなので、 1クエリで取得することは可能でしょうか?
- ベストアンサー
- SQL Server
- ENTRE
- 回答数2
- ペアで削除する場合について
お忙しいところ恐れ入ります。どう抜けばよいのか分からずご質問させていただきます。 環境:Windows 2008 server & SQL2008Server std sp2 以下のtblがあるとします。id(var), product(var), price(int)とします。 id, product, price A, オレンジ, 1000 A, レモン, 2000 A, レモン, -2000 B, バナナ, 1500 B, バナナ, -1500 B, りんご, 3000 B, グレープ, 2000 C, 梅干し, 1000 C, 抹茶, 2000 以下のようなtblを作りたいと思います。 id, product, price A, オレンジ, 1000 B, りんご, 3000 B, グレープ, 2000 C, 梅干し, 1000 C, 抹茶, 2000 以下のようにマイナスとなっているIDごとのペアを削除したいのです。 A, レモン, 2000 A, レモン, -2000 B, バナナ, 1500 B, バナナ, -1500 条件:上記の例で示しますとマイナスのついたレコードがあった場合、その上は必ず同じ id, product, プラスの金額であります。 なるべくdeleteを用いずにselectでしたいと考えてましたが、力不足でわかりません。 何卒、よろしくお願い申し上げます。
- ベストアンサー
- SQL Server
- koguma_01
- 回答数1
- SQL(SELECT文)を教えてください
SQL Serverを勉強中です。 以下のようなテーブルに、同一の日付に複数の名称・値のセットが存在します。 Date(日付) Name(名称) Value(値) 20130101 a 10 20130101 b 20 20130101 c 30 20130202 a 5 20130202 b 10 20130202 c 15 このデータを、SQLのSELECT文で取得し、以下のような表を作りたいと考えています。 a b c 20130101 10 20 30 20130202 5 10 15 行が日付、列が名称になっています。 このように取得できるSQL文を教えてください。よろしくお願いします。
- ベストアンサー
- SQL Server
- mokiti3
- 回答数2
- GRANTの連続発行
SQLServer2008でpublicというデータベースロールに権限を与えたいのですが、下記を一個一個実行するといけるのですが、連続して実行はできません。 USE master; GRANT CREATE TABLE TO public; GRANT CREATE VIEW TO public; 権限もDBもたくさんあるので、これを一々一個一個実行していくのは得策ではありません。ほかのSQLは連続実行できるのに、なぜこれだけできないでしょうか。方法教えてください。お願いします。
- ベストアンサー
- SQL Server
- noname#189001
- 回答数1
- 'internal' のシステム メモリが不足
Winows 7 Homeで SQL SERVER 2012 EXPRESS EDITIONを使用しています。 フィールド数は60程度のテーブルに 30,000件程度のInsert文を発行したところ、 「このクエリを実行するには、リソース プール 'internal' のシステム メモリが不足しています。」 というメッセージが出力され、処理が完了しませんでした。 どれくらいだったら、いけるか計測したところ、16,000件までは完了するのですが、 以降は同様のメッセージが出力されます。 クエリは下の文のような具合です。 INSERT INTO table1 (aa,bb,cc..) VALUES('あいう','かくく','さしす'); こちらのURLのように http://www.junmt.info/article.php/20100926164914963 INSERT INTO table1 (aa,bb,cc..) VALUES('あいう','かくく','さしす') ; とやってみましたが、ダメでした。 最大90,000件程度あるので、すごく困っています。 おわかりになる方どうか解決法を教えて下さい。
- ベストアンサー
- SQL Server
- boooone
- 回答数1
- SQL server 2012のライセンスに関して
SQL server 2012のライセンスとEditionに関する質問です。 Windows7のマシンをデータベースサーバとし、Windows7のマシン2台を クライアントとして使用する小規模なシステムを構築しようとしています。 Windows7マシンはCPUがCoreTM i5-3470程度の今時の法人用モデルの PCを3台とも使用します。 また、SQL server 2012はStandard Editionの使用を予定しております。 そこで質問ですが、 ・この場合、どの製品を購入するのが安価で済ませられるのでしょうか? サーバーライセンス×1とCAL×2でいいのでしょうか? ・稼動後、もし、データベースサーバが、Windows server 2008R2(2CPU)と なった場合、Windows7のサーバライセンスをアンインストールし、新しい サーバにインストールし直せば使用できるのでしょうか? それとも、サーバライセンスの追加購入かコアパックの購入が必要でしょうか? ・データベースをSQL server 2008R2で使用したい場合、購入するディスクキットを SQL server 2008R2用を購入すれば、SQL server 2008R2 Standard Edition として、使用できるのですか? 以上、よろしくお願い致します。
- ベストアンサー
- SQL Server
- kaki1015
- 回答数1
- SQL SV2K select結果の置換について
お世話になります。 下記、置換前のSELECT結果を 置換後のようにしたいですが、 方法が考え付きません。 できればSQL(ストアド)のみで実行したいのですが スキル不足です。 お手数ですが、ご教授頂きたく宜しくお願い致します。 条件は、B_NOの”N002"が同一のバッチでハイフン以降が 枝番で、その数は、固定では、なくNです。 "N002"のグループ内に"N"が存在したら"P"に置換したいです。 OS:WIN 2003SERVER DB:SQL SERVER2000 SP4 置換前 REC_NO,B_NO,TYPE R001,N001-1,P R002,N001-2,P R003,N002-1,N R004,N002-2,N R005,N002-3,P R006,N003-1,N R007,N003-2,P R008,N004-1,N R009,N004-1,N 置換後 REC_NO,B_NO,TYPE R001,N001-1,P R002,N001-2,P R003,N002-1,P R004,N002-2,P R005,N002-3,P R006,N003-1,P R007,N003-2,P R008,N004-1,N R009,N004-1,N
- ベストアンサー
- SQL Server
- 2595harupon
- 回答数2
- 100万件レコードdelete
お世話になります SQL Serverで、 100万件のレコードを削除したいのですが どのような方法が効率よいでしょうか また、メモリ負荷など、クライアント側から分かるような実行計画とかは ありませんでしょうか? 1.100万件を1回でdelete 2.100万件を複数回に分けてdelete 3.100万件を1行ずつキー指定でdelete(deleteを100万回実行) 100万件deleteしてる場合も、他処理でレコードが登録、更新される可能性が高いため、 そちらの処理がタイムアウトなどのエラーにならないようにしたいです 詳しい方に聞いたところ、 delete発行する際に、メモリにアクセスしてるので、 3だとそれが単純計算で100万倍になるので、負荷が高いのでは? という事でした。 ご教授の程、よろしくお願い致します
- 締切済み
- SQL Server
- ahiru225
- 回答数3
- mysqlの容量とサーバーの負担の関係
現在、某共有レンタルサーバーの契約を考えております。 そこのレンタルサーバーではmysqlが100Mを超える場合は動作が遅くなる可能性があるということをその会社のホームページで見ました。 その会社に電話で問い合わせたところ、100Mを超えてサーバーに負担がかかり他の利用者の方たちに迷惑がかかるような場合は何らかの制約がされるという旨の説明がありました。 そこで質問なのですが、mysqlの容量が増えると単純にサーバーの負担も増えるようようなものなのでしょうか? 例えば、200Mのmysqlは100Mのものに比べて2倍の負担がかかるということがあるのでしょうか? どうも納得ができなかったため質問させていただきました。 よろしくお願いいたします。
- 締切済み
- SQL Server
- blue_camino
- 回答数3
- 指定秒で強制タイムアウト&指定回数リトライさせたい
SQL Server(すみませんバージョンが分かりません) をVBから使っています。select やupdateのSQLアクセス を指定時間でタイムアウトさせ、できれば指定回数試行 した上でリターンさせる方法はないでしょうか? 自前のリトライ機構を実装するのは今さらかなりインパ クト大な状況でして。。 宜しくお願いいたします。
- ベストアンサー
- SQL Server
- 1qazxsw2
- 回答数1
- Select文とデッドロックについて
現在のような処理をしています。 SQL Server2008 R2 Expless プログラム1 select count(*) from TABLE_A プログラム2 BeginTrance SERIALIZABLE select count(*) from TABLE_A Update TABLE_B set F1=123 Where P1=1 Commit ※ここで P1はTABLE_Bのプライマリキーとします。 この2つのプログラムを同時に実行している時に、プログラム1のSELECT文でデッドロックが発生した との連絡ありました。 プログラム2でもエラーが発生しているのかもしれませんが、現状調査不可能為不明です。 いろいろデッドロック、ロックヒントなどいろいろ調べてみた結果、なんとなく発生するかも?とは思われますが、このような場合、本当にデッドロックが発生するのでしょうか? また、発生する場合には、何と何がデッドロックになっているのでしょうか? (発生するはずがないとなると調査する視点を変えてみます。) よろしくお願いします。
- 締切済み
- SQL Server
- SMit2013
- 回答数1