Microsoft SQL Server 総合スレ 4
1 :
NAME IS NULL :
2006/03/14(火) 14:53:03 ID:Is5CmAZN
2 :
NAME IS NULL :2006/03/14(火) 23:24:34 ID:wdw0js8n
>1 乙
オラが無償のDB開発ツール配布始めたけどMSでも出そうですかな? VS2005Expressのアドインとかで
Production機でNorthwindとpubsを残しておくなよヴぉけ
7 :
NAME IS NULL :2006/03/16(木) 22:30:59 ID:EbpOc3DQ
DBについて全くの初心者です。 排他ロックについてお尋ねしたいのですが、 SQLでのテーブル単位やレコード単位のロックの方法はわかったのですが、 DB全体のロックの方法がわかりません。 どなたかご教授をお願いしたします。
>>7 TABLOCK
ロック関係は初心者が手を出すとたいてい痛い目にあう箇所だから、
BOLのロックヒントのところをよく見ておくといい。
9 :
7 :2006/03/16(木) 23:16:02 ID:???
select * from テーブル名 with(tablockx,holdlock) でテーブルのロックができると思いますが、 DB全体をロックするにはどのような構文になるのでしょうか?
11 :
10 :2006/03/16(木) 23:21:31 ID:???
それ以前に、データベース(のインスタンス)をまるごとロックして なにかいいことあるのかと尋ねてみたいが
12 :
7 :2006/03/17(金) 00:03:33 ID:???
データセンターにあるDBに複数のクライアントが アクセスするシステムで、クライアントの1人が DBを更新している時に他のクライアントはデータを参照・更新 できなくさせたいらしいのです。
13 :
10 :2006/03/17(金) 00:22:53 ID:???
あの…排他ロックって…わかって書いてる?? 釣られたのか漏れorz
もしかしてシングルユーザーモードで起動するってこと?
15 :
10 :2006/03/17(金) 00:27:35 ID:???
「データセンターにあるDBに複数のクライアントが アクセスするシステムで、クライアントの1人が DBを更新している時に他のクライアントはデータを参照・更新できないようにする」 のが排他ロックです。 ふつうはデータベースまるごとロックなんてしない やり方ググったら出たけど、危ないからキミには教えない w
16 :
7 :2006/03/17(金) 00:48:03 ID:???
自分の日本語がおかしいかったようでうまく伝えることができず 申し訳ありませんでした。 教えないですか・・・ん〜、残念です。
というかさ、みんな
>>7 がDBをロックできるかできないか知りたいんだから、
それ教えればいいじゃん。なんで、排他ロックの使い方が悪いとかそっちの話になるわけ??
まぁ、その話も必要だけど、それでも、DBロックできるか知りたいか聞いてるんだから、教えればいいじゃん。
ちなみに、俺はSQLServer触った事無いから、しらない。
頑張って、すべてのテーブルにロックかければ?
21 :
10 :2006/03/18(土) 12:27:55 ID:???
>>16-17 ロックによる書き込み衝突を絶対回避しなくちゃいけないぐらい
(コンサートチケット購入システムとか)じゃないかぎり、
デフォルトのままなんだよ。デフォは行ロックだけど、
ロックする行数が増えると、自動的にテーブルロックに切り替わる
明示的に、いきなりテーブルロックにするかどうか
というのが、設計者でも悩むぐらいなので
(大きくロックすると、ほかのひとが使えないので、全体のパフォーマンスがおちる)
特別な意味でもないかぎり、更新のためにデータベースごとロックなんて
ありえないんだよ。
データベースまるごとロック、は専用のシステムプロシージャがあるので
自分のプロシージャのなかでそれを呼び出すとできる
ただしトランザクション使って限定的にやるとかしないと危ないし
そのトランザクションの設定自体で間違えて「ロックがかかったまま」になりかねない。
できればやらないほうがいい。
そんなヤバいことしようとしてるのに、その「特別な意味」を
>>7 は教えてくれない
もしかすると、
>>7 が考えてるようなシナリオを、ほかの方法で回避できるかもしれないし
それをここの誰かが教えてくれるかもしれないし
なにしろやらないにことたことないんだよ。
22 :
10 :2006/03/18(土) 13:46:41 ID:???
>>21 × ことたこと
○ こしたこと
ここで知ってる人にしつもん
ロックの粒度でいえば行ロックのつぎはページロックなんだけど、
ロックエスカレーションの場合、どのタイミングで
どの粒度にいくか、ってなんか書いてある場所あるのかな?
ひきかたわるいのかもだけど、BOLにある場所わかってなくて^^;
というのも、ロックエスカレーションでは
いきなりテーブルロックとか、はてはDBロックがかかるんですよね?
(Updateクエリのwhere節がひっかける行数÷総行数で判断??)
条件さえよければ、インデックスロックでも済みそうな気もするのに…
自分で明示的に指定する場合はいいんだけど、
自動判断のチューニングってできんのかなぁ…
>22 まず>19を読んだら?
24 :
NAME IS NULL :2006/03/22(水) 22:18:40 ID:fuQNcWXy
>>22 エスカレーションの閾値とかは設定できないよ、SQL server 2000では。2005だと設定できるか知らんけど。
25 :
10 :2006/03/22(水) 23:29:38 ID:???
27 :
NAME IS NULL :2006/03/23(木) 11:53:45 ID:jtgDaKQq
10000円ぐらいの本に どれぐらいで六エスカレーションがおきるか 書いてたようなきがする
2005のBOLだけど ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ja/udb9/html/4a24489c-e38f-4d16-9c26-1ab3664cdcb6.htm データベース エンジン は、行ロックまたはキー範囲ロックをページ ロックにエスカレートせず、 テーブル ロックに直接エスカレートします。 同様に、ページ ロックは常にテーブル ロックにエスカレートされます。 ロックのエスカレーションは、次のいずれかの時点で開始されます。 ・1 つの Transact-SQL ステートメントが単位のテーブルまたは インデックスに対して 5,000 個のロックを獲得したとき。 ・データベース エンジン のインスタンスのロック数がメモリまたは構成のしきい値を超えたとき。
exchange serverを使わずにsql agentから警告をメールで通知する手段ってありますか? agentを停止させてからoutlookを起動して〜とかやればいけるみたいですけど
>>31 ジョブの作成してステップの作成で、ActiveXスクリプトをちょちょっと作ってやればいい。
具体的なやり方は「SQL Server 2000でいってみよう」のP166に書いてある。BASP21が必要だけど。
ぐぐればWeb上にもあるかもしれん。
2005ならデータベースメールが使えるらしい。
>>32 さっそくその本を買ってみます
ありがとうございました
ActiveX を使うまでもなく、xp_cmdshell でコマンドラインメーラーを叩くのが楽じゃね?
>>32 2005ってメールできるんだ
ようやくそこまともになるんだなw
36 :
NAME IS NULL :2006/03/25(土) 13:25:25 ID:zNp4bawA
年内の開発は、まだ2000を選択するよね?
新規の案件は2005でやってるよ。
38 :
NAME IS NULL :2006/03/27(月) 19:26:42 ID:5TsWkfRW
Microsoft SQL Enterprise Manager Microsoft Corporation バージョン: 8.0 のバージョンを使用しているのですが、これではフルテキスト(全文検索) は対応していないのでしょうか? テーブルを右クリックすると「テーブルのフルテキストインデックス」という部分が 使用できないようになっていて困っています。
39 :
38 :2006/03/27(月) 19:38:21 ID:???
失礼しました。 MS SQL SERVER 2000です
対応はしているが、機能するかどうかはインストール時に指定が必要じゃなかったか?
今、2000用のBooksOnline見てみた。 インストール時にフルテキスト検索をするかしないか、 するのであればどういうオプション(インデックスの置き場所とか)でインストールするか 決めるぽいなりよ。
機能がインストールされているかどうかはEnterprise Managerの 「サポートサービス」枝から確認できる。
Management Studioって重いね。 メンテってこれつかうしかないんだよね。
SQLCMDでsp_helpやsp_tableなどを使うと表示がめちゃくちゃで見れたものではないのだが、 なんかいい方法ないですか。
テーブルの一覧だけ作ってみました。 create view tab AS select cast(TABLE_SCHEMA + '.' + TABLE_NAME as varchar(50)) AS NAME, cast(TABLE_CATALOG as varchar(10)) AS CATALOG, cast('TABLE' as varchar(5)) AS TYPE from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' union all select cast(TABLE_SCHEMA + '.' + TABLE_NAME as varchar(50)) AS NAME, cast(TABLE_CATALOG as varchar(10)) AS CATALOG, cast('VIEW' as varchar(5)) AS TYPE from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'VIEW'
49 :
NAME IS NULL :2006/04/03(月) 12:28:35 ID:kIg6E8cf
SqlServer 2005 WorkGroupエディションって、データベースのコピーができないのですか? Sysadminのメンバーでログインして(Windows認証)で、ウィザード起動してその通りやっても、 最後で 「@subsystem_name('SSIS')が存在しません。」 「プロキシ アカウントを指定してください」 とか怒られるわりには、プロキシアカウントをどこで指定しろと?
SQL Server 2000, 2005 MSDE などがインストールされているかどうかを 判断する方法はないでしょうか? 例えば、あるレジストリが存在する場合はインストールされている、など。 インストールされている/いないを確実に判断する方法があれば 教えてください。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
52 :
NAME IS NULL :2006/04/04(火) 12:54:51 ID:TvtM7foX
そろそろ運用している所もあると思うが 2005の使用感、その他諸々は いかがなもんでしょうか?
Management Studio は重いけど、操作性は良好。バグが少々。 BI 機能の進化は素晴らしい。 けど KPI のアイコン表示だとか課題があるから真価を発揮するのは 2007 Office が出てからだと思う。 Visual Studio 2005 との統合で、ソリューションやプロジェクトの単位で 作業可能にになったのが嬉しい。
SQL鯖2005で質問させてください。 CLRを使ったストアドプロシージャ開発をしているのですが、 セキュリティの設定が悪いのか、プログラム内でコネクション張ろうとしただけで例外が発生してしまいます。 マイクロソフトが提供しているサンプルプログラムでも同様なので、 どこかの設定が抜けてるのかと思うのですが… どなたか上手くCLRでコネクション張れた方はいらっしゃらないでしょうか?
55 :
NAME IS NULL :2006/04/04(火) 18:47:15 ID:ly+yMBFO
Like句で教えてください 3つのカラムの中で「A」と「B」という語句を抽出したいときLike句を使おう と思っていましたが、うまくいきません。 「A」だけとか「B」だけなら問題ないのですが、Like '%A%' and '%B%'という 文ではダメなので、どうやって書けばいいのでしょうか? 条件は「A」だけとか「B」だけという事もあれば両方使われる場合もあります。 お願いします
>>54 構成ツールのセキュリティ構成でCLRをオンにする。
オンになってるならPERMISSION_SETをいじる。
CREATE ASSEMBLY ... WITH PERMISSION_SET =
このあたりでどうですか?
>>55 xx LIKE '%A%' OR xx LIKE '%B%'
>>56 >CLRをオンにする。
訂正 CLR統合をオンにする。
58 :
52 :2006/04/04(火) 20:14:44 ID:???
>>53 ほほー、なるほど。
>Visual Studio 2005 との統合で、ソリューションやプロジェクトの単位で
>作業可能にになったのが嬉しい。
この辺りは早く試してみたいですなー。
とりあえず、ありがとう。
59 :
54 :2006/04/05(水) 00:26:40 ID:???
>>56 レスありがとうございます。
CLR統合をオンにするは実施済みなのですが、パーミッション系に問題がありそうなので、
ご指摘のPERMISSION_SETまわりを見直してみます。
Management Studio Expの正式日本語版まだ〜?
MSSQL2000のAvailabilityをレポートするツールでFreeのものとかあります?
uniqueidentifier型のカラムにADOでGUIDを登録したいのですが rs.Fields("hoge").value = "4324-34342-4-2343-32-4" のような感じで。 しかし、型が違うので登録できません。 GUIDをuniqueidentifier型に登録する方法がありましたら 教えてください。
63 :
62 :2006/04/07(金) 17:25:01 ID:???
事故解決しました。 rs.Fields("hoge").value = "{4324-34342-4-2343-32-4}"
64 :
NAME IS NULL :2006/04/07(金) 18:56:17 ID:5O1JP5O4
SQLDataAdapterを使ってインサート文を投げているのですが、 行数が多くてタイムアウトしてしまいます(;´д`) 回避する手段は無いでしょうか?
>>64 タイムアウトはどこで起きてますか?
この手の質問で実はASP.NETでタイムアウトが起きてたという落ちが多いけど。
66 :
64 :2006/04/07(金) 21:02:04 ID:???
>>65 .netのタイムアウトもあるのですか!?
updateしているところでタイムアウトしてるようなのですが…
.netのタイムアウト設定はどこをみれば変えられるのでしょうか?
>>64 どこでどういうメッセージが出たからタイムアウトと判断したか具体的に示せということだな。
それからSQL Serverや.NETのVersionや言語、ASP.NETかどうかなど。
推測で答えたらきりがないだろう。
>>インサート文を投げているのですが >>updateしているところでタイムアウトしてるようなのですが… はは、こやつめ
69 :
NAME IS NULL :2006/04/08(土) 20:12:03 ID:cS1HhYAx
>68 insertはSQLで updateはミドルウェアのメソッドだろ。 まあ、ちゃんと書いていない>66が悪いんだが。 つーか、区別がついてないんだと思われ。 >66は日本語じゃなくてコード書け。
.netのSqlCmmandオブジェクトのクエリタイムアウトはデフォルトで30s リフレクションで調べたら、ソースに直に書いてあったorz 時間のかかりそうなsqlについては毎回クエリタイムアウトを設定するしか…
>>70 SqlDataAdapterはDataSetの中を見てinsert対象だったら1件ずつInsertCommandを実行するはずだから、
挿入件数がいくら多くても1件当たり30秒の制限は超えないと思うのです。
だからデットロックの1205エラーを疑っていました。
エラーメッセージの詳細がほしいというのはこの辺を確認したかったからです。
データベース、あるいはテーブルを、中身のレコードをのぞいて定義だけ コピーしたいんですがどうしたらいいですか? GUIじゃなくてSQLDMOとかストアドとかのコードで実現したいです。
>72 1. コピー元データベースをバックアップ 2. コピー先データベースにリストア 3. コピー先データベースの全テーブルTruncate
>>72 テーブルなら
select * into DEST from src where 0=1
制約類は付いてこないので、必要なら別途コピー。
75 :
NAME IS NULL :2006/04/10(月) 19:02:10 ID:1xKUAW09
丁度
>>72 氏と同じとこで迷ってたとこです。
GUIでもコマンドでもいいので、手っ取り早い方法はないでしょうか?
>>73 氏の方法はIdentity列のシードが1に戻らないため、戻すのに
Identityの再設定が逐一必要になるのが少し難で。
DBCC CHECKIDENT か truncate table だけでいいだろ > identity
>>72 です。どうやらSQLDMO.TableやDatabaseにScriptというメソッドがあって、
それでCREATE *** SQL文を作成できるので、あとはDatabase.ExecuteImmediate
(SQLServer.ExecuteImmediate)すればいいみたいです。さっき見つけました。
Scriptの引数でインデックスその他の作成SQLも作れるようです。
やっぱりテーブル1つ1つDBCC CHECKIDENTやってくしかないか。 みなさんありがとうございました。
っと、目が節穴だったようだ。
>>77 ちょい調べて試してみます。マジ感謝。
バックアップに関して教えてください DBの中に システムの設定などに関するテーブルと 売り上げなどに関するテーブルがあって バックアップをとって復元したいのですが 設定のテーブルだけ値を戻したいとき (売り上げまで元に戻すとおかしくなるので) ファイルグループで 復元したいテーブルとそうでないテーブルを ファイルで分けて復元するとできるのかなと 思いましたが、他に方法何かありますでしょうか? バージョンは特に指定なしで
いや、指定しろよ。
板違うかもしれませんが教えてください。 下記の命令をASPに組み込み、ACCESSを読むように設計しましたが、 エラーになってしまいます。 DBがオープンできないようなのですが・・・ 分かる方、いらっしゃいましたら教えてください。 Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" db.ConnectionString = Server.MapPath("test.mdb") db.open よろしくお願いします。
83さん OKです。ありがとうございました。
>>80 ローテクだけど、BCPを実行させるWinUIでも作成すれば???
おいらは、BCPツール、自分で作って、最終手段用として
活用してるけどね。
自作だけど、結構役に立つ。
BCPって、id&Keyがずれるから、他テーブルとRel張ってるときは、
要注意だけど。
大昔、そのせいで、データが泥沼になったことある。
いまは、id&Keyは、更新系のメソッドやSPでしか使用しないな。
RelationKeyの親子が、DBから独立して独自の方式になっていて、
制約とかとくにかけてないなら、BCPでファイルに落とすのが一番わかりやすいかもね。
86 :
NAME IS NULL :2006/04/11(火) 21:02:59 ID:kfLJ9dky
質問。 一度の処理で4万行ほど更新するプログラムなんだけど、 処理途中でタイムアウト起こすんですよ。 VS2005+SQLServer2005なんだけど、SQL CLRでタイムアウトの設定ってどこでできますかね。
88 :
86 :2006/04/11(火) 23:54:49 ID:kfLJ9dky
>>87 ありがとうございます。
100未満のレスくらいきちんと読めって話ですよね(汗)
すみません、少し古いですがSQL Server7についての質問です。 多分最新版でも仕様は同じと思いますが…。 データベースのプロパティなどで見れる割り当て済領域のところの、 使用容量は、テーブル以外のビューやストアドプロシージャなどの容量もはいりますよね? 後、データベース保守計画で、データベース全体のバックアップにしてる場合も、 ビューやストアドプロシージャなどもバックアップ取ってくれるのでしょうか? すみませんが、知ってる方よろしくお願いします。。。
>>89 多分取ってくれるだろうけど保障はできないし、万が一消えても
責任は取れない。ダミーのデータベース作って実験してみたら?
>>89 完全バックアップすれば、データベース1つがまるまる
バックアップ可能っすよ。そのまんまのスナップショットです。
で、復元すれば、そのままの状態で再稼動できます。
俺は、ファイルに都度、保存しています。
開発途中なんかは特に。
論理ファイル名と物理ファイルパスが、復元のときにめんどくさいかも
しれんけど。
お邪魔します。 まったくの初心者なのですが金曜からSQLをやってもらうと言われたので 現在コマンドプロンプトでOSQLのサンプルを打ってるんですがSQLにも種類が あるんでしょうか?場合によってはOSQL何てやっても役に立たない事になるんでしょうか? よろしくお願いします。
>SQLにも種類が あるんでしょうか? すみません。この板見ただけでも種類があるのは明らかですね・・・ OSQLは無駄かどうかだけ教えてください。
>>93 MSSQL2000にくっついてくるosql.exe のこととして話をすれば、
OSQLはSQLコマンドインタープリタの名前でSQLの種類のことではない。
MSSQL用のSQLおよびストアドプロシジャ記述用の言語のことはTransact-SQLと呼んでいる。
MSSQL2000には同様のコマンドインタープリタとしてisql(CUI用)とクエリアナライザ(GUI用)が付属している。
isql と osql はきわめてよく似ているがサーバーとのインターフェイスにodbcを使っているのがosqlの特徴。
普通はクエリアナライザとisqlで十分なのでosqlをあえて使うことは少ない。
>>92 osqlで勉強って・・・・・無駄ではないけど、根性いりますよね。
プログラマとして「SQLをやる」っていうのなら、
osqlもisqlも、よほどのことがない限り、使用しないツールだともいます。
それに、効率悪くて、人件費が無駄です。
製品版購入してもらって、クエリアナライザとかで勉強してください。
MSDE+Accessっていうのもあるけど、あまりおすすめしない。
デバイス '***.TRN' のメディア ファミリが正しい形式ではありません。 SQL Server はこのメディア ファミリを処理できません。 といわれてトランザクションのバックアップが失敗してたんですが、 これってTRNファイルが壊れてたって事ですか?
97 :
89 :2006/04/13(木) 15:45:41 ID:???
>>90-91 さんくすです。
>ダミーのデータベース作って実験してみたら?
ユーザー先のDBなんでダミーとか作れないんです(´・ω・`)
指定DBをDATにバックアップ取りたいようなんで、
データベース保守計画でバックアップファイルを作成
↓
時間を置いてそのファイルをDATへのバックアップジョブ
って感じでいきたいと思います。
さんくすです(・∀・)
98 :
NAME IS NULL :2006/04/13(木) 18:22:09 ID:ygeagWMC
アナライズサービスを触っているのですけど、キューブの生成時にログオンに失敗しましたって言われます(;´д`) データソースにはきちんとアクセスできてテーブルも取得出来ているのですが… キューブを作る際のアカウント情報は別にあるのでしょうか?
>>94 >>95 ありがとうございます。
osqlは買った本に付いてたんで仕事終わって家でちょくちょく打ってました
今日教えてもらったらクエリアナライザってのでした。
又質問すると思うけどよろしくお願いします。
内の部署SQLやった事ある人居ないんで・・・(他部署にはゴロゴロいるけど部署間の対立で借りは作りたくないらしい・・・
うまく教えてもらって部署間の和解のきっかけになりなよ。
>>97 ファイルに一度バックアップをとれるなら、
そのファイルをどこにでも持っていけるし、
どのSQLサーバに復元もできるから、
安心だよね。
直接DATへのバックアップだと、
バックアップの小技をいろいろ習得しないと、
うまく復元できなくなることあるっすよん。
遠距離のレプリケーションをもっと簡単に設定できればいいのに バックアップ目的にレプリケーション使いたいんだけどよくわからん
>102 ログ配布は?
104 :
NAME IS NULL :2006/04/17(月) 22:03:00 ID:89jdluih
text型にすると、そのフィールドはLIKE演算子で検索できなくなってしまうのでしょうか? また、他にも制約がありますか? 8000バイトを超える文字データを格納しなければならなくなったのです。
105 :
104 :2006/04/17(月) 22:09:16 ID:89jdluih
すいません、LIKEは大丈夫でした。 varchar型からtext型に変更しようと思うのですが、 気をつける点はありますか?
つ SQL Server 2005
varchar(max) と textの違いがいまいちわからんね
つうか、もうtext使う意味は無い。 将来バージョンでは廃止だってよ。
お邪魔します 一定の間隔で入っているデータを抽出するのに今まではwhere句で 列名 % 3 = 0 などで取っていたのですが取りたいID(主キー)が奇数と偶数混じっている場合どうすればいいのでしょうか? 具体的には1〜22で1,6,10,14,17を取りたいのです。
in
>>109 まず、基本的な問題提起として、
・式を用いて導き出せる集合
なのか、
・絶対値を指定しなければ導き出せない集合
なのか、
はっきりしなさいな。
そのどちらかによって、解法なんてまったく違うでしょ?
データの分析と管理の手法の検討が未熟なのかもよ!
・・・・つーか、該当レコードのみにフラグ立てるフィールド増設すれば???
規則性のない一定間隔(規則性が崩壊する一定間隔)、ってのが、非常に意味不明。
それって、設計ミスでしょ?
113 :
109 :2006/04/20(木) 19:47:46 ID:Uvn6Jss0
レス遅れ、説明不足すみません ・式を用いて導き出せる集合 らしいので in は使うのはダメらしいです・・・SQL初めてなんで研修中です 今日もこの問題考えてたけど進まなかった・・・アドバイス頼みます
だから、どういう式なのかと。
どういう式でもいいケド 式を用いて導き出せるんならFUNCTION使えばいーじゃん TABLEで返せんだし
>>114 , 115
式は109さんが、ご自分でお考えになるのでは?
がんばってね、109さん。
117 :
115 :2006/04/21(金) 21:21:52 ID:???
なんとーーーー!!!(シーブック風味) 式を考えてくれってことだったのかw SQLServerどころかクエリも関係なかったのかww 釣られた…orz
118 :
NAME IS NULL :2006/04/22(土) 14:24:54 ID:uIJlO8DR
ストアドではなくて、裸のTransact-sqlブロック(begin..endのやつ)のなかで 関数定義することってできないのでしょうか? OracleのPL/SQLブロックならできるのですが‥ 書き込み権限のないDBからデータを拾う開発しているのですが、 ちょっとした処理を関数にまとめたく思っています。
119 :
118 :2006/04/22(土) 14:28:09 ID:uIJlO8DR
環境書き忘れました。 DBはSQLServer2000および2005です。
120 :
NAME IS NULL :2006/04/22(土) 15:01:48 ID:uIJlO8DR
ぐぁ。transact-sqlの begin .. end って スコープを形成しないんでしょうか!? 「変数名 '@i' は既に宣言されています」ってなによ、それ… (なにかいいやり方ありませんか?)
exec sp_executesql N'declare @i int 〜'
122 :
120 :2006/04/22(土) 16:25:06 ID:uIJlO8DR
>121 サンクスコです。やってみました。スコープ化されました(いちおう) しかしなぁ… 話は変わりますが、 動的SQLで、テーブル型の変数をOUTPUTすることはできないでしょうか? 実は118=120=私ですが、それができればストアドを使わずに テーブル変数を返す関数みたいなものができそうです。
ためしにreturnしてみて
124 :
122 :2006/04/22(土) 22:41:13 ID:uIJlO8DR
>123 レスありがとうございます。 いや、Create function権限のないDBなので 関数作れず、そもそもreturnできないのです。 とはいえ特定の手続きを「関数的ななにか」でひとまとめにしたい、と。 そこで苦し紛れに動的SQLを関数とみなし、 OUTPUTパラメータで戻り値(?)を受け取ろうかと思った次第。 一昨日までオラクルやってたので、変数スコープがグローバルだとか ストアドにしないと関数作れないとか、ショッキングなことが多いです。 SQLServerってこんなにもショボいのでしょうか。 がっくしきてます。。む〜
table変数が動的SQLに渡せないぽいので、やむなく一時テーブル (それも#じゃだめで##使わなきゃいけない)使ってまつ。
126 :
NAME IS NULL :2006/04/23(日) 00:01:45 ID:PR6fh/Ea
>125 答えじゃないんだけどね、グローバル一時テーブルはあまりよろしくないので…。 親ストアド側でCREATE TABLE #〜ってやれば 一応グローバル一時テーブル使わなくてよくなる。 子ストアドは親ストアドで作った一時テーブルは見れる。 同じセッションだから。 複数テーブル使って一時テーブルレイアウトを作ってるんなら、 CREATE TABLE #テーブル名 SELECT 何とか FROM 何タラ JOIN ほげほげ WHERE 1=0 みたく、FROM句で全部JOINしちまって、 WHERE句はFALSEになるような条件かいときゃおけ。
127 :
kunn :2006/04/23(日) 00:20:01 ID:Q9J4SzPn
ファイルが削除できません どうすればいいんでしょうか?
128 :
124 :2006/04/23(日) 00:30:07 ID:xSEwEA49
一時表もストアドも作成権限のないDBで なんとかそれをやる方法ってないでしょうか? 裸のtransact-sqlブロック(バッチっていうの?)で関数作りたい、って それだけのことなんですが… (*)せめて変数をスコープ分けしたいのだが。。
>128 ん?一時テーブルもストアドも作成権限がないDBで…ってことは、 プログラム上でスコープ分けたいってこと? ストアド、ストアドっていってるけど、 ストアドプロシージャのことかストアドファンクションのことか どっちもなのかもよくわからんようになってきたが…。 そもそも、レスポンスはどーでもいいシステムなの? そうじゃなきゃ、一時テーブルぐらいは許可してもらえよ。 SQLServer使ってて一時テーブル使わねぇなんてもったいなさ過ぎるよ。
基本的な質問で申し訳ない
テーブル作成権限ないと、一時テーブルって作れないの?
てか、
>>128 はストアドの権限もないって
それじゃなにも始まらない気がするんだけど…
131 :
NAME IS NULL :2006/04/23(日) 01:23:43 ID:PR6fh/Ea
>130 えーっとね、たしか、guestでも一時テーブルは作れる。 けど、>128の場合、プログラミング規約上作れないってことじゃなかろうか。
132 :
124 :2006/04/23(日) 01:42:41 ID:xSEwEA49
> 129,130,131 どもです。 ええ、他部門がさらに外注に出して納品してもらったシステムのDBで 勝手にオブジェクト作ると保証がなくなるとのことです。 権限的には該当テーブルのみ Grant selectしてもらってるかんじ。 ただ、データだけは拾って簡単な自作のビューアに表示させたいのと 自部門のOracleに転送したいので、、、 >129 ストアドはプロシージャでもファンクションでもどちらでも構わないですが 要は定型処理部分をひとまとめにして箱に入れたいという意味です。 それこそ古いベーシックとかの Go Sub程度の機能でもないよりは、いい。(ローカル変数使えればね) パフォーマンスはバッチ処理主体なのであんまり求めてないです。
ストアドではなく、スクリプトファイルを作成し、 isql等から実行したいということ? ローカル変数のスコープ範囲はバッチ内。 スクリプト内に複数のバッチを作成することができる。 各バッチはgoステートメントで区切られる(begin endではない)。
134 :
124 :2006/04/23(日) 02:19:32 ID:xSEwEA49
>>133 そうです (^^)。その通りです。
クライアントは C#で書いたやつとisql(UNIX版のやつですが)です。
SQLServer内のテーブルに対して、スクリプト内で生成した
特定のレコード(テーブル型変数に格納している)とJOINしたかったので
そんな感じのスクリプトを書いたと。
で、その「スクリプト内で特定のレコードを生成する」というところが
複数あるので、作業用の変数がばらばらとウザいから
それぞれ関数化してまとめる事がしたかったのですが、そこで躓いたわけです。
…goで区切っちゃうとスコープを作るというより、完全に分断されちゃいますよね?
(各スコープで値の受け渡しができない)
>134 ストアドといっていたのは、Oracleで言うところのPL/SQLのことか。 SQLServerではTransact-SQL(T-SQLでも通じる)というので、 その辺混同しないように。 あと、一時プロシージャというものも作れる。 一時プロシージャを使えば何とかなるんじゃないかな。
>goで区切っちゃうとスコープを作るというより、完全に分断されちゃいますよね? >(各スコープで値の受け渡しができない) そりゃ、ローカル変数の対象はバッチ内だから 他のバッチの値は参照することができないね。 ローカル変数を定義したかったんじゃなかったっけ? >(ローカル変数使えればね) だからgoで区切って バッチ内の参照のみ→ローカル変数を使う declare @i int select @i = 1 print "@i = %1",@i go declare @i int select @i = 3 print "@i = %1",@i go 他のバッチの変数にアクセスしたい場合は、 テンポラリテーブルを作成し、参照すればok declare @i int select @i = 1 select @i i into #i_temp go declare @i int select @i = i from #i_temp print "i= "+ convert(varchar,@i) go ##が必要なのは、動的SQLはsp_executesql 内で実行される。 ストアド内で作成される#の一時テーブルは、ストアド終了した 時点でドロップされる仕様だから。 バッチスクリプトで一度作成したテンポラリテーブルは そのスクリプト内ではinto句で再作成できないから、 一旦ドロップするといいよ。 IF OBJECT_ID('tempdb..##i_temp') is not null BEGIN DROP TABLE ##i_temp' END select @i i into #i_tmp
137 :
124 :2006/04/23(日) 14:36:36 ID:xSEwEA49
>>135 ありがとうございます。「ストアドではなくて、裸のTransact-sqlブロック」と
言ってみたりしたのですが紛らわしかったですね。なんて呼べばいいのかよく分からなくて…
例えばオラクルの場合はストアド(プロシージャ|ファンクション)にしなくてもPL/SQL内で
declare
/* PL/SQLの場合、ストアドにしなくてもファンクションを作れる */
function get_i return number is
i number := 1;
begin
return i;
end;
begin
dbms_output.put_line(get_i());
end;
という感じに、そのバッチ(or スクリプト?)内のみで有効となるfunctionを
組むことができるのですが、SQLServerにはそれ相当の機能ってないのかなぁ、って思ったわけです。
一時プロシージャってあるのですね!調べてみます。
138 :
124 :2006/04/23(日) 14:37:44 ID:xSEwEA49
>>136 , 131
ありがとうございます。一時テーブルってcreate table権限なくても作れるのですね!! 知らなかった!
#tablenameがセッション固有で、##tablenameがトランザクション固有みたいになるのかな?
場所がtempdbに出来るようなので、作れるサイズの最大容量って事前に調べておいたほうがよいのでしょうか?
dropに関しては、同じセッション内では消えないので明示的にdropする。
いずれにせよセッション終了時に自動的に消滅するので後片づけは気にしなくてよい、という理解でよいでしょうか。
ともあれ、値の受け渡しには一時テーブルをつかうのがSQLServerのコンセプトみたいですね!助かりました。
139 :
124 :2006/04/23(日) 17:34:43 ID:xSEwEA49
ありがとうございました。一時プロシージャと一時テーブルで Management Studioからうまくいきました。 が、ADO.NETのSqlDataAdapterは Go を含むクエリを渡すとエラーになってしまうようです。 これは別の方法を考える必要があるのかな。 それと、125さんの記事にもありましたが、 ストアドプロシージャから#の一時テーブルに書き込むのはできなくて ##の一時テーブルならOKなのは仕様なのでしょうか? with execute as callerとか付けてみましたがあまり関係なしみたい。 ストアドにはセッションIDみたいのが伝わらないってことなのかな?
ADOとかADO.NET使うなら、GOはいらんぬ。 一時テーブルや一時ストアドプロシージャは 接続しているDBに一時的に作るのではなく、 tempdbってDBに作られる。 tempdbは基本的にアクセス権限publicで使えるようになっている。 だから、一時テーブルなどは誰でも作れる。そゆこと。 セッションについてはBooksOnlineを読むがよろし。 あと、SQLServerでは INSERT INTO #一時テーブル EXEC ストアドプロシージャ みたいなことができる。利用するがよろし。
141 :
124 :2006/04/23(日) 18:17:09 ID:xSEwEA49
>>140 どもです。ADO.NETに関してはSqlDataAdapterではなくてSqlCommandで
GO入れずに個別に実行したらできました。これは私の不勉強です。すんまへんです。
SQLServerは一時テーブルを活用していくのがポイントと思えばよいでしょかね。
もちっとがんばってみます。ありがとうです。
なんか、めちゃくちゃな素人が、めちゃくちゃ言ってるなー。 オラクルもまともにわかってないんじゃないのか?
ADO.Netの質問するなら、そっちのスレで聞いてよ。 どうせメンバーは被ってるんだろうけど、 本質的に別の技術だから。
>>137 その機能はない。
Transact-SQLはPL/SQLとはだいぶ設計思想が違うから、
PL/SQLのことは一度忘れてTransact-SQLを基礎から学んだほうがいい。
PL/SQLが独立した言語として作られているのでいわゆる第3世代言語的な構造を持ってるのに対して、
Transact-SQLはあくまでSQLの拡張という位置づけで
第3世代言語的なプログラミング構造を期待するならクライアントの言語でバンバンしろということ。
Transact-SQLはストアドプロシジャやファンクションが結果セットを返したりする。
この結果セットやtable型やtempテーブルなどをうまく使ってデータを表形式のまま加工するのがTransact-SQL流。
145 :
NAME IS NULL :2006/04/24(月) 03:41:53 ID:BlzOwYBc
連結OLEオブジェクトに.bmpのパスをかいて画像を取り込もうとしてます。mdbでは可能ですが、adpだと動作しません。連結OLEオブジェクトにもってこれないようです。仕様上どうしても取り込む必要があるので頭抱えてます。何かいい方法ありますか?
T-SQLはバッチではなく、ストアドを使用すれば、
構造化的プログラミングは可能。
>>144 の様にPL/SQLはストアドで
SLECT文の結果セットが返せないので、
そこがつらい。
(SELECT 〜INTO output変数 ということではない)
実際、PL/SQL表の受け渡しについては、
Oracleから外に出力するとき(sqlplusに出力したり、
クライアントプログラムに渡す場合)
にいろいろ手間がかかる。
>SLECT文の結果セットが返せないので、 → SELECT文の〜
皆さんの知恵を拝借させてください。 LDFの容量がでかくなりHDD残り領域がかなり無いので、 調整したいのですが、ログ切り離し後、データベース圧縮でOKですか? それを実行でトランザクションログ領域が圧縮されるのですか?
>>149 ログのバックアップ後に
データベース圧縮(DBCC SHRINKDATABASE)、もちろんEMからの操作で可。
ログファイルだけピンポイントに圧縮したいならDBCC SHRINKFILEを使う。
>>150 指導ありがとうです。
Transact SQLですね?色々試行錯誤してみます。
DTSパッケージの定期ジョブがSysadminのメンバが所有者だと失敗して、そうじゃないユーザが所有者の時は成功します。 この場合の原因って何か心当たりのある方いらっしゃいますか? SQLAgentはローカルシステムアカウントで起動されており、プロキシユーザを設定しています。
153 :
NAME IS NULL :2006/04/29(土) 00:15:51 ID:HcJcvsY9
>152 失敗という判断の根拠は?
質問です。 SQLServerのmdfファイルって、DBMS稼働中はコピーできませんが、 WindowsXPや2003のバックアップを使うと、稼働中でもシャドウコピーを作って、 バックアップしてくれるのでしょうか? よろしくお願いいたします。
155 :
NAME IS NULL :2006/04/29(土) 10:03:31 ID:HcJcvsY9
>154 なんでntbackupを使うことを思いついて SQLServerが持っているバックアップ機能を使おうとしないのか
SQL2000トラブルです。です。 トランザクションレプリケーションでログリーダーが急に動かなくなりました。 原因は不明です。 エージェントを開始してもエラーで終了してしまいます。 sp_replcmdsを実行できませんとエラーが表示されます。 エラー詳細を見ると以下のエラーです。 レプリケーションに失敗しました。ファイル 'T:\shiloh\sql\ntdbms\srvrepl\src\replicat.cpp'、行 1677。 (エラー発生元 : SV(データ ソース); エラー番号 : 18759) 急にこのようなエラーで悩まされた方はいませんか? 今のところの対応はSQL2000SP3からSQL2000SP4にパッチを当てましたが解決できず悩んでいます。
SQL Server 2000で select 伝票番号かも, max(履歴番号っぽい) from 伝票履歴みたいな where たぶん伝票タイプ = 'なんか' group by 伝票番号かも っていうのを速くしたいんですが インデックス付きビューでカウントみたいな 激しく速くなるのってないですか ちなみに(伝票番号かも,履歴番号っぽい)が主キーです
日本語でOK
>>158 履歴レコードに履歴以上の意味がないのなら、アクティブの伝票テーブルと履歴用テーブルを別にする。
次善の策としては最新のレコードは常に履歴番号0番にするなど固定の数字を使う。
この場合は伝票番号+履歴番号は代理キーとして、他に単一の主キーを設定するとよい。
>>160 レスありがとうございます
やっぱりテーブルそのものか履歴番号の定義を変えるかしないと
速くするのは無理なようですね
163 :
NAME IS NULL :2006/05/03(水) 11:17:26 ID:29YU5gFp
MS-Server2005の同時接続数って規定だといくつですか?
>>163 サーバー構成オプションのuser connectionsなら自動の 0 が規定。
マニュアルで設定する場合はshow advanced options を 1 にする必要有。
165 :
NAME IS NULL :2006/05/03(水) 15:32:24 ID:yjXLVpwU
SQL Server Expressでの質問です 新しいデータベースと新しいログイン(SQLサーバ認証)を作成し、 データベースの所有者をそのログインに設定しました その後、マネージメントスタジオエクスプレスで新しいユーザーからログインしようとすると 「ユーザーXXXはログインできませんでした。このユーザーはSQLServerの信頼関係接続と関連づけられていません」 というエラーになり、ログインできません 新しく作ったユーザーでログインするためには他に何をしたらいいでしょう
>>165 SQLServer認証自体は使えるようにしてあるの?
普通にインストールするとwindows認証しか使えないようになっていたような。
167 :
NAME IS NULL :2006/05/05(金) 17:19:51 ID:n2S4jS03
SQLServer2000 Enterprise Edition についての質問です。 4GBメモリを搭載したWindows2003Server Enterprise Edition のサーバ2台で SQLServerのMSCSを構築しようと思います。 SQLServe2000は4GBを超えるメモリを使用するにはAWEの設定が必要らしい のですが、4GBメモリの場合は特に設定は必要ないのでしょうか? メモリの動的割り当ての場合、最大何GBのメモリを使用するのでしょうか? OSでも使用すると思うので3GBぐらいでしょうか?
>>167 通常は2GBまで、これ以下なら自動設定で可。
OSを /3G で起動していて、max server memoryを3Gに設定すれば3Gまで使える。
残り1GBをAWEで使うかどうかは少し迷うところで、
OSやMSCSや他のサービスに1Gくらい予約しておいたほうがいいかもしれん。
ぎりぎりまでDBにメモリを食わせたいならパフォーマンスモニタ眺めて
3Gから4Gの間にmax server momoryの数値を設定すべし。
169 :
NAME IS NULL :2006/05/06(土) 20:31:36 ID:GLw+f90y
>>168 レスありがとうございます。
1GBはOS等で残しておこうと思うのですが、
OSを/3Gで起動するとはどうやるのでしょうか?
知識不足ですいません・・・。
170 :
名無し :2006/05/06(土) 20:50:53 ID:1zBphQHp
2ch言ってるけどあんな下等生物の溜まり場にいって全てPCのことしった気になってんじゃねーよ あんな奴らのipの抜きかたなんてたかが知れてるっツーの って書き込んできたやつがいるんだけどマジでこいつのIP抜いてやりたいから教えていただきたい、IP抜き法を
そいつのPCでDOS窓立ち上げてipconfig
みんなWebでの帳票印字は何のツールつかってる? SQL2005のReportingServiceしらべてみたけど、まぁ、そこそこいい感じ。 ただ区分が数字で入ってて、それを区分名に置換するのにiifを入れ子にしなきゃいけなかったり、 特殊な集計行をフッタに作ろうとすると、たくさんのDataSetを用意して、たくさんクエリを実行しなきゃ いけなかったりで、なんか面倒な感じがするね。 あと、それぞれクエリの異なるデータセットを一括して表示して、印刷したい場合にはどうすりゃいいんだろう。 自前でADOで接続し、簡単にDataSetを帳票(のオブジェクト)に渡して表示させる方法があればいいんだけど。
すいません。 既出かもしれませんが、よろしくお願いします。 今、WindowsMobile5.0のSQLServer 2005に OLEDBでSQL Serverにアクセスするプログラムを 作っているのですが、OLEDBを理解するために、いいテキストがありましたら教えてください。 アマゾンで検索してみましたが、様々あって、どれがよいかわかりません。 よろしくお願いします。
MSDN Library。マジおすすめ
>>175 ありがとうございます。
MSDN Japan Home > MSDN Library Japan > ODBC プログラマのための OLE DB
あたりが参考になりそうですね。
これから読んでみます。
177 :
NAME IS NULL :2006/05/09(火) 17:36:29 ID:Iu/7xhJ7
SQLsv2000の動作確認用に WinXPpro上でスタンドアロンで動かしたいんですが できますか?
できる。つーかしてる。
179 :
NAME IS NULL :2006/05/09(火) 18:57:59 ID:Iu/7xhJ7
>>178 トン
、、、なんですが
色々と調べてみたらスタンダードエディション(すみません!最初にバージョン書き忘れてました)だと入らないっぽいです、、、
検証したいDBのデータ容量が50Gを越えているので
評価版及び開発デベロッパでも無理そうです。
>>179 >評価版及び開発デベロッパでも無理そうです。
50GBならいけるんじゃねーの。
ちょっとTransact-SQLというか、クエリの書き方について質問。 ストアド内で、引数によりwhereの条件を変えようとしています。 @varが空文字か、または @varが空文字以外でなおかつTABLE1.col1=@varが成り立つ列がTABLE1に存在する場合に where条件が成り立つようにしたいので (要点だけなので意味不明になってますが気にしないで下さい) where @var = '' or (@var <> '' and exists (select * from TABLE1 where col1=@var) と書いてとりあえずは正しい結果は出ますが、 TABLE1が大きなテーブルになると、@var='' だとしても結果が出るのに 時間がかかるようになってしまいます。 @var='' の場合はexistsを評価する必要が無いわけですが そういうのをうまくやる方法はないでしょうか? どなたか知恵をお貸し下さい。
MSDE2000はmdfファイルの上限が2Gだね
>181 ストアドだろ?なんでWHERE句にこだわるの? IF ISNULL(@var, '')='' BEGIN 〜 END ELSE BEGIN 〜 END じゃダメなのか?
ねぼけてたスマソ 少なくともsql server 2000、たぶんsql server 7以降では 特に何もしなくても@var=''ならTABLE1は読みにいかないはず 実行プランを確認してみそ そそ、スピードは変わらないけど @var = '' or exists (select * from TABLE1 where col1=@var) でいいんじゃないかと
186 :
NAME IS NULL :2006/05/10(水) 17:48:14 ID:4jWaeqOQ
175ですが、もっとよさそうなのを見つけました。 Win32およびCOM開発 > データアクセスおよびストレージ > Microsoft Data Access Components(MDAC) > SDKドキュメント >OLE DBの Microsoft OLE DB 2.0 プログラマーズリファレンス & データアクセス SDK です。 これから読んでみます。
187 :
134 :2006/05/10(水) 19:50:12 ID:uk6bc3km
__| ヽ ̄ ̄ ̄ ̄~゙゙'''‐、 |ヽ、 \. 十匸 メ |~7 ヽ、 ヽ!. i、 .i、 i'⌒/ ノ|`ロjヌ .ト┴'─‐-ゝ i l i l.<  ̄ ヽ レ' } i > ─|─ `‐、_ ,... ノ ./ ,ノ\_ ド [ 二ニ=,> ,.イ ,i ( ヽイフ .∠._ -=ニ.._,.∠/ .∠| A /ヽ. \ i  ̄ 7 ヽ 、l/ \ ,-、∠!ヽ// ,, |/,. -=、ヘ、. ヽ i / 冫 月 ヽ ゞi ! i゙!(`ba ‐''´ 6f9j,! レヽ `‐、-=!.  ̄`7 ロ Y r´ |‐-‐}  ̄ー  ̄ ̄ _.ノ_\ ヽ..ノ 〈 ヽ ;‐十` ‐ ノ ヽヽ! ! ̄ ヽ /厂 { iヽ、 / 冫灰乂, ヽ、__.ノ、.__.ヽ、ヽ.__.ノ // ヽ、._! < ゙`ト.`‐、..イ_/ | | ヽ \ ロ 口 l |.! ヽY | |ゝ ヽ > 儿 |.! ヾヽ] [ 〃/ | | \i / !.! ゝ(◎)彡 | | } \ ‐┴‐ ヾ=、、 || 、.._ //i_-=ソ > _乂._ ア L!| !!、`''‐- | | !.ノ / /ヽ` !‐- 、...__!_!.ン \ |! |! |! |! /l // // _,!‐´ > ・ ・ ・ ・ ,.{ ヽ.// // ,.‐ ,.. -─ ''7
188 :
181 :2006/05/10(水) 19:54:17 ID:???
>>183 いや、実は例のような分岐が一度に5つあるので…
IFで分けようとしたらすごい量になってしまうのです
というか、自分も最初は安直にストアドたくさん作ってしまおうと思ったのですが
諸事情(具体的に言えばアホ上司の方針)によりストアドが増やせないという制限もあって…。
>>185 うーん、そのくらいはやってくれると思っていたのですが…
existsの部分を削るとすぐ結果が返ってくるのでやっぱり評価されているのかなと。
実行プランでも結構パーセンテージとってました。
ストアドが作られた時にいまいちな感じに最適化されちゃうのかなあ。
>>@var = '' or exists (select * from TABLE1 where col1=@var)
はこの場合はそうですね。
以前逆のようなシチュエーションがあって、その時は
この例でいうところのcol1=''の列があって不具合起こしてしまったので
神経質になっていました。
>188 SELECT * FROM TABLE WHERE @var='' UNION SELECT * FROM TABLE AS T WHERE EXISTS (SELECT * FROM TABLE1 AS T1 WHERE T.COL1=T1.COL1 AND @var>'') ってな感じでUNIONで分けてったら、実行プランはどんな感じになる? EXISTSんとこの相関サブクエリは想像なんだけど、実際はこんな感じになるんだよねぇ?
190 :
>>181 :2006/05/11(木) 21:41:37 ID:???
>>189 UNIONか…実は結果のカラムも50以上あってしんどいんですが(^^;
明日試してみますね。
Windows2000が入っているサーバーでSQLServer2000(SP3)を使用した プログラムを以前作成したのですが、今回そのプログラムを改造するに 当たりサーバーのOSをWindows2003に変更することになりました。 OSが2003に変わってもSQLServer2000は特に問題無く動作しますか? (勿論どんな処理をやってるかによって変わってくるというのは分かって いるのですが・・)
192 :
191 :2006/05/12(金) 00:14:57 ID:???
>>Windows2000が入っているサーバーでSQLServer2000(SP3)を使用した >>プログラム Windows2000の入っているサーバーで動作する、SQLServer2000(SP3)を データベースとして使用する販売管理のプログラム、です。 言葉がおかしかったので訂正です。
>>191 Windows2003でSQL Server2000はサポート対象で問題無く動作する。
その販売管理システムがWindows2003で動くかは知らん。
195 :
191 :2006/05/12(金) 07:56:43 ID:???
SQLServer2000(SP4)で、ジョブから空のテキストファイルを 作成したいのですが、どのようにしたらできるのでしょうか? ActiveXスクリプトでファイルをOPENしてすぐにCLOSEすれば いいらしいのですがよく理解できませんでした。
197 :
196 :2006/05/12(金) 15:04:47 ID:???
自己解決しました。 CreateTextFileオブジェクトでできました。 前に試したときは無理だったと思うのですが何か勘違いをしていたようです。 申し訳ありませんでした。
Scripting.FileSystemObjectをcreateobjectして textfileをつくればいいんじゃない
テーブルをCreateして初期レコードをInsertするスクリプトを osqlで実行すると、マシンによって実行速度にものすごい 差が出ることがありませんか? スペックは同等のマシンなのに、かたや数分で終わるスクリプトが かたや1時間くらいかかったりして、タスクマネージャーで見ると 遅い方ではCPU使用率が数パーセントしかありません。 こんな現象に悩まされている方、解決策をご存知の方はいらっしゃいますか?
200 :
初心者 :2006/05/14(日) 11:48:37 ID:rD/PlXLV
Microsoft SQL Server は既に動いており、3年間で60万件の数値データ があります。これをWEBサーバーから検索してどこからでも閲覧できる ようにしたいのです。 アクセスは少し組んだことがあるんですが、なんせ新しいアプリケーション がたくさんであるようで合理的で安定的に使える近道はありませんか?
>200 本屋に行って入門書を5〜10冊買ってくれば? 近道が欲しければ、外注に出せば?
は?
203 :
初心者 :2006/05/14(日) 12:05:27 ID:rD/PlXLV
そんな冷たい・・ どの言語にしたらいいかくらい教えてください。そこからは自分で調べます から。IIS+Perl とかアパッチ+Perlとかのようにお願いできま せんか?
すみません、SQLサーバ初心者です。 情報系のシステムを構築していて、 そのDBを訳があって、オラクル9から、 SQLサーバに移項することになりました。 トランザクションデータは基幹系から大きめに 取得して、Merge文で情報系と同期を取る形に していたのですが、SQLサーバにはMerge文が 無いとのことで、どうしていいか思案しております。 SQLサーバ使いの皆さんは、このような場合、 どういう処理を用いるのでしょうか?
206 :
初心者 :2006/05/14(日) 12:21:05 ID:rD/PlXLV
>>204 ASP.NETですか。勉強します。ありがとうございました。
ちなみに前設計はこのようなものでした。 1.基幹系からデータをCSVで取得 2.SQLローダで情報系の一時的なテーブルに取り込み 3.そのテーブルから、情報系の正規のテーブルにMerge これらのステップ自体、根本的なところから、見直した方が いいですかね?
>>205 set transaction isolation level serializable
begin transaction
update table1 set col1 = @2, col2 = @3 ... where key1 = @1
if @@rowcount = 0 then
insert into table1 (key1, col1, col2 ...) values (@1, @2, @3 ...)
commit transcation
更新して結果ゼロ件なら挿入。
普通のバッチ処理ならserializableにする必要はないが
update と insert のわずかな間が気になるなら付けとくとよい。
>>209 >if @@rowcount = 0 then
ちょっと修正 then いらないな
if @@rowcount = 0
begin
insert into table1 (key1, col1, col2 ...) values (@1, @2, @3 ...)
end
>>199 全く同じ手順を二つのマシンでやって違いが出るの?
片方ではmdfファイルの自動拡張とかが発生してたりしない?
HDDがフラグりまくってるところでmdfファイルの拡張が発生したりすると
結構ひどい事になるよ
>>212 データベース作成時はサイズを指定していないので、自動拡張になっていると
思います。ということは、あらかじめサイズを決めれば改善される可能性は
ありってことですね。試してみます。
214 :
205 :2006/05/15(月) 00:54:41 ID:/F0thW1i
>>209 アップデートの戻り値を判定するんですね。
ありがとうございました。
後はパフォーマンスの問題ですね。
なんとかがんばってみます。
215 :
NAME IS NULL :2006/05/15(月) 13:50:19 ID:E401pgx5
SQLServer2005 のフルテキストインデックス機能について質問です。 CONTAINS句による検索時に、この機能は単語単位でしか使用することが出来ないのでしょうか? 何を言いたいのかと言うと、下記の文字列の中から"京"や"戸川"で検索しようとすると抽出してくれないのです。 ------------------- 東京都江戸川区松島 ------------------- "東京"や"江戸川"といった単語単位なら抽出してくれるのですが・・・ 色々と調べて検索文字列の後に"*"をつけると、単語単位の前方一致検索はしてくれるまでは解りました。 前方一致だけでなく後方一致もさせるようにすることは可能でしょうか? 最終的には、"京"や"区松"といった検索文字列でも抽出できるようにしたいのです。 宜しくお願いします。
>>215 全文検索エンジンというのはそういうもの。
条件に完全に会うものをリストしたいならLIKE句を使うべきだろう。
LIKEで中間一致の場合はパフォーマンスが激しく悪いことを覚悟するべし。
217 :
215 :2006/05/15(月) 17:02:38 ID:???
そうですか・・・・orz オラクル9.2 であれば大丈夫だったので、後発のSQLServer2005 も対応してると楽観視してたのですが。 SQLServerだとトークン単位が粗いんですね。 それ以外だとLike中間一致を使わないといけないのか・・・ もっと調査してみます。。。 ありがとうございました。
"*江戸川*"ってできなかったっけ?
<prefix_term> 指定のテキストで始まる単語または語句の照合を指定します。 プレフィックス語句を二重引用符 ("") で囲み、後ろの二重引用符の前にアスタリスク (*) を挿入すると、 アスタリスクの前に指定された文字列で始まるすべてのテキストが照合されます。 句は、CONTAINS (column, '"text*"') のように指定してください。 以上SQL2005 BOLより 確かに *指定は後ろだけみたいだね。
222 :
215 :2006/05/16(火) 14:21:31 ID:???
>>220 そうなんですよね・・・・
ちょっと考えたんだけど、苦肉の策としてこういうやり方はどうだろう・・・
1.対象となる文字列に1字づつ空白を入れて格納。
例) "東□京□都□江□戸□川□区□松□島□" ※□=空白
これにより1字1単語とSQLServerに無理やり認識させる。
2.検索時に検索文字列を分解し、contains句で対象レコードを抽出
例) "戸川区"で検索する場合 ⇒ contains("'戸' and '川' and '区'")
3.上記2.の抽出レコードから、さらにLike中間一致検索を行い対象レコードを抽出
例) Like '%戸川区%'
4.完了!!
(´・ω・`) ぬるっぽい?
よー考えるワ ^-^;
224 :
215 :2006/05/16(火) 20:34:13 ID:???
ちなみに、検索文字列が1文字だけだと、手順3は必要ありません。 恐らく like 中間一致検索を単体で実行するよりも早いんではないかと。 でも、こんな糞な方法なんて出来ればやりたくな〜い・・・・・orz もっと良い方法ないかな〜 しかし・・・、フルテキストインデックスを構築すると復元手順が面倒臭くなるな・・・。 おまけに復元作業もコミット時点に戻す事が出来ないし。 あと、増分バックアップ機能が無いときたもんだ。 ロックエスカレーションもしやがるし。 値段が高いOracleと比べるのは酷な話だけど、SQLServer は (´・ω・`)ショボーン となるような中途半端な機能ばっかりだな・・・・。 愚痴になってスマン。 SQLServer愛好家の人がいたらスマン。 もっとSQLServer2005を調査します。 んで、解らんとこが出てきたら、また質問しに来ます! ノシ
225 :
NAME IS NULL :2006/05/17(水) 17:14:22 ID:apfAxcdl
Windows2000Server + SQLServer2000.STDで作業をしています。 データの入っているテーブルを テーブル定義及びデータ込みで 別名で複製することはできますでしょうか? (オリジナルはそのまま残します。ようするに完全コピー) テーブル数が約50個あるので、 一括でできる方法があるとうれしいです。 例) テーブルA→W_テーブルA(データもコピー) テーブルB→W_テーブルB(データもコピー) ・ ・ ・ テーブルZ→W_テーブルZ(データもコピー) 以上。
select into
227 :
NAME IS NULL :2006/05/17(水) 17:49:17 ID:apfAxcdl
>>226 トン。
えーと、その方法だと同構成のテーブルを
あらかじめ用意する必要がありませんか?
(私の認識不足でしょうか)
テーブル作成も含めて一括作成できるとありがたいです。
228 :
227 :2006/05/17(水) 17:58:28 ID:apfAxcdl
>>226 すみません。
SELECT * INTO W_A FROM A;
でいきました。
お騒がせしました&ありがとうございました。
しかしSELECT INTOだとインデックスは複製されないぞ! 単にデータ退避とかならいいとして、そうじゃなかったら要注意だぜ。
230 :
NAME IS NULL :2006/05/20(土) 09:34:59 ID:Nz3hdX5y
SQLServer2005 って、Windows認証を無効にすることが出来ないですか? SQLServer認証オンリーの運用だから、無効にしたいんだけど。 BUILTIN\Administratorsログインも無効にしようとしても無駄だったし・・・・・ どうしてOracleのようにWindows認証を無効にすることが出来ないんだよ・・・・ 出来る限りセキュリティーホールを埋めたいのにさ。
SQL Server認証は後方互換のために搭載されてる機能で将来廃止の方向だから 推奨の認証方式である統合認証を削る選択肢は用意されていないと思う。
>>230 BUILTIN\AdministratorsとBUILTIN\Usersは
ログイン無効には出来なかったが、削除は出来た。なんでだろう。
233 :
NAME IS NULL :2006/05/21(日) 10:53:18 ID:xV+s6Q50
リモート接続について質問です。(SQLServer2005) 既定のインスタンスへのリモート接続は可能ですが、名前付きのインスタンスへのリモート接続が出来なくて困ってます。 接続に使ったSQLCMDを以下に示します。 (両インスタンス共にリモート接続を許可) @sqlcmd -S Server -U sa -P **** Asqlcmd -S Server\Instance -U sa -P **** リモート接続においては、@は接続可能でAは接続不可でした。 ローカル接続においては、@Aともに接続可能でした。 接続不可時のエラーメッセージは以下の通り ================================================================================== HResult 0xFFFFFFFF、レベル 16、状態 1 SQL ネットワーク インターフェイス : 指定された Server/Instance の位置を特定して いるときにエラーが発生しました [xFFFFFFFF]. Sqlcmd: エラー: Microsoft SQL Native Client: サーバーへの接続確立時にエラーが発 生しました。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server が リモート接続を許可していないことが原因である可能性があります。。 Sqlcmd: エラー: Microsoft SQL Native Client: ログイン タイムアウトが時間切れになりました。 ==================================================================================
>>233 SQL Server セキュリティ構成でローカル接続のみになってない?
235 :
233 :2006/05/21(日) 11:11:35 ID:xV+s6Q50
>>234 いや、両インスタンス共にリモート接続を許可にしてあります。
>>233 名前つきインスタンスでポートを動的にしてない?
規定のポート(1433だったかな)以外でリモート接続するにはサーバ側で
SQLServer Browserが動いてないと繋がらないはず
237 :
233 :2006/05/21(日) 17:56:45 ID:xV+s6Q50
>>236 ありがとうございます!
無事に繋がりました!
感謝感謝!
しかし、SQL Browserが動いてないと駄目なのか・・・
そんなことBooks Onlineでは書いてなかった気がするがな・・・・
('A`)
ポートの動的(?)についても調べてみます。ありがと。
ノシ
T-SQLに全角を半角にする関数は用意されていますでしょうか? バージョンは2000です。
Enterprise Managerを使うと、列と列の間に列を作ることが出来ますが、 これをALTER TABLE またはその他なんかのコマンドでやるにはどうしたら いいですか?
>239 プロファイラでログとってみたら? たぶんなかったと思うが
超ド級の初心者です、Accessは使ってました SQL Server 2005 Express Editionをインストールしました サービス(SQL Server(SQLEXPRESS))も開始されてます ・・・ .mdfをどうやったら新規作成できるんですか? 本気でわかりません、ネットでも検索しましたが 「Visual Studio 2005から・・」みたいな解説しか見つかりませんでした
>>239 無い
EMの裏の処理では、DROPしてからCREATEしてる。
243 :
241 :2006/05/23(火) 11:47:23 ID:???
すいません、すげぇバカな質問ですね、スルーしてください 入門書買えっての・・>俺
>>241 SQLCMDから CREATE DATABASE userdb で作れる。
VS2005 Express Editionからはいろいろ制約が多くて常設のデータベースは作れない。
246 :
241 :2006/05/23(火) 11:59:09 ID:???
いまはSQL Server Management Studio Expressを追加でダウンロードできるからこれ使えば簡単。
>>242 厳密には
別名でcreate→insert→元テーブルdrop→新テーブルrename
どうでもいいけどねw
250 :
242 :2006/05/24(水) 02:32:24 ID:???
251 :
NAME IS NULL :2006/05/24(水) 11:31:05 ID:XbSlj+YX
すみません。 SQLServer2000スタンダードのメモリ管理について教えてください。 環境は CPU:Celelon2.4G メモリ:512M OS:Win2000サーバSP4 DB:SQLServer2000スタンダード です。 初期起動時は300M〜ちょいくらいなのですが、 ちょっと動かしているとメモリが暴暴発して 700M〜1000Mくらいになってしまいます。 このメモリ使用量を適度なサイズに抑えることは 設定で可能なのでしょうか?
>>251 max server memoryを調整。EMからも設定できる。
ただし2GB以下は自動調整が基本で、700M〜1000Mの数字が妥当な場合もある。
パフォーマンスモニタ等で前後を測定してどちらがパフォーマンスがいいかよく検討すること。
253 :
NAME IS NULL :2006/05/24(水) 13:31:18 ID:XbSlj+YX
>>252 ありがとうございます。
参考にさせていただきます。
254 :
NAME IS NULL :2006/05/25(木) 10:29:50 ID:mhvD28e7
SQLServer2005の参考書って極端に少ないよね・・・・ 何でだろ?
↑ ほかの参考書を真似て書くことができないから
MSDNが結構充実しているし、 TipsだったらMSMVPな人たちのBlogとかPASSJとか見れば事足りるから 別に参考書ってものも要らないなぁ。
あるテーブルをロックしつづけているプロセスをぶち殺したいのですが どのアホがロックしているのか知るにはどうすればよいのでしょうか ちなみにエンタープライズマネージャーは エラー1222:テーブルのロック要求がタイムアウトしました とぬかしてロック情報が一切表示されませんでした
258 :
257 :2006/05/25(木) 21:50:45 ID:???
失礼 sql server 2000です
>>257 sp_lock と sp_who でわかるけど、
EMのロック表示でエラーになるようならこちらもエラーになるかもしれない。
260 :
257 :2006/05/26(金) 01:38:59 ID:???
>259 ありがとうございます やってみます
261 :
NAME IS NULL :2006/05/26(金) 19:27:30 ID:gU6D8XHD
なんか、SQLServer Management Studio 不安定にならない? よく固まるんだが・・・・・
ちょっと重い事はあるけど固まって逝く事は無いけど。 むしろEnterprise Managerの方が突然死が多かった。 SQLServer2005beta入れた後はほとんど使い物にならなかったな>EM
ManagementStudioもEMも落ちたことないな クライアント側にもちゃんとSP当ててるか?
264 :
NAME IS NULL :2006/05/27(土) 14:30:17 ID:cnUZHQ+0
同じワードで始まる名前のテーブルに一括してアクセス件を与えたいのですが、 なにかいい方法はありませんでしょうか。 GRANT SELECT ON table_* TO hoge ↑みたいなことがしたいのですが、アスタリスクは使えませんよねぇ。 EnterpriseManagerからユーザーまたはロールのプロパティーで 大量のチェックを付けるしかないんでしょうか?
@自分の端末のmanagemment studioからファイル(エクセルとかCSV)をインポートするとき エラーが出るんだけど、 リモートデスクトップでSQLサーバーが入っている端末にログイン したmanagemment studioからインポートするとエラーが 出ないんだけど、そういう物なのですか? いちいちインポートするためにリモートデスクトップでログイン するのめんどくさいんですけど。 Aテーブルを作らずにCSVファイルをインポートすると エラーが出ました。よくよく調べると50バイト以上のデータを インポートすると出るようです。(これまた)そういう物なのでしょうか?
267 :
NAME IS NULL :2006/05/28(日) 01:47:53 ID:3yfmUsmZ
↑Aですが、補足です。フィールドが50バイト以上です。
268 :
ExcelVBA+MSDEの解説本 :2006/05/28(日) 16:29:41 ID:YTgFIkiG
質問させて下さい ExcelVBAでMSDEを操作してみたいのですが、この二つを連携させた解説本または、この二つの連携を学ぶことのできる解説本をご存知でしたら、教えてください 本屋で探しても ExcelVBAとAccess AccessからSQLServer といった連携の題名の本しかないので、これらの本 では、ExcelVBAとMSDEの連携および操作を学ぶことができなさそうです。 データベースはXOOPS立ち上げのためにMySQLを使った事があるという程度の初級者です 御助言お願いします
269 :
NAME IS NULL :2006/05/28(日) 16:35:34 ID:NsxyhI0v
朝、姉ちゃんが俺の部屋に起こしに来てたんだけど
俺は連日の2ch閲覧による夜更かしで眠すぎて起きれなかったんだ
全然起きる気の無い俺を見て、姉ちゃんが部屋に入ってきて、俺に馬乗りになる
鬱陶しいなーとか思ってると、姉ちゃんが寝てる俺の耳元で
「朝だぞおおおお早く起きなさああああい」
寝起きの悪い俺は姉ちゃんにムカついてガバっと起きた
「キャッ!!」
起きた瞬間俺の唇に何か柔らかい感触、びっくりして目を開けたら
俺が急に起きたせいでベッドの上に転んでる姉ちゃん
「え・・・と、今口に何か当たったんだけど・・・」
「ん・・・んー?wなぁに?w」
二人でちょっと無言になっちゃったけど気づくと姉ちゃんの手が俺の股間に乗ってるのがわかった
「ちょっと姉ちゃん、とりあえず降りて、ベッドから降りて!」
俺は焦って、慌てて姉ちゃんをどかそうとする。
「なによwせっかく起こしてあげたのにー・・・あ、そっかwコイツのせいかw」
俺の股間の硬さに気づかれた、俺は思わず逃げようとしたが寝起きで力が入らない。
「ちょっとおとなしくしててw」
そう言うと姉ちゃんが両手で俺の股間に手を置き、触りだした。
初めて他人に触られる俺の股間・・・みるみるうちに大きく膨れ上がるのが自分でわかった
「あ・・・wおっきくなってきた・・・もうwしょうがないなぁw」
そう言うと姉は俺のトランクスの中に手を入れてきて
長くなりそうなんで続きはこっちで↓
http://hobby7.2ch.net/test/read.cgi/point/1146442166/
ワッフル、ワッフル
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE でトランザクションかけてる1つのストアドプロシージャを 2つ同時に実行すると1つが エラー1205 前略デッドロック以下略 でこけやがりました SQL Server2000って先発のトランザクションが コミットするかロールバックするまで後発が待機する ようにするにはどうすればいいのでしょうか データベースは1こです
条件によってロックの順番がまちまちだったりしないだろうな
273 :
271 :2006/05/30(火) 00:09:16 ID:???
レスありがとうございます ロックする順番はいつも同じです 途中で何らかのエラーになったら必ずロールバックして処理を終了し スキップして次にいくことはないです
sql server 2000 と 2005 は共存可能でしょうか? というより sql server 2000 を 2005 にアップグレードした場合、 sql server 2000 と互換性をもったままデータベースを保持する事はできませんか? 客先の環境が sql server 2000 なんですが、2005 の環境を構築したいのですが、 2005 にあげると客先の 2000 のデータベースの保守ができなくなると困るな、と。 やはり別の環境を構築するしかないでしょうか?
片方をVirtualPCにでも入れとくとか
SQL Server 2000と2005の環境があります。 VB.NETで作られたプログラムからのクエリですが、プロファイラで見てみると 2000 は exec sp_executesql N'省略....', @StartDate = '05 30 2006 12:00 AM' となっているのに対し 2005 では exec sp_executesql N'省略....', @StartDate=''2006-05-30 00:00:00:000'' のように 引用符 (') がなぜか2重についてしまい SQL がエラーをおこします。 同じプログラムから SQL Server 2000 と 2005 にアクセスした挙動が異なるので、 プログラム側の問題ではなくてSQL SERVER側の問題かと思っています。 上記が発生する原因と対処方法を御存知の方、アドバイス頂けると幸いです。
>>278 「2000だと動くけど2005だと動かないプログラムの書き方をしている」
というプログラム側の問題かもしれないじゃん?
プログラムも晒したら?
>>278 最低でもVB.NETのバージョン、ADO.NETかどうか(SQLClientかOleDBか)、
MDACなどドライバの種類とバージョンぐらい書いとくもんだ。
ここまで書いて思ったが、MDACが古いとかじゃないの?
MDAC は Native Client に変更になったから注意
ストアドプロシジャか何かで、SQL Serverが稼働しているPCから見えるネットワークドライブなどを 取得する方法はないでしょうか?
283 :
NAME IS NULL :2006/06/01(木) 17:07:14 ID:jbHKZ6Mc
ODBCでSQLに接続する際の「システムDSNの設定」で 「接続するSQL Server名」でドロップダウンボックスに表示される 過去の履歴を消去する方法をご存知の方がおられましたら教えてください。 よろしくお願いいたします。
あれは履歴じゃなくて、近所にいるサーバを列挙してるんだと思うが。
285 :
NAME IS NULL :2006/06/01(木) 17:40:52 ID:jbHKZ6Mc
同じサーバ名の重複や、間違えて入力したもの等がいつまでも残ってるんですが・・・ ちなみにIP指定したサーバとPC名で入力したサーバも重複表示されてます。 サーバがおかしいだけ・・・でしょうか?
それは知らない。 そういうのはどーせレジストリに入ってるんだろうから、「間違えて入力したもの」 をレジストリから全検索すれば。
だがネットワークドライブはログインユーザが繋いでいるものなので 別ユーザからはどうやっても見れないような気もする
290 :
ExcelVBA+MSDEの解説本 :2006/06/01(木) 22:37:58 ID:nF0ivfEo
別の場所に質問します。 こちらでは,場所違いだったようです。 失礼致しました。
291 :
287 :2006/06/02(金) 08:11:43 ID:???
292 :
NAME IS NULL :2006/06/02(金) 09:46:44 ID:3J9HmheU
SQLServer2005には、Oracleで言うところのバインド変数という機能はありますか? つまり・・・、下記のSQL文の違いはwhere句の値部分だけですよね。 @ SELECT * FROM hoge WHERE name = 'Nancy' @ SELECT * FROM hoge WHERE name = 'Mike' そういう場合は、@でコンパイルや実行計画作成などの処理がされたら、 Aではその処理をスキップする機能があるのか聞きたいのです。 ストアドプロシージャでは備わっている事は解ったのですが、 VBなどのクライアントから発行されるSQL文にも対応可能かどうか。
はじめまして よろしくご教授お願いいたします。 概要:SQL-serverのデータベースに300,000件(30万件)のデータを BCPコマンドを使用してアップロードした時に、インポートは うまく行きません。 事象:エラーの内容は、1件目から、日付項目にエラーと出るのですが、 実際はデータ的に問題ありません。 (※@ 既にそのデータは、ローカル間の環境での試験には成功しています。) (※A 200,000件(20万件)のデータでのサーバー間での環境では成功しました。) 懸念:今回、失敗したのは、@のサーバから、BCPコマンドをたたいて、 AのサーバのDBにデータをインポートします。 ローカルのPCでの作業ではうまく行ったで、サーバー間の環境では うまく行かないため、何かしら制限があるのかと思いました。 やはり、サーバー間同士だと、なにかしら、数の制限があるのでしょうか? SQL-serverのデータの許容範囲の設定のところは十分クリアできるデータサイズです。 いろいろ、試行錯誤したんですが、わかりません。 どなたか、知識ある方は教えていただけると、助かります。 すみません。m(_ _)m
サーバーとクライアントで言語設定、日付の設定が違うとか・・・
bcpで使ってるオプションは -n ? -c ? -f ?
>>295 参考にして、明日 チェックしてみます m(_ _)m
>>296 送り込むサーバには -S オプションを指定しています。
>>297 -n -c -w -N -f のどれも指定しない場合は毎回フィールドのストレージ型とかプレフィックス長をきいてくるけど
毎回答えてるの?
>>298 いえ 必要な物は全て 定義しています。
-U (USER名)
-P (PASS)
-f (フォーマット定義)
-S (送り先サーバー名)
-e (エラーファイル出力) + result
このオプションでローカル環境でもサーバー間環境でも200,000(20万件)
は成功しました。
でも 300,000(30万件)まで、データ数を増やすと、エラーになってしまいます。
エラーじたいは、日付エラーで一行目からインポートできません。
そのエラーデータでも、200,000(20万件)に削減すれば、正常終了して
インポートされるので…
どうしていいやら、こまりました
ローカル環境なら、1000,000(一千万)データでもインポートは正常にできます。 データの作成もツールで作成していますので、データの不具合ではない事くらいしか 判別できません。
SQL Server 2000 の UNIQUE INDEX って、JET と違って 2行以上に NULL が 含まれると制約に違反しているとか言ってくるけど、 「NULL は許可して、NULL 以外の行に重複が出ないようにする」 という要求を満たすことをみんなどうやって実現しているのカナ?カナ?
>>301 SQLServerはNULLも含めて索引を作ってしまうからね。
A1 主キー
A2 その他データ
A99 UNIQUE INDEX NULL許可
の場合の対応はこんな感じで別テーブルに切り出す。NULLの場合はこのテーブルにレコードが存在しない。
A1 主キー
A99 UNIQUE INDEX NOT NULL
初心者くさい質問で申し訳ないのですが SQL Server 2005 にて CREATE TABLE TEST_A( A_ID int IDENTITY(1,1) NOT NULL, A_NAME varchar(255) ) というテーブルにINSERTをしたときに採番されるA_IDを取得したいのですが、 INSERT後にSELECT MAX(A_ID) FROM TEST_A としても他ユーザがINSERTしていた 場合に数値がずれてしまいます。 上手く取得する方法はないでしょうか? オラクルだとシーケンスは別定義なので問題ないのですが。
SCOPE_IDENTITY()
305 :
303 :2006/06/08(木) 17:43:01 ID:???
>304 ありがとうございます。 助かりました。
データベース保守計画で作成したジョブをコピーしたいのですが いい方法はありますか? 同じ内容でデータベースが違うジョブをプログラム上でコピーして 作成するのが目的です。
MSDEのSP3aをSP4にしたいのですが、マイクロソフトからダウンロード してきたSP4を次のような記述のバッチで実行しても上手くいきません。 setup /upgradesp sqlrun BLANKSAPWD=1SECURITYMODE=SQL UPGRADEUSER=sa UPGRADEPWD= /L*v C:\MSDELog.log 一応アップグレードが始まったような感じでバー(グラフみたいな奴)が 伸びて行って何も言わずに終了するのですが、バージョンを確認しても SP3aのままです。 ログを見てみたのですが一番最後が「構成は正しく更新されました」と いうようなメッセージが出力されています。 どうやれば上手くいくかご存知の方、宜しくお願いします。
308 :
307 :2006/06/16(金) 23:33:06 ID:???
MSDE2000でOSはXpのSP3です。
310 :
307 :2006/06/17(土) 01:36:35 ID:???
対話型でセットアップしたらうまくいく? あとはSP4からsa のパスワード無しは許可しなくなったからその辺の影響とか。
312 :
307 :2006/06/17(土) 08:38:51 ID:???
>>311 対話型は試してないのです。
お客さんがバッチ実行するだけでインストールできるように
しとかないといけないので・・。
よく分かってないのですが、sp3の状態でsaにパスワードを
つけて(どうやって?)
UPGRADEUSER=sa
UPGRADEPWD=saのパスワード /L*v C:\MSDELog.log
として実行すればOKということでしょうか?
313 :
307 :2006/06/17(土) 08:41:39 ID:???
これで設定ということですね? osql -U sa sp_password @old = null, @new = 'complexpwd', @loginame ='sa'
かなり前にSP4あてたので記憶が曖昧だが… マイクロソフトからダウンロードしたファイルはアーカイブファイルなので Cドライブの直下に解凍されたフォルダがある。解凍後のフォルダにあるsetupを実行してみたら? まと外れだったらスマン。
315 :
307 :2006/06/20(火) 00:08:27 ID:???
>>311 >>314 どうもありがとうございました。
saパスワードを付与してから実行したところ、ちゃんとSP4に
アップグレードされました。
BLANKSAPWDのオプションが効かないのなら、そういう
メッセージを出してくれればいいのに・・。
316 :
NAME IS NULL :2006/06/20(火) 21:09:51 ID:UnuZbu+v
SQL分を教えて下さい。 キー1 キー2 項目A 項目B キー3 A B 100 200 20060621 A B 100 300 20060620 というようなデータがあったとき キー1 キー2 項目A 項目B A B 200 200 というように項目Aは同一キーでSUM,項目Bはキー3で新しい日付の データを活かすようなSELECTってどうすればできますか?
317 :
NAME IS NULL :2006/06/20(火) 21:25:47 ID:et/C7JSy
>>316 SELECT キー1,キー2,MAX(キー3),SUM(項目A) FROM TABLE GROUP BY キー1,キー2
こういうサブクエリ作ってさらに結合するしかないかな
318 :
NAME IS NULL :2006/06/20(火) 21:32:46 ID:et/C7JSy
ん?違うかな?「同一キーでSUM」の「同一キー」はどこまでだ?
319 :
NAME IS NULL :2006/06/20(火) 21:34:38 ID:UnuZbu+v
>>317 教えていただき、ありがとうございます。
このテーブルは1千万件データが入っているのですが
結構時間がかかりますよね。
本当の処理ではこのSELECTで抽出されて結果と約1億件データが
入っているテーブルとを比較して同一キーがあればSELECTした項目A
を加算、項目BをUPDATEしなければなりません。
ここまでの処理を1時間で終わらせる事ができるか心配です。
320 :
NAME IS NULL :2006/06/20(火) 21:36:00 ID:UnuZbu+v
>>318 ここでの同一キーはキー1,キー2です。
紛らわして申し訳ありません。
321 :
317,318 :2006/06/20(火) 22:10:10 ID:et/C7JSy
うーん。なるほど。普段小さいシステムばっかりだから、1千万件ものデータを 扱ったことはないなあ。
322 :
NAME IS NULL :2006/06/21(水) 15:35:59 ID:WnpBQn4q
今、自分がいる環境では何という種類のSQL Server が動いているのかをチェックする方法ってありませんか?
SQL Server2005 Expressはデータベースの 容量が4GBに制限されているようですが、 現在データベースが何B使っているかを 調べるにはどうすればよいでしょうか?
>>324 FILE_NAME 関数と FILEPROPERTY 関数
sysdatabaseって手もあるでよ
327 :
NAME IS NULL :2006/06/25(日) 23:54:41 ID:UBvWo12k
現在大規模なデータを取り扱う開発をしています。 9000万件のデータと500万件のデータをJOINし、空っぽのテーブルに INSERTしています。 INSERT処理自体は30分以内でCOMMITまで実行Sれているようなのですが、 この処理を行うとEnterprise Manageやクエリアナライザなども固まってしまい 困っています。サーバはかなり良いスペック(CPU、ディスクなど)で問題ないかと 思うのですがSQLServerがこの処理についてこれないのでしょうか?
>>327 重そうな処理ではあるが完全に固まるようならDISKの構成が悪いとかないかな。
たとえばグループも分けずにRAID5の巨大な仮想ディスクを1つを作って、
そこにOSやらスワップやらDBファイル、ログファイルを全部ぶち込んだらIOネックで動かなくなる。
しかし、SQL Serverってクソだよな。 offset つかえねーし。topでなんとかやろうにもかなり苦労する。 保守性が悪くなってしゃーないわこのクソが。マジきれそう。
offsetが使えないだけでクソと言い切れる程保守性が悪くなるだろうか
>>330 いやさ、ページ遷移を作る時にWhere句が多い場合、topで絞りこむと
Query文が見づらくなるんだわ。
offsetまではいかないまでも、Oracleみたいにnumrowsレベルでもいいから、もっと簡単な裏道がほしかった。
すまん。俺は日本語がクソだが。荒らし気味になってスマソ。
333 :
NAME IS NULL :2006/06/26(月) 21:49:57 ID:0i/5G9VY
>329 ストアドプロシージャ使えばいいじゃん。 一時テーブル+IDENTITY 使えばよ。
演算にエイリアスを使う方法はないんですか? SELECT aho AS A , hoge AS B , A+B AS C FROM fuga; みたいに。
>>334 SELECT A , B , A+B AS C FROM (SELECT aho AS A , hoge AS B FROM fuga) fuga
あんまり意味ないな。
335 ありがとうございます! ACCESSなら直接エイリアスを使えたのに、SQLSERVERだと使えなくて困っていました。
初歩的な質問で失礼します。 今回初めてSQL Serverを使うのですが、 Money型って使って何かメリットありますか? ちなみにバージョンは2005です
>>337 高精度、小領域。
とりあえず判らない時は BOL(Books Online) を開くクセを付けると良いよ。
339 :
337 :2006/06/28(水) 18:01:19 ID:???
>>338 ありがとうございます。
decimalだと長さ19のところが8で済むということですね。
続いて質問で申し訳ないですが、
メリットはそれだけでしょうか?
逆にデメリットのようなものはあるのでしょうか。
小数点の長い計算が出来ない 小数点以下で精度を求められるときびしい
データサイズが大きくなりすぎたので、該当すると思われるテーブルを 削除したのですが、一向にサイズは小さくなりません。 他にどんなアクションが必要になるのでしょうか? 初歩的な質問ですいません。。
>>341 DBCC SHRINKDATABASE
343 :
341 :2006/06/30(金) 13:19:20 ID:???
>>342 ありがとうございます!
解決できました。
344 :
344 :2006/06/30(金) 20:13:53 ID:xfwuZM/n
ヽ(`Д´)ノウワァァン!! Access2003 ADP+MSDE2000 で、一時テーブルにデータを入れて フォームに連結してフォームから内容を更新しようとしたら、db_owner の権限を 持つアカウントなら更新できるのにそれ以外のアカウントでログインしてるとなぜか 「このレコードセットは更新できません。」ってステータスバーに出てきて更新できないyo!! 〜再現手順〜 1)フォーム1 を作って、開くときにこんなプロシジャを貼り付ける Private Sub Form_Open(Cancel As Integer) Dim RS As New adodb.Recordset CurrentProject.Connection.Execute "create table #hoge" & _ "(id integer primary key, name varchar(10))" CurrentProject.Connection.Execute "insert into #hoge " & _ "values(1, 'mona')" RS.Open "#hoge", CurrentProject.Connection, adOpenStatic, adLockOptimistic Set Forms("フォーム1").Recordset = RS End Sub 2)フォーム1に ID と name 列をコントロールソースにしたテキストボックスを追加。 3)やおら フォーム1 を開く。 4)フォームから内容を変更できない。しかし、VBA でSQLを飛ばすと INSERT も UPDATE も自由自在。 db_owner なアカウントならフォームから内容を更新できる。 全ユーザに db_owner つけるのはアレすぎるので、だれか回避の方法を 知っていたら教えてください…
346 :
NAME IS NULL :2006/07/01(土) 10:57:19 ID:60RgFSxW
SQLServerってデッドロックよく発生しませんか? ただ単に俺がアフォなだけ? 特にクラスタ構成だとデッドロックが発生しやすいって聞きましたがマジっすか? SQLServer2000です。 みんなデッドロックが発生しないように気をつけてることって何ですか。 テーブル更新順序はきちんと決めてますか?どんなルールで決めてます?
>>346 ロック解除待ちと、デットロック、別のトランザクションがデータを更新したことによるトランザクションの失敗。
この辺を全部ごちゃ混ぜにしてデットロックと勘違いしている人が多いが、
マルチバージョニング方式に比べて共有ロック方式のSQLサーバーが多いのはロック解除待ち。
あとの二つはさほど変わらない。デットロックが多いとするとアプリの作り方に問題あり。
クラスタリングに関しては聞いたことが無いけど、SQLサーバーのフェイルセーフクラスタリングのことなら
基本的には片方は待機してるだけだからデットロックが増えることは考えにくい。
>>347 訂正 フェイルオーバークラスタリング
別のトランザクションがデータを更新したことによるトランザクションの失敗というのは
SQL Serverのクライアントカーソルもしくはサーバーカーソルなどで楽観的排他を使ったときと、
OracleでSerializableトランザクションを使ったとき起きる。
349 :
344 :2006/07/01(土) 13:35:24 ID:???
>345 Σ(゚Д゚ )そいつは名案気がつかなかった早速帰ってやってみよーッと!!
ストアドプロシージャーによる変数代入について質問させてください。 { @intID Int } As DECLARE @intLEVEL Int SELECT @intLEVEL = LEVEL FROM M_USER WHERE ID = @intID --(1) IF @intLEVEL = 1 BEGIN SELECT HOGE1,HOGE2,HOGE3 FROM T_HOGE WHERE HOGE_ID = 1 --(2) END ELSE(略) このようなストアドを作りASP.NETから呼び出し、(2)の結果をDataSetに格納しようと考えています。 しかし、実際には(1)の検索結果もDataSetに格納されてしまいます。 SELECT以外でテーブルの値を変数に代入する方法は無いでしょうか?
>>350 SET @intLEVEL = (SELECT LEVEL FROM M_USER WHERE ID = @intID)
352 :
350 :2006/07/01(土) 16:53:18 ID:???
353 :
NAME IS NULL :2006/07/02(日) 16:45:19 ID:LR878fe9
>>346 >みんなデッドロックが発生しないように気をつけてることって何ですか。
>テーブル更新順序はきちんと決めてますか?どんなルールで決めてます?
俺も気になるんだが、ルールってあるの?
同じ呼び出し順で。
355 :
NAME IS NULL :2006/07/02(日) 22:08:27 ID:zA3BgFa9
SQL Server 2000で、 「現在のトランザクションのトランザクションID」 (=トランザクションごとに一意な識別子) を取得することはできませんか? SQL Server 2005だと sys.dm_tran_current_transactionビューを利用できるのですが、 2000ではそれに準じるものを見つけられませんでした
MSDE 2000のデータをSQL Server 2005 Express にコンバートしたいのですが、手順がわかりません。 MSDE でBackupしてSQL Server 2005 ExpressでRestoreしてみたのですがだめでした。 ぐぐってもみましたがどうも見当たりません。 ご教授おねがいいたします。
>>356 SQLServer2000互換のデータベース作成してそこに同じテーブルつくってやっても駄目?
>>356 一番簡単なのは2000からデタッチして、2005にアタッチ。
359 :
なな子 :2006/07/03(月) 09:25:23 ID:SRsT2II+
ALTERできるオブジェクト権限を与えるにはどうしたらいいでしょうか? よろしくです。
360 :
なな子 :2006/07/03(月) 10:11:28 ID:SRsT2II+
ALTER TABLEできる権限です。。。
361 :
NAME IS NULL :2006/07/03(月) 10:18:27 ID:XoYZ+VD3
トランザクションがcommitされた直後に あるストアドプロシージャを走らせたいのですが、 なにかうまい手はないでしょうか? SQL Server 2005
362 :
344 :2006/07/03(月) 11:54:39 ID:???
>345 Windows 統合認証を使う方針なので、sa 案は却下ですた。 とりあえずログインするアカウントが tempdb 上の db_owner になるように すればフォームから一時テーブルの Recordset を更新できるようになったけれど、 今度はサービスが再起動すると tempdb の権限がリセットされてしまう問題が… tempdb に必要な権限を付与するプロシジャを作って起動時に実行するよう 設定しようとしたら、今度はプロシジャ内で USE が使えないという罠に当たりました。 起動時に tempdb の権限をうまく書き換える方法や、それ以外の方法で Access 2003 のフォームからレコードセットを更新可能にするうまい方法を ご存知でしたら、ぜひ教えてください。
>357 >358 ありがとうございます。 今回は、MSDE、SQL Server 2005を両方インストールして、 Management Studio にて、バックアップ→復元でうまくいきました。
SQL Server 2000 のトリガで、レコードが INSERT, UPDATE, DELETE された時 よりも細かく、たとえば、あるテーブルのあるフィールドが UPDATE された時、 などのようにレコード単位ではなく、フィールド単位にトリガの起動を 行なう事はできますか?
>>364 直接その機能は無いので、代わりにUPDATE()関数を使って判定。
IF (UPDATE(col1) OR UPDATE (col2))
BEGIN
処理
END
sql server2000+windows2000serverで あるテーブルがいつどんなSQL文でどういうロックがかけられていつロック解除されたのか ログをとりたいのですが、どうやればいいのでしょうか
処理に書き出す文をそのつど追加すればいい
>366 SQLプロファイラでドウヨ でもどのテーブルに、は出なかったっけかな
>>368 レスありがとうございます
プロファイラも検討したのですが、
いつロック解除されたのかがわからないのと
ロックが行ロックとか共有とかが多分わからないので
欲しい情報が手に入らないです。
370 :
NAME IS NULL :2006/07/10(月) 11:15:42 ID:y5JykUEH
>>362 (
>>344 )
tempdbは起動時に再作成されるから、ユーザは初期化される。
従ってmodelデータベースにAccess
で使用するログインIDをb_owner権限で作成すれば良い。
s/ログインIDをb_owner/ログインIDをdb_owner
>>362 (
>>344 )
ただし、modelデータベースに作成されたdbオブジェクトは、
新規DBを作成した場合、一緒にそのDBに作成されるから、
必要でないユーザはドロップしなければならない。
373 :
NAME IS NULL :2006/07/10(月) 16:22:26 ID:irmUM/Og
SQL Server Management Studio Express でアカウントの追加や設定、削除を行っていたところ、 「ユーザー’サーバー名\ログイン名’はログインできません」となってログインすることすらできなくなりました。 Visual Studio 2005 のほうでも「規定のデータベースにアクセスできませんでした」となって、 データベースさえ開くことができなくなりました。 どうすればログインできるようになるのでしょうか?? あと、SQL Server 2005 のアカウントの設定が難しいのでアカウントの設定方法などの説明している ホームページがあるのなら教えてほしいのです><
どなたかご存知の方がいらしたら情報ください。 SQLSERVER2000とSQLSERVER2005間にてレプリケーション設定をした後 実行を行ったのですが下記のエラーがでて出てしまいます。 <中略>レプリケーション エージェントでエラーが発生しました。 レプリケーション エージェントはジョブ ステップの再試 行間隔中に再起動するように設定されています。<以下略> 同じようなエラーに遭遇した方、いらっしゃいますでしょうか。 解決法御座いましたら指南お願いいたします。
375 :
344 :2006/07/11(火) 09:58:16 ID:???
>370,372 やはり model に権限つけておくしかないでしょうかね…。 >372 にあるように その後 create した DB にも権限が引き継がれてしまうのを嫌っていました。 しかし、これ以上 DB を増やすことも当面無いだろうし、他のユーザに create database 権限を与えているわけでもないので、とりあえず model に db_owner で追加しておくやり方で考えます。ありがとうございました。
テーブルには、制約を設けることで、データの整合性を持たせることが、できる。 たとえば、主キー制約なら重複したデータを排除できる。 しかし、ビジネスモデルの整合性などは、困難である。このような場合には、トリガー機能を利用するとよい。 次の、テーブルt1、t2に合計金額(sum)と明細金額(f1)の制約を設けたい。 t1 t2 no sum no f1 1 100 1 50 1 200 1 50 2 100 2 50 2 50 t2のf1フィールドは売上明細金額でnoは伝票番号である。 t1のnoは、t2のno(伝票)を表し、sumはその合計が格納される。 t2テーブルのf1が更新された場合、 t1のsumフィールドを更新する関数(プロシジャ)tf()が定義されている場合。トリガーを定義するSQLを答えよ。 CRATE TRIGGER トリガー名 ○ INSERT OR ○ on ○ for each row execute procedure tf() ア.UPDATE イ.DROP ウ.AFTER エ.BEFORE オt1 カ t2
SQL-Serverの負荷テスト、皆さんどうやっていますか?
SQL Server アンインスコして、再度同じバージョンの SQL Server インスコしたら、以前使っていたデータベース のファイルは消されてしまいますか? それとも再び使えるようになりますか? 今は念のため全部テキスト(SQL命令文、ほとんど insert 文) にダンプしているんですが、ちょっと面倒くさい。
>>378 ファイルが残っているなら大抵アタッチすれば使える。
実際にやるときはアンインストール前にデタッチして別の場所にコピーしておいたほうが安全。
dbo以外のユーザーを使っているならその辺の再設定は必要。
380 :
NAME IS NULL :2006/07/19(水) 19:28:49 ID:Q3VImW7n
SQLServer2005を使用してます。 プロファイラで出力するログを、CSVとかテキスト形式で出力することは可能でしょうか? メモ帳や秀丸などのエディタでも、ログファイルの内容を確認したいのです。
381 :
NAME IS NULL :2006/07/20(木) 11:49:44 ID:oOcpS5y7
MySQLのReplaceみたいにデータがあるときはUPDATE、データがないときはINSERTになる命令は MSSQLSERVER2000にはないのでしょうか? 調べてみるとRESTOREでファイルの復元が〜という今回やりたいこととは違うものしか載ってないです。
ローカル環境で小規模DBを構築しています。 テーブル自体の数は少ないのですが、データを18万件近く空テーブルに追加しないといけません。 テキストファイルから、データをインポートしたときはうまくいったのですが、 そのテーブルをフォーマット変換しながら別のテーブルに全件追加しようとすると処理が3時間かかっても全然終わりません。 ローカルに環境を作った時点でまちがっていたのかなあ… 単純に全件追加したいだけなんですけど。
>>383 肝心なことを書いてないから、やり方が悪いとしかいえない。
その処理のためにどんなツールや言語を使ってるのかな?それともSQLだけで処理してる?
>383 384にほぼ同意だけど、INDEXやTRIGGER作ってるなら、一旦消してから あとでINDEX作るなりTRIGGERに対応する処理するなりしたほうがいいぞとだけ言っておく。 クエリアナライザ上で流してるなら、どこでコストかかってっか調べてみれ。
386 :
NAME IS NULL :2006/07/20(木) 20:49:39 ID:oKg9alEP
ID --- 2 null 1 というテーブルで、正順かつnullが最後になるようソートしたいのですが、 SELECT ID FROM foo ORDER BY ID とソートをかけると下のようになります。 null 1 2 SELECT ID FROM foo ORDER BY (CASE WHEN ID Is Null THEN 1 ELSE 0 END), ID なら意図した通り 1 2 null となるのですが、これよりスマートな方法で意図する通りソートできませんか?
>386 何をどうしたらおまいさんがスマートと感じるのかわからんが、 とりあえず他の方法が欲しいってことなら、 SELECT IDENTITY(1,1) TID, ID INTO #TBL FROM foo WHERE ID IS NOT NULL ORDER BY ID INSERT INTO #TBL (ID) SELECT ID FROM foo WHERE ID IS NULL SELECT ID FROM #TBL ORDER BY TID という方法もある。 複雑なときはCASE式を弄繰り回すより こっちの方が何やってるかがわかりやすい場合もある。
>>387 テーブル作るって手があったんですね、ありがとうございます。
てかIDENTITY列ってこうやって追加できたんだ…。
389 :
NAME IS NULL :2006/07/21(金) 13:06:03 ID:Dn6RIwww
>>386 SELECT ID FROM foo ORDER BY ISNULL(id, 9999)
1 2 3 : 9998 (null) (null) (null) 9999
>>386 >>390 SELECT t.ID
FROM foo t
ORDER BY ISNULL(t.ID, (SELECT MAX(t2.ID) + 1 FROM foo t2))
392 :
NAME IS NULL :2006/07/21(金) 16:20:22 ID:Dn6RIwww
>391 なんかもう、やけくそやなw ID NUMBER(4,0) で、すでに 9999 が入ってたら、 オーバーフローのエラーでこけるぞw
select 0 as f1, ID from t where ID <> null union all select 1 as f1, ID from t where ID = null order by f1, ID
395 :
NAME IS NULL :2006/07/21(金) 22:20:52 ID:O1DoGmnz
特にSQLServerをシャットダウンせずにWindowsをシャットダウンしても SQLServerは正常にシャットダウンされますか?
>394 出力フィールドが増えてるがなw >395 Windowsのシャットダウンの仕方による。
397 :
394 :2006/07/22(土) 08:56:34 ID:???
>>396 フィールド削りたいなら、selectで囲みなさい。
つか、そこまで書かないとわかんないのかー
>397 わかるけどさ、プラン見たら、へこむよ。
>>398 サブクエリを使ってもフィールドを減らすぐらいでプランはそんなに変わらない。
この程度でいちいち中間テーブルを作ったりはしないと思う。
むしろやばいのはこの辺じゃね? is null つかえよ〜〜
where ID <> null where ID = null
>399 'is null' と '= null' って動き違うのん? 教えておくれ。
>>400 NULLを含む比較演算はtrueでもfalseでもないunknownを返す。
NULL = NULL は常にunknownになるため where xx = null がtrueになることはない。
ただし MSSQLで set ANSI_NULLS OFF の場合は trueになる。
>401 へぇー!勉強になったよ、ありがとう。 Is Nullしか書いたことないけどさ、正しい選択だったみたいだねー。
たまたま
便所質問 SQLserverで長さ0の文字列は、NULL扱いになるの?
ふーん OracleはNULLになるけどね。
>406 Oracleは長さ0の文字列 is NULLでもtrueにしちゃうだけで、 カラムにデータを入れるときは長さ0の文字列とNULLは不思議と別扱いになってるんだよ。 別扱いにしてるのなら、ちゃんと比較式でも別扱いにすればいいのにね。
>>407 9iで試してみたけど、
’’で代入したデータはNULLで扱われるよ。
NULLで扱われるから、=’’は真にならない。
移行組みは気を付けんとはまるねw
SQL server2000とVB6やC#の環境で、 bcp "select * from テーブル where あれがああ" queryout というような「条件指定してbcp出力」というのを、SQLDMOでやりたいのですが、 いろいろ調べたんですが、 「ビューを作って、View.ExportData(BulkCopy)」 という方法しか見つかりませんでした。 SQLDMO.DataBase.Views.Add(View)でビューは作れることは作れるのですが 「一時ビュー」みたいなのはないので、常に本物のビューを作ったり消したり しなきゃならなくて、どうも納得いきません。 エラー処理とかを考えるとBCPコマンドをシェル実行するわけにも行きません。 どうしたらいいでしょうか。 SQLDMO以外で出来るんだったらそれでもいいです。
SQL Serverで、削除されたデータ領域の最適化ってどうやるんでしょう? PostgreSQLでのVACUUMみたいなことをやりたいのですが。
>>410 レコードは8Kのページ、8ページのエクステントといった固定の単位で管理をしていて、
空きページの再利用は自動で行われる。このためVACUUMは不要。
反面、固定長のページ管理なのでページサイズを超えるレコードの扱いに制限が出たり、
レコードサイズによっては無駄な領域が出来てしまう。
索引の断片化の解消なら DBCC DBREINDEX か ALTER INDEX REBUILD
未使用の領域をOSに返すなら DBCC SHRINKDATABASE (断片化の解消にはならない)
>>411 レスありがとうございます。
戴いた情報でググってみます。
>409 ??? やりたいコトは、クライアント側でデータをテキストファイルに落としたいってことだよな? お前さんの書いていることは、一時ビューを思いつくのに一時テーブルを思いつけないとか、 エラー処理の書き方がわからないとか、そんな風にしか見えないんだけど?
414 :
NAME IS NULL :2006/07/25(火) 11:52:38 ID:wEpeM7PJ
現在、個人情報と成績をまとめたテーブルがあります。 個人情報には姓、名、生徒番号が記録されていて成績には生徒番号、実施テスト名、教科ID(0〜4で教科を表す)、 得点が記録されています。 これを外部結合と内部結合を使って、1行で生徒一人の成績を表示する方法がわかりません。 現状だと内部結合が上手くできないのでAAさんとBBさんの表示のとき 姓、名、生徒番号、実施テスト名、 教科ID 、得点 A、A、生徒番号1、実施テスト名、教科ID=0、得点 A、A、生徒番号1、実施テスト名、教科ID=1、得点 ・・・ B、B、生徒番号2、実施テスト名、教科ID=4、得点 となってしまいます。 表示したいのは・・・ A、A、生徒番号1、実施テスト名、教科ID=0の得点、教科ID=1の得点、・・・教科ID=4の得点 B、B、生徒番号2、実施テスト名、教科ID=0の得点、強化ID=1の得点、・・・強化ID=4の得点 という感じです。
415 :
414 :2006/07/25(火) 11:57:32 ID:wEpeM7PJ
個人情報テーブルのデータ 姓、名、生徒番号 A、A、1 B、B、2 C、C,、3 ・・・ 成績テーブルのデータ 生徒番号、実施テスト名、教科ID、得点 1 、 1、 0 、50 1 、 1、 1 、50 1 、 1、 2 、50 このように記録されています。
416 :
NAME IS NULL :2006/07/25(火) 12:42:20 ID:wvhDqWCH
>>415 select
A.姓,
A.名,
A.生徒番号,
(select B.得点 from 成績テーブル B where B.教科ID = 0 where A.生徒番号 = B.生徒番号) as 教科ID=0の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 1 where A.生徒番号 = B.生徒番号) as 教科ID=1の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 2 where A.生徒番号 = B.生徒番号) as 教科ID=2の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 3 where A.生徒番号 = B.生徒番号) as 教科ID=3の得点
from
個人情報テーブル A
where
417 :
415 :2006/07/25(火) 15:53:22 ID:wEpeM7PJ
>>416 サブクエリの中にWhereが2つあると言われてエラーになりました。
でも考え方は分かったのでやってみたのですが、今度はサブクエリの中身が変わりません。
(生徒番号が変わったのだからサブクエリの中身も変わってほしいけど1人目のデータのままになっている)
表示したいのは・・・
姓、名、生徒番号、実施テスト名、教科ID=0の得点、教科ID=1の得点、・・・教科ID=4の得点
A、A、 1 、 1 、AのID=0の得点、AのID=0の得点、・・・AのID=4の得点
B、B、 2 、 1 、BのID=0の得点、BのID=0の得点、・・・BのID=4の得点
現状は・・・
姓、名、生徒番号、実施テスト名、教科ID=0の得点、教科ID=1の得点、・・・教科ID=4の得点
A、A、 1 、 1 、AのID=0の得点、AのID=0の得点、・・・AのID=4の得点
B、B、 2 、 1 、AのID=0の得点、AのID=0の得点、・・・AのID=4の得点
となってしまいます。
バージョンはMSSQL2000、 OSはWinXP Proです
418 :
416 :2006/07/25(火) 16:15:57 ID:???
>>417 ごめん。
Where句を2重で入れちゃってた。
ところで、オマイが書いた表示したいのと現状の違いが解らないのだが? どこか違ってるか?
↓SQL文を修正した。これでも駄目か?
select
A.姓,
A.名,
A.生徒番号,
(select B.得点 from 成績テーブル B where B.教科ID = 0 and A.生徒番号 = B.生徒番号) as 教科ID=0の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 1 and A.生徒番号 = B.生徒番号) as 教科ID=1の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 2 and A.生徒番号 = B.生徒番号) as 教科ID=2の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 3 and A.生徒番号 = B.生徒番号) as 教科ID=3の得点,
(select B.得点 from 成績テーブル B where B.教科ID = 4 and A.生徒番号 = B.生徒番号) as 教科ID=4の得点
from
個人情報テーブル A
419 :
415 :2006/07/25(火) 16:38:51 ID:wEpeM7PJ
>>417 現状のほうはBさんの行にAさんの成績が入っちゃってます。
(後に続くCさんの成績もAさんの成績になってる)
やりたいことはAさんの行にはAさんの成績、
Bさんの行にはBさんの成績、といった具合です。
自分のSQLだと全成績がAさんの物になってしまうので少しいじってみたらサブクエリは複数の
結果を返えせないと怒られました。
書いてもらったSQLでやってみたら列のプレフィックスがテーブル名と一致しないかクエリ内の別名と
一致しないと怒られました。
420 :
NAME IS NULL :2006/07/25(火) 19:20:07 ID:hUCbunzt
select A.生徒番号, A.姓, A.名, B.得点 教科0得点, C.得点 教科1得点, … from 個人情報テーブル A left join (select 生徒番号, 得点 from 成績テーブル where 教科ID = 0) B on A.生徒番号 = B.生徒番号 left join (select 生徒番号, 得点 from 成績テーブル where 教科ID = 1) C on A.生徒番号 = C.生徒番号 left join : 多分こっちのほうが速い。 検証してないので動く保障は0だけど。
SELECT A.姓, A.名, A.生徒番号, B.実施テスト, SUM(CASE B.教科ID WHEN 0 THEN B.得点 ELSE 0 END) 教科ID=0の得点, SUM(CASE B.教科ID WHEN 1 THEN B.得点 ELSE 0 END) 教科ID=1の得点, SUM(CASE B.教科ID WHEN 2 THEN B.得点 ELSE 0 END) 教科ID=2の得点, SUM(CASE B.教科ID WHEN 3 THEN B.得点 ELSE 0 END) 教科ID=3の得点 FROM 個人情報テーブル A LEFT JOIN 成績テーブル B ON A.生徒番号=B.生徒番号 GROUP BY A.姓, A.名, A.生徒番号, B.実施テスト
422 :
415 :2006/07/26(水) 10:15:19 ID:I4dIgpNo
>>420 >>421 結局汎用性を落とすからやりたくない方法で対処することになりました。
テーブル構成を変更して生徒名とテスト名をキーにして科目ごとに得点を持つことになりました。
でもせっかく書いてくれたSQLなので個人的に解析して勉強させていただきます。
ありがとう〜
423 :
どなたか教えてください :2006/07/26(水) 22:32:20 ID:zbMkU/Y3
これをDLして、セキュリティチェックしたんです。
http://www.vector.co.jp/soft/winnt/util/se257052.html そしたら、serverサービスが有効になって危険という診断結果が出て。
↓
(このサービスが起動されると、あなたのコンピュータのハードディスクがネットワーク上から読み取られる可能性があります。特にファイルサーバとして使用している場合を除いて、サービスを停止することを推奨します。)
それで、SQL serverが怪しいとおもって隔離していっかいアンスコしてまたやばいかもっとおもってシステム復元したら、戻らなくなりました。
毎回起動時に×で英語で警告が出ます。
これって個人用パソコンにも必要なんですか?削除していいですか?
おかしくなったんでとりあえずインストールしなおそうと思ってもどれがいいかわかりません。
どなたか教えてくださいペコリ
max server memoryを設定しても、タスクマネージャーで 見ると平気で20MBくらいオーバーしてしまう・・・ なぜ?
>>425 max server memoryはバッファプールのサイズを指定するものなので、
ロードされたプログラムのコードやスタックのサイズは含まれない。
タスクマネージャのそれは全部含む。
428 :
NAME IS NULL :2006/07/27(木) 10:38:24 ID:el+8cIsB
便乗質問ですが、 min server memory を指定しても、タスクマネージャ上ではそれを下回るメモリしか占有してないのですが、 これは理由がありますか?
429 :
NAME IS NULL :2006/07/27(木) 16:47:56 ID:WVGB03MI
AVG関数を使って計算をした結果なのですが、小数点第1位までの答えがほしくて round(avg(mofu),1)としたのですが、42.25になるところが42になっていました(42.3に なっててほしい)のですがいい方法はないでしょうか?
>>429 mofuのデータ型は何?整数や実数型ならキャストしないとうまくいかない。
select round(avg(cast(mofu as decimal(5,3))),1) from xx
431 :
NAME IS NULL :2006/07/27(木) 22:58:36 ID:W14bb2rh
ビューにインデックスを付けることは可能でしょうか? 調べたところ、エンタープライズでしかできないとか製品ページに書いてありました。 ですが、マネジメントスタジオかビューのフォルダを見るとインデックスというフォルダが ぶら下がっています。 あと、インデックスを張ったテーブルで構成されたビューにはテーブルで張ったインデックスの 効果はあるのでしょうか?
インデックスのある列で結合してれば、効果あるんでね?
433 :
NAME IS NULL :2006/07/28(金) 11:50:06 ID:wPjT255z
>>431 バージョンは何? 2005として答える。
>調べたところ、エンタープライズでしかできないとか
そんな事はない。全てのエディションでサポート。
ただEEだと、テーブルに直接アクセスした場合でも、実行計画の判断でインデックス付きビューからデータを取得してくれる。
>あと、インデックスを張ったテーブルで構成されたビューにはテーブルで張ったインデックスの効果はあるのでしょうか?
基本的にはインデックスを使ってくれる。
ただ、複雑な構文のSQL文だと使ってくれない場合もある。
Management Studio(旧Enterprise Manager) で実行計画を確かめて。
テーブル、関数、ストアドの所有者は dbo にするのと アプリ用に作ったユーザのどっちにするのが一般的ですか?
435 :
NAME IS NULL :2006/07/29(土) 23:25:10 ID:gJGeB6Zp
>>435 どのエディションでもインデックス付きビューを作ることは出来るし、
元になるテーブルが更新された場合は索引は更新される。
Enterprise以外のエディションで、インデックス付きビューに対して問い合わせをした場合は
普通のViewとして処理され、ビューにつけたインデックスは使われない。
>>433 の言ってることは最後の一行以外は賛同できない。
437 :
433 :2006/07/31(月) 21:05:36 ID:AzKGtDXT
438 :
知を糞で返す :2006/07/31(月) 21:34:22 ID:mw76PMAn
なんでこんなにインチキの差があるわけw
>>437 それはちょっと引用が足りてないな。
>また、インデックス付きビューのコンテンツを照会する場合は、ビューの参照に NOEXPAND ヒントを使用する必要があります。
この部分が重要。
サポートしてないと主張している人は実際に試してプランを取ったのだと思うのだけど、
SELECT * FROM インデックス付きビュー WITH (NOEXPAND) にしないと動作しない。
またVIEWに計算列などが含まれていた場合など条件によってはNOEXPANDヒントが適用できないことが有る。
VIEWを直接指定してまたは直接使用しなくてもオプティマイザがVIEWの索引を使用するかどうかを
判断する機能がEnterprise Edition限定の機能。
マッチングの部分は英語版で見てもマッチングと表記がある上、他のページではこの用語を使っている箇所
は見つからなかったので、ここのMS自身の説明があいまいなのだと思う。
俺的にはこのマッチングしないは、オプティマイザがプランを立てる上でインデックス付きビューを
探し当てる(マッチングする)ことをサポートしていないという意味で捉えている。
高位バージョンとの差別化のために機能を封印してみたが抜け道が残ったといった感じだな
どっかのバッチ処理で見つけた (更新処理) set @rowcount=@@rowcunt set @error=@@error if @error <>0 begin (更新エラー処理) もうね、アホかと
>441 ワロスw
443 :
441 :2006/08/03(木) 08:43:26 ID:???
おっと失礼 ×@@rowcunt ○@@rowcount
444 :
NAME IS NULL :2006/08/03(木) 16:30:56 ID:5KiJik6U
PASSJ ってやる気が無いよな。 未だに メーリングリストにSQLServer2005Beta版があるし、 新しい記事も2000をベースにしてる。 2005版は5年ぶりのリリースで大ニュースなんだから、もっと盛り上がれば良さそうだけど、そんな記事は見当たらない。 新機能の紹介とかさ何も特集が無いよね。 PASSJのスタッフは、Oracle案件の仕事で手が離せなくなったのかな。
>444 若いスタッフが育たない&若い回答者も育ってない。 年寄りばっかり頑張って息切れしているユーザーズグループってどうよ?
446 :
NAME IS NULL :2006/08/04(金) 03:52:13 ID:x+YaY64N
セメスターで前期シルバー、後期ゴールドな講義って無茶?
447 :
NAME IS NULL :2006/08/04(金) 10:03:13 ID:/AbN/Vig
accessからsqlserverとリンクしているのですが、 接続を切らない場合があるようです。 sqlserver側で接続を強制的に切断する方法はありますでしょうか?
448 :
NAME IS NULL :2006/08/04(金) 11:54:31 ID:/AbN/Vig
判った「kill spid」だ spidはsp_whoで求める
だって2005、まだSP1も出てないじゃん
工エエェェ(´д`)ェェエエ工
451 :
NAME IS NULL :2006/08/07(月) 00:19:33 ID:CTIShSUu
まあ、OracleもWindows版に限っては、対象OSの範囲が狭いけどな。 おそらく、Windows2007ではOracle9iは切り捨てられるだろう。
>>451 まるでOSには安定度や信頼性が必要ないようなレスに見えるぞ
データベースの乗り換えにそこまで慎重になるのなら
OSの乗り換えも長期的にかまえて慎重に行けって
455 :
NAME IS NULL :2006/08/07(月) 15:14:45 ID:CL09duAY
>>453 メーカー製のPCサーバーを使い続けて、保守部品の入手が困難になって
しかたなくリプレイスしたときに、今使っているWindows2000/2003が
新しいサーバーではドライバ等の提供が無く動かないときに、
次期Windows上でも、SQL Server 2000 が動いてくれないと
困るっていう意味です。
だから、動作保証だけでも、して欲しかった。
もちろん、古い今の環境を使い続けるつもりなんだけどね
>>455 つVirtualServer or VMware Server
457 :
マイクロソフトの本音 :2006/08/07(月) 16:01:30 ID:FR/XX9HP
>>455 新しいバージョンのDBMSが出来たんやんから、どんどん買いかえたらエエやん!
いつまでも、ごつー古いバージョンなんか使われたんでは、こちとら商売あがったりなんや!
ということで兄ちゃん、エンタープライゼズエディションを買うてくれや。
さらにOracleから移行してくれたら、まけたるさかい!
Oracleはコアライセンスで、うちはプロセッサーライセンスや。
お得やろ〜?
SQLServer2005が出たのは、2005年の12月頃。 あれから8ヶ月以上も経過してるのに、本屋にマニュアルがほとんど無いのはどういうことだろうか。 それほど、めぼしい機能が多くないからか? でもマイクロソフト側は、「5年もの歳月を掛けて革新的な機能が多く搭載された」 と言ってる。 何なんだ? いまいち盛り上がりに欠ける。 DBマガジンでも、Oracle10gの時と比べて扱いが非常に小さい気がする。
Win2003R2 STD SP1 + SQLServer2005 SP1 の環境でSQLサーバを 構築している最中です。 旧DBの復元でMasterDBから行おうかとシングルユーザーモードで起動しようとしているのですが、 なぜか起動しません。 DOSプロンプトから sqlservr -m で起動すると、画面が流れていきますが、プロンプトが帰ってこない状態で 止まってしまいます。 Management Studio上からMasterDBをSingleに変更しようとしてもエラーがでて 変更できず・・・・・・ エラーの内容ですが5058のエラーとしか出てきません。 調べてみましたが、私の力量では発見できませんでした。 対応方法とかご存知でしたら教えていただければ助かります。 よろしくお願いします。
462 :
NAME IS NULL :2006/08/08(火) 18:06:45 ID:v9aD+4hx
>>461 シングルユーザモードは、「SQLServer Configuration Manager」ツール の
SQL Server(MSSQLSERVER) サービスのプロパティ値を変更しないといけない。
右クリックのプロパティを押下
↓
詳細設定タブを選択
↓
「起動時のパラメータ」に、";-m" を追加
↓
OKボタンを押下
↓
サービスの再起動
これでシングルユーザモードになる。
463 :
461 :2006/08/08(火) 18:24:29 ID:???
>>462 無事にシングルユーザーモードに変更できました。
そうするとBOLの説明は間違ってるのか、前のSQL2000の話がそのまま残ってるのか、
よくわかりませんね・・・・・・
障害時用でBATを作ろうかとも考えていましたが、サービス起動時のオプション設定まで
行うにはちょっと危ないみたいです。(sqlservrで行ければ楽そうでしたが・・・・・・)
どうもありがとうございました。
>>463 sqlservrで立ち上げるとコマンドプロンプトで動きっぱなしになり、とめる時は Ctrl-C でとめる。
戻ってこないのは正常な動作。
>>358 亀レスかつ横レスだが、ほぼ同じ問題で悩んでたんで超助かった。
目から鱗だ。おまいは神だ。ありがとう。
466 :
NAME IS NULL :2006/08/08(火) 18:44:43 ID:v9aD+4hx
467 :
461 :2006/08/08(火) 18:45:14 ID:???
>>464 なるほど、戻らないのは正常動作なんですね
ただ、その状態でManagement Studioから接続できなかったのと、
SQLServer Configuration Managerでサービスが起動していなかったので、
ダメなのかなと思っていました。
その場合はOSQLからだったら接続できるんでしょうか。
ちょっと試してみたいと思います。
----------------こっからチラシの裏-------------------
旧DBがSQL2kで、2k時代のMasterDBを復元すれば移行も簡単じゃないか?!と思っていたのですが、
DB構造が異なっていて復元できないの当たり前でした。
移行方法また考えないと・・・・・・。
うーむ ビルゲイツがつくったのって 軍事とか医療とか航空機とか コンピューターが止まったり誤動作すると人が死ぬ しかも一人や二人じゃないってとこでは まったく用がないと思うんだが 漏れ的には はぁ? ビルゲイツのつくったもんに信頼性? てノリ
>>413 どう見てもあなたが偉そうです。
ありがとうございました。
>>468 どうみても夏厨です
本当にありがとうございました
>>470 うむ、
飛行機に乗る機会のない喪前には
何の関わりもない話だな
472 :
NAME IS NULL :2006/08/10(木) 09:50:43 ID:G4V9JOjZ
テスト飛行時にビルゲイシを飛行機に括りつけて飛ばせば良いんじゃね?
ビルゲイツはWindows98のプレゼンで ブルースクリーンを見せびらかしてたもんな もうね、アホかと
SQL Server 2005 Expressを使っています。 bcpでフォーマットファイル、テキストファイルを作成しました。 このフォーマットファイルを使って、テーブルの新規作成はできますか?
空気読めよMSアンチ
MS社員おつ
そもそもDBMS搭載されている飛行機や医療器具があるのかね? おまけにSQL Serverはビルゲイツは作ってないんだけど。 何でこんなうましかちゃんが沸いてるの? 真夏日で暑すぎるから沸いたのか?
悪・即・斬
社員おつ
荒らしは放置で
楽観的ロックで更新時にレコードをチェックしたいのですが レコードのカラムにレコードのバージョンみたいなものは 特にありません。 こういう場合はチェックできないでしょうか? SQL Serverが持っていてそれを利用することはできないでしょうか?
更新日付とか使えば?
timestampって使えそうだけど
やはりそういうカラムがないとだめでしょうか?
主キーさえしっかりあれば全カラム比較する方法で実現できる。ADO.NETでもこの方法をとっている。
質問はこちらのスレでよいですか?
質問スレ等別にありましたらすみません。
tempdbの自動拡張プロパティを1MBづつ⇒10%づつに変更したくて、
Enterprise Managerから変更したのですが、変更が反映されません。
いろいろ調べたところ、MSのサポートページに
ttp://support.microsoft.com/kb/909375/ja のようなページがありまして、このせいかと思い、記述されている
回避策(ALTER DATABASE)を実行してみました。
するとその時点では変更が反映されているようなのですが、
DBを再起動すると設定が元に戻ってしまいます。
tempdbはDB再起動時に再作成されるようなので、それで
設定が戻ってしまうのかな、と思うのですが、となると
設定する方法はないのでしょうか?
識者の方、回答お願いいたします。
環境は
OS:Windows2003Server Standard SP1
SQLServer:SQL Server 2000 Enterprise SP4
Enterprise Manager:Management Console 2.0 Version5.2
です。
長文すみません。
よろしくお願いします。
489 :
NAME IS NULL :2006/08/15(火) 18:43:38 ID:TdMfMJ5H
SQLServer2005 です。 読み取り一貫性で処理を行う場合は、データベースに対し次のコマンドを実行することによって切り替わるそうですが・・・ ALTER DATABASE DB名 SET READ_COMMITED_SNAPSHOT ON; これをトランザクション単位で切り替える事は可能でしょうか?
>>489 それはデータベース単位なので無理。
SET TRANSACTION ISOLATION LEVEL SNAPSHOT で対応。
491 :
NAME IS NULL :2006/08/15(火) 19:55:27 ID:TdMfMJ5H
>>490 ありがとうございます!
早速試してみます。
492 :
487 :2006/08/15(火) 21:33:17 ID:???
>>488 回答ありがとうございます!割と有名なバグなのですね。
調査が甘かったか…でもサポートオンラインを検索したときに
こんなの出てこなかったけどなぁ。
確かにsysaltfilesを書き換えるのは怖いですけど、ともかく試してみます。
ありがとうございました。
493 :
487 :2006/08/16(水) 15:49:29 ID:???
>>488 様
結果報告です。
どうやらうまくいった模様です。ありがとうございました。
すみません。質問させてください。 ごく初歩的なことなんですが シンプルなテーブルを作って ファイルからデータを挿入しようとしているのですが できないのでしょうか? Postgresで言うところの COPY テーブル名 FROM ファイル名 と言う動作です。
bcp
496 :
494 :2006/08/17(木) 15:30:58 ID:???
497 :
NAME IS NULL :2006/08/17(木) 16:24:19 ID:F8GdWoXT
すいません。 SQLServer2005でシノニム使おうかと思っているんですが、 ODBC接続でAccess2003からリンクテーブルを張ろうとしています。 BOLに「リンク サーバー上のシノニムを参照することはできません。」って あるんですが、まさしくこれでしょうか。 こういったことを行うにはビューを別名で作ってあげるしかありませんか?
499 :
NAME IS NULL :2006/08/21(月) 01:10:08 ID:kkIwFCrd
SQL鯖2000でログシッピングの設定をしているのですが保守計画の設定で 「unable to copy the initialization file to the secondary server」というエラー が出て困ってます。 どうも主系から待機系のアクセス権が問題なようで.... 主系から sp_cmdshell 'dir \\待機系\共有名' とやってもアクセスが拒否されましたと出ます。 OSレベルでは問題なくアクセスできてファイルコピーもできるのですが。 どうすれば権限を与えられるのでしょうか。
>>499 よく知らないんだけど、SQLサーバってどのユーザでつなぎに行くんだろ?
「OSレベルでは問題なく」のユーザと同じなのかな?
501 :
499 :2006/08/21(月) 07:37:12 ID:kkIwFCrd
>>500 それが私もよくわかんないんです。どのユーザーでつなぎに行ってるかわかる方法
ってどうやって知るんだろ。
>500-501 MSSQLSERVER サービスの起動アカウントだろう?
だれか、ライセンスのことについて教えて下さい。 「SQL Server 2005 Standard Edition 」のプロセッサライセンス版 を購入して、サーバーにインストールして使用します。 使用後、そのサーバーが壊れて修理に出ている間、代わりのサーバーに インストールして使用する場合、ライセンスは新しく購入する必要が ありますか? それとも、1台のサーバーで使用している限りは、新しくライセンス が発生しないでしょうか。 よろしくお願いします。
いるだろ。 理屈的には、クラスタのスタンバイ側に入れた場合と同じじゃないかな?
ライセンスなんて(゜ε゜)キニシナイ!
MSに聞くしか無いんじゃ? ライセンスの話は他人に聞いてもてきとーな事しか言わないよ。
この場合は完全な代機だからいらない。
クラスタやミラーリングの場合も完全なパッシブの場合はいらない。
ミラー側を問い合わせ専用で使っている場合は必要となる。
CPUライセンスの場合は代機やパッシブ側のCPU数は同等かそれ以下である必要がある。
MSやLARでも適当なことを行ってくることはあるがそれはたまたま担当の質が悪いケースなので、
>>506 に同意。
>>507 に追記させてもらおう
アクティブサーバ、スタンバイサーバとあってアクティブが壊れ、
スタンバイに切替を行った場合アクティブとスタンバイの機能が
入れ替わるよな?
で、旧アクティブは新スタンバイとして、旧スタンバイは新アクティブとして
そのまま運用していってもライセンス的には問題なし
どちらか片方がスタンバイであればな
もちろん、CPUの数とか問題になってくるけど、同じ構成ならOK
って、MSに電話して口頭だが確認をした経験がある
不安なら
>>506
510 :
NAME IS NULL :2006/08/24(木) 15:28:45 ID:WrmHQwXk
Windowsマシンから簡単なSQL文(select)を送ってそれのレスポンス(応答)を定期的に 測ってログを取りたい思っているのですが、いい方法ってあります? 1回きりのツールとかであれば、タスクやcronで動かせばなんとかなるとして。 ツールがあれば一番だが、なければ一から作るしかないか。
>>510 使ってるのがSQLServer2000か2005かわからんが、クエリアナライザとか、
ManagementStudioとかのクエリで、実行プランってあるけどそれどうよ?
かなり正確に時間測れるぞ?
タスクで定期的に実行すればって自分で書いてるし、osqlあたりでBAT作れば
良いような気もする
検討違いな回答ならスマン
レスポンスタイム≠処理実行時間 基礎中の基礎。
2005はWindows2000にバンドルしている ODBCドライバーで接続できまつか?
>>513 2005で拡張された型や機能を使わなければ利用可能。2000との互換性はかなりあると考えていい。
>514 レスどもです
すいません、SQLServer2000から2005に切替を予定していますが、 関数・ストアド等が増えた、なくなったなど、まとめてるサイトとかって ありますか?
517 :
NAME IS NULL :2006/08/25(金) 16:19:06 ID:H71sYG3h
SQLServer2000にSP3aを当てようとしたのですが、
MDACをインストール中のところで、エラーが出てしまいます。
エラーメッセージは
「Microsoft Data Access Componentパッケージをインストールできませんでした」
と出ます。
MDACだけを単体で入れようとしたら、
MDAC2.6まではインストールできるのですが、
MDAC2.7、2.8はエラーで、途中でロールバックしてしまいます。
http://support.microsoft.com/default.aspx?scid=kb;ja;286442 これなども試したのですが、ダメでした。
何が原因なのか、ご存知の方いらっしゃいましたら
ご教示ください。
OSはWindows2000ProのSP4が当たっています。
518 :
516 :2006/08/25(金) 17:21:46 ID:???
少しスレ違いかもしれませんが、質問です。 今研究でSQL SERVER 2005 JDBCを使ってるんです、何度javaの環境変数設定してもうまく使えません。 変だと思ってsqljdbc.jarをダブルクリックしたら「invalid or corrupt jarfile」って出て来ます。 何度ダウンロードしても結果は同じです。 このjarファイルはデフォルトで壊れてるんですか?それともこういう仕様なのか、何かjdkとかjreの問題なのでしょうか・・・? どなたかご存知の方教えてください。
520 :
NAME IS NULL :2006/09/01(金) 02:09:21 ID:dLuo+SQ3
長期間のログデータ等、大量のレコードが格納されているテーブルに検索を掛けたとき、 結果が40000件ヒットしたとして、2001件目〜4000件目…といったように検索結果の部分 を抜き出すことは可能でしょうか? TOP指定は先頭〜件分、としかできないですよね…。 Javaで検索を掛けて結果をVectorなどのコレクションに格納し、そのコレクションを JSPでimportして結果を表示させるようなことをしたいのですが、件数が多すぎると OutofMemoryErrorでエラー終了してしまいます。 どなたかいい方法をご存知でしたら教えて下さい。
>>519 ダブルクリックまたはjava -jar sqljdbc.jarでinvalid or corrupt jarfileが出るのは
META-INF以下のファイル名がなぜか小文字になっていてMANIFEST.MFが見つからないため。
そのままでも、クラスパス(java -cp hoge/sqljdbc.jar)を通して
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); とする分にはエラーは出ない。
>>520 1.SqlDataReader reader = command.ExecuteReader() を使って不要な分は読み飛ばす。
2.SQLServer2005を使ってるならROW_NUMBER()を使う。
3.クラサバ系のアプリでセッションを開いたままに出来る場合は
IDENTITYでナンバリングした列を追加した一時テーブルを作って、そこに検索結果を流し込む。
あとはID列のFromToの問い合わせでOK。
結果は安定的でデータが増減した場合などで結果がクエリのたび変化するようなケース向き。
WEBアプリで使えないのが残念。
>>520 直感で書くけど、これでいいんじゃないの?
SELECT TOP 4000 〜〜
NOT IN (SELECT TOP 2000 〜〜)
524 :
519 :2006/09/01(金) 21:07:20 ID:???
>>521 調べたところ、JDBCが認識しないのは単にSQLServer2000と2005クラスが微妙に異なってることが原因でした
com.microsoft.sqlserver.jdbc.SQLServerDriver (2000)
com.microsoft.jdbc.sqlserver.SQLServerDriver (2005)
こんな分かりにくい仕様変更すんなゲイツ
>>523 inは結果セットできてしまうので微妙じゃ
not existsを使うべし。
っつーか前スレあたりに書いてなかったっけ?
>>527 これとは若干シチュエーションが違うような…
でも同じwhere句、order by句が使われているなら
クエリキャッシュが効くのかな
家では確認できないなあ
SQL Server2005について教えてください Management Studio上で、システムデータベースで「テーブルを開く」が グレーアウトして見ることができません クエリアナライザでSelectすると参照はできるのですが、Management Studioで 見る方法があるのでしょうか? ご存知のかたがいらっしゃいましたら教えてください
トランスメタのCPUだと2005はインストール出来ないのか...orz
ばっかじゃねぇのw
トランスメタ熱いなw
>>522 >結果は安定的でデータが増減した場合などで結果がクエリのたび変化するようなケース向き。
>WEBアプリで使えないのが残念。
検索に時間がかかる場合も含めて、WEBでこういう場合はどうするのがいいの?
SNAPSHOTサーバーカーソルか一時表を使ってWEBセッションをまたいでDBセッションを開いたままにしておく。
検索結果を普通のテーブルに持つ。タイムアウト分の掃除が必要。
セッションに検索結果か検索結果のキー配列を持つ。
フォームの隠しフィールドに検索結果のキー配列を持つ。
サーバカーソルやDBセッションを開きっぱなし、というのは有り得ない。 隠しフィールドっていうのも裏側のデータを不用意にクライアント側に流してしまうのが微妙。 通信量も増えるし。 検索結果をテーブルに持つのもちゃんと上手く消せるかによるな。 というわけでサーバ側のセッション変数に持つっていうのがいいんじゃないか。 メモリは食うけど。
2005を始めて使ってるんだけど、クエリアナライザなくなったの? .Netで作られた管理ツール重くてかなわんな。 みんな変わりに何使ってるの?
sqlcmd
>>535 立ち上がりは遅いけどそれ以降は普通だと思うよ
PCのスペックの問題かも。
538 :
NAME IS NULL :2006/09/04(月) 17:58:27 ID:tiyWzcto
DB server Error (select `inventory`)- Table '***.inventory' doesn't exist とか出たんだが何だこれ('A`) 昨日まで正常に動いてたんだが 教えてエロい人orz
管理ツール遅すぎるよな。起動に15秒以上かかって、思考が止まりまくる ランチャから管理ツールにクエリファイルを渡して起動してるんだけど 15秒も待てないから他のことやってると渡したクエリファイルは無効扱いされ ふと戻ってみると管理ツールが単体で偉そうにブランクで起動されている。 .NETでアプリ作ったことないけど、こんな漢字なのかね。
我慢して立ち上げっぱなしにしといたらどうか
Core2Duo買え
542 :
535 :2006/09/05(火) 00:17:22 ID:???
>>541 うへ、CoreSoloだぜwwwwwwwwww
sqlcmdなんてあったのか。SQL Plusのまねなんてしなくて良いのにね。
試してなんだけど、2000のクライアントだけいれで、2005のサーバー
にクエリアナライザで繋がらないのかな。
ダメなら、2000から2005にリンクサーバーで繋いで・・・、って
下Versionから上Versionがそもそも出来るかわがんねー。
誰か、恵まれた環境の人レポートキボンヌー!
>>539 どんだけショッポイ機器で開発してるんだ?w
レッツノート CF-W2 で、超低電圧版PentiumM 1.07GHz、 メモリ500MBを使ってるが15秒も掛からんぞ。
10秒未満で立ち上がり、次回起動時は2秒で立ち上がる。
もしかして、クライアントPCにインスタンスを構築してしまって、メモリが足らない状況になってるのか?w
そりゃー遅いわな。
ショボかろうが何だろうが、2000のクエリアナライザは0.1秒で起動するんだよな 管理ツールにクエリアナライザが統合されて、その起動が15秒かかるなら ユーザにとっては何のメリットもねえ ショボいのはPCじゃなくてnetテクノロジだろ
>>539 2000のクエリアナライザで2005がそのまま使える。
実行計画など一部に正しく出ないところもあるが実用上ほぼ問題ない。
546 :
543 :2006/09/05(火) 14:14:33 ID:???
547 :
NAME IS NULL :2006/09/07(木) 00:23:21 ID:UkdkV1VI
MSDEいれてSQLの勉強始めたのですが、 日付の指定でつまずいています。 2001/06/27 0:00:00 の dateを抽出しようと思い、 SELECT * FROM table WHERE date = 2001 / 06 / 27 などとしてるのですが、何もヒットしません。 2001/06/27 0:00:00の日付のデータはもちろん存在します。
>>547 CONVERTを使うのが推奨確実。
WHERE date = CONVERT(DATETIME, '2001/06/27', 111)
WHERE date = CONVERT(DATETIME, '2001-06-27 00:00:00', 120)
これでも推論で動作するが、環境による。
WHERE date = '2001/06/27'
>>547 WHERE date = '2001/06/27 00:00:00'
550 :
547 :2006/09/07(木) 17:12:11 ID:???
レスありがとうございます。 CONVERTという関数自体はじめて知りました。 今回のケースでは、CONVERTなしでもいけましたが勉強してみます。 ありがとうございました。
ASPからADOで更新日を更新したいのですが 秒より下の値も更新したく rs.fields("lastupdatedate").value = "2006/09/07 17:00:01.123" とやってみたのですがエラーになっていまいます。 rs.fields("lastupdatedate").value = "2006/09/07 17:00:01" でしたら問題ありません。 秒より下の値を指定して更新する方法はないでしょうか? よろしくお願いいたします。」
VARIANT経由する時点で秒までしかサポートされないと思う。
なるほど
ロックエスカレーション -------------------------------------------------------------------------------- 行単位のロックは、同時実行性は高まりますが、大量の行が更新される場合には、 ロックの数が膨大になってしまいます。そこで SQL Server は行単位やページ単位など、 小さい粒度のロックが大量に発生し、SQL Server 自身の負荷が高いと認識したときには、 必要に応じてロックの粒度を拡大(エスカレート)します。 この機能をロックエスカレーションと呼びます。 例えば、テーブル内に 10000行あり、行ロックが 9000個以上かかっているとします。 このとき、これらの行ロックをテーブルロックへエスカレートすれば、ロックは一つで 済みます。なお、ロックをエスカレートするかどうかは利用できるメモリ量依存するので、 9000個というのはあくまでも例にすぎません。 ロックエスカレーションが行われるかどうかのしきい値は、locks 環境設定オプションに よって決まります。設定を確認するには、sp_configure システムストアドプロシージャを 使いますが、デフォルトでは「0」と設定され、動的に監理されています。この場合、 SQL Server の使用しているメモリのうち、ロック用に使用しているメモリ量が 40% を超えた 場合にロックエスカレーションが発生します。 翔泳社発行「SQL Server 2000 でいってみよう」より
現在、運用中のSQLServer7のライセンスを 追加したいのですが、どこに売っているのでしょうか?
そういう場合、どうなるんだろうね。
559 :
NAME IS NULL :2006/09/14(木) 10:59:52 ID:cmcidpEU
質問はこちらのスレでよいですか? 質問スレ等別にありましたらすみません。 データベース作成時に、トランザクションログファイル の初期サイズを大きく取ろうとするとエラーが出てしまい 困っております。 初期サイズは50GB、エラー内容は「SQL - DMO ( ODBC SQLState HYT00 )」 となっております。 識者の方、回答お願いいたします。 環境は OS:Windows2003Server Standard SP1 SQLServer:SQL Server 2000 Enterprise SP4 Enterprise Manager:Management Console 2.0 Version5.2 です。 長文すみません。 よろしくお願いします。
トランザクションログ50Gってどんなシステムよw
CREATE DATABASE コマンドで直接作ってみて作れたらDMOの制限 or バグ。 作れないならSQLServerの制限 or バグ。 このあたりから調べてみたら?
562 :
NAME IS NULL :2006/09/14(木) 15:54:12 ID:yVwkjTA+
>>559 まず、トランザクションログを50GBに設計しようとした動機を述べよ
SQLServer上でMySQL(Linux)をODBCでリンクサーバー指定して、 ストアドから制御しようとしてるんだけど、これって可能?
>>559 タイムアウトエラーなので、単に時間がかかっているだけでは?
それにしても50GB(以下ry
>>563 出来ると思うよ。
おれはCSVだけどODBC経由でやっているもん
566 :
NAME IS NULL :2006/09/22(金) 00:27:12 ID:f/msGIHj
Oracle使っていたのですが、 来月からSQLServerの管理を任されてしまいました。 Oracleとの対比で説明してくれるような書籍とかありますでしょうか?
>>566 山ほどあるよ。書籍もトレーニングも。
Microsoft や PASSJ も当然のようにやってる。
とりあえず「Oracle ユーザのための SQL Server」でググってみ。
こんな長いキーワードでもいろんなもんがヒットするから。
MSとしてもOracleから是非SQLServerに移ってほしいわけだしな。 地方都市の少し大きい本屋レベルでも普通に書籍は転がってる。
569 :
NAME IS NULL :2006/09/22(金) 14:07:03 ID:LVmMnrWG
VS2005StdとSQLServer2005Devの組合せで レポート作成機能を使った開発ってできますか?
Oracleのsequenceに相当する機能は、SQLserverには無いんですか?
ないどす
そですか。困ったね。ああ面倒だ。どうしよう
項目にIdentity属性を指定すればいいという訳じゃないのか?
>>573 OracleのsequenceはINSERTする前に値を取得できるんだけど、
SQL ServerのIdentity属性ではINSERT後でないと値を取得できない。
困る(´;ω;`)ウッ…
Insertしてから取得してロールバックしちゃうとか
>574 Identityを管理しているテーブルはあるよ。 Identityのインクリメントの法則がわかってたら次の値は予想できるでそ? それでダメか?
SQLServerに慣れるためにも、BooksOnlineでIDENTITYで検索しなされ。
そのようにしまふ
>580 sp_helptext か、 改行されてない方がいいなら 直接 dbo.syscomments かなぁ?
>580 EnterpriseManager開いて、プロファイラを開いて、 ストアドを撰んで中身を見てみて、 もっかいプロファイラを見てみそ。 そこに答えがある。 これいろいろ応用できるから、覚えとくとよか。
583 :
590 :2006/09/24(日) 22:40:07 ID:???
>581 dboのストアドは見れないみたいです。 あと、sp_helptextだと、ストアド名が必要ですが、 その一覧を取得する方法も知りたいです。 >582 EnterpriseManagerってサーバーについてるんですか? サーバーは触れないのです。。。間違ってたらスマソ。 手元にツールは、SQL Server Management Studio Expressだけあります。
584 :
580 :2006/09/24(日) 22:40:59 ID:???
名前間違えた。。。orz
2000だとおもったら2005だったのね。 EnterpriseManagerってのは2000の管理用アプリケーションのこと。 今回は2005なんだから、その単語は無視してくれ。 で、2005だよな、SQL Server Management起動汁。 それでストアドの一覧とかストアドのソースが見れないか確かめてくれ。 なんか、dboのストアドが見れないっつってるとこからすると、 少なくともdboユーザ権限はないみたいに見えるのだけど、 今、自分のユーザはdboユーザ所有のプロシージャの実行すらできない状態なのか? …すまん。寝るので、後頼むわ。orz
586 :
NAME IS NULL :2006/09/25(月) 15:31:20 ID:yGqzy2kq
EXPRESS板には、プロファイラが付属してないのか・・・・ 単純にプロファイラで情報を抽出してみた。 だから余計な構文も入ってるだろうが、そこは工夫してくれ。 ストアド一覧を取得するSQL文は以下ね。 ============================================================================= SELECT sp.name AS [Name], 'Server[@Name=' + quotename(CAST(serverproperty(N'Servername') AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/StoredProcedure[@Name=' + quotename(sp.name,'''') + ' and @Schema=' + quotename(SCHEMA_NAME(sp.schema_id),'''') + ']' AS [Urn], SCHEMA_NAME(sp.schema_id) AS [Schema], CAST(CASE WHEN ISNULL(smsp.definition, ssmsp.definition) IS NULL THEN 1 ELSE 0 END AS bit) AS [IsEncrypted], CASE WHEN sp.type = N'P' THEN 1 WHEN sp.type = N'PC' THEN 2 ELSE 1 END AS [ImplementationType], sp.create_date AS [CreateDate] FROM sys.all_objects AS sp LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id WHERE (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(CAST( case when sp.is_ms_shipped = 1 then 1 when ( select major_id from sys.extended_properties where major_id = sp.object_id and minor_id = 0 and class = 1 and name = N'microsoft_database_tools_support') is not null then 1 else 0 end AS bit)=0) ORDER BY [Schema] ASC,[Name] ASC =============================================================================
587 :
586 :2006/09/25(月) 15:31:55 ID:???
んで、ストアドの定義文を取得するSQL文は以下ね。 ============================================================================== SELECT NULL AS [Text], ISNULL(smsp.definition, ssmsp.definition) AS [Definition] FROM sys.all_objects AS sp LEFT OUTER JOIN sys.sql_modules AS smsp ON smsp.object_id = sp.object_id LEFT OUTER JOIN sys.system_sql_modules AS ssmsp ON ssmsp.object_id = sp.object_id WHERE (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=N'【ストアド名】' and SCHEMA_NAME(sp.schema_id)=N'dbo') ==============================================================================
588 :
580 :2006/09/26(火) 23:39:15 ID:???
ありがとうございます。586さんの方法でできました。
Transact-SQLのストアドプロシージャにおいて、 特定のテキストファイルに書き出すことはできますか? C言語でのfprintfに相当することをしたいのですが。
質問なのですが リモートからローカルにバックアップ ローカルからリモートにリストア する方法はありますでしょうか?ありましたら方法を教えていただけないでしょうか?
BackupExecなりArcServeなり使えば簡単じゃね?
>589 xp_cmdshell+bcp
>>592 どうもです。
SQL serverには、OracleのUTIL_FILEとかDBMS_OUTPUT相当機能が無いのですね。
細かいことしたければSQLCLR使えってことかな。
>>591 レンタルWebサーバーのおまけDB鯖なので、そういうのはちょっと・・・
じゃあ、論理バックアップしかないな。
596 :
NAME IS NULL :2006/09/30(土) 19:49:17 ID:ki1xa2S/
Aテーブルの全レコードのある列をBテーブルの情報から作成した内容で更新したく思います。 それで作業用にストアドプロシージャを作ることにしました。 処理的にはAテーブルをカーソルで開いて WHILE @@FETCH_STATUS = 0 を条件としてループしながら次々とレコードを読み込みながら Bテーブル用のカーソルを開いてまたWHILE @@FETCH_STATUS = 0を 利用して更新値を作成します。 ここで困りましたのが@@FETCH_STATUSってネストできないようなので困っています。 ふたつのカーソルを同時に開きながらそれぞれループさせて処理させたいのですが。。 こういう場合ってどうすればよいのでしょうか?
RDBで普通はそういうコボリーな処理は*絶対*やらない。 やりたい処理の詳細は知らんけど、 (Aのキー、Aの更新後の値)という一時テーブルを作って Bで一行ずつ読みながらそのテーブルに変換後の値をInsertしていく。 最後にそのテーブルを参照して一気にUpdate…とか。 せめてそんな感じがいいんじゃないのかな。
>>596 別の変数に退避したら?
SET @T1_STATUS = @@FETCH_STATUS
599 :
596 :2006/09/30(土) 21:14:07 ID:ki1xa2S/
>>597 それもそうですね。
今後のデータについてはトリガで作成するので既存のデータに対して
更新したかったのでこの方法を思いつきましたが更新用テーブルを作成することにします。
>>598 なるほど。
@@FETCH_STATUSに対して直接値を見に行かないといかないと思いこんでいました。
今後はInteger型の変数にでも一時待避させておきます。
ありがとうございます。
>593 なくはない。外部ストアドプロシージャを使えばいいだけ。 要はActiveXお呼び出し。 でも、メンドウだよ。 あれこれ加工しまくってすでにテーブル形式維持していないならまだしも、 テーブル形式から出力できる形ならSQL一発で出力できるbcp使うほうが何ぼもラク。 加工が必要であれば、ワークテーブルとしてグローバル一時テーブル使えばいいだけのこと。
SQLServer2005のSQL AGENTを使ったジョブのスケジュール実行についてなのですが、実行すると 「プロセスは作成されませんでした (理由: アクセスが拒否されました。). ステップは失敗しました。」 というエラーが起こります。 CmdExecのジョブなのですが、所有者はDB管理者で実行アカウントのSQL AGENT Service Accountには対象DBへのアクセス許可を与えてあります。 そして、作成したプログラムをプロンプトから実行すれば処理は正常に完了します。 セキュリティ周りの設定だと思うのですが手詰まっています。。。 どなたかアドバイスいただけないでしょうか。よろしくお願いいたします。
その実行ファイルに、SQL AGENT Service Accountがそれを実行できる権限が無いとダメじゃないのかな。
603 :
601 :2006/10/06(金) 00:28:45 ID:???
>>602 あ゙っ…
それです、きっとorz
ありがとうございます。早速試してまます。
>>303 >>304 や
>>574 のような、シーケンス値に関して質問です。
私は現在、DBを抽象化するレイヤを作っておりまして、現在SQL-Serverを実装しています。
BooksOnlineのIDENTITYに関しての部分も読みましたが、
記載されている「セッション」や「スコープ」という用語の意味をある程度理解(予測)できるものの、確信に至ることができません。
簡単に言ってしまえば、@@IDENTITY・IDENT_CURRENT・SCOPE_IDENTITYのどれを使用すればいいのかが分かっていません。
IDENT_CURRENTは他セッションのIDまで拾ってしまうという情報がありましたので、違うような気はします。
SCOPE_IDENTITYは、期待するような動作をするのでしょうか?
期待する動作というのは、「SQL-Serverに接続・INSERT・Last IDを取得」という1連の処理がほぼ同時にいくつか実行された時に、
それぞれの処理でINSERTしたそれぞれのLast IDを取得する、ということです。
INSERT〜Last ID取得の間に、他の処理でINSERTがあった場合、Last IDが一つ大きな値で返されることは問題です。
SCOPE_IDENTITYを使用すればこのような問題は起きないのでしょうか?
>604 BOLみてみたけど、SCOPE_IDENTITYの項目を読むと、 君の期待通りの例が最後に載っている様に見えるのだけど、 それは違うの?
606 :
604 :2006/10/07(土) 01:18:26 ID:???
返答ありがとうございます。 SCOPE_IDENTITYの項では、ノーマルなINSERTステートメントとトリガーによって挿入する例が書かれていますね。 そして、それぞれスコープが違う為に@@IDENTITYとSCOPE_IDENTITYで取得される値が異なることも説明されています。 これは非常によく分かるのですが、クライアント毎(処理毎)のINSERTステートメントは、スコープが異なるのかどうかが説明されていません。 スコープさえ異なればSCOPE_IDENTITYは期待する値を返してくれそうなので、あとはそこだけです。 例えばMysqlのlast_insert_id()では、このような説明をされています。 //----------------------------------------- 生成された最後の ID は、接続ごとにサーバで維持される。 したがって、この関数から個々のクライアントに返される値は、そのクライアントによって生成された最新の AUTO_INCREMENT値である。 この値は、他のクライアントがそれぞれの AUTO_INCREMENT値を生成しても、それによって影響されることはない。 この動作によって、他のクライアントの活動にかかわりなく・・・ //------------------------------------------ もしSQL-Serverで言う「現在のセッション」がこのMysqlでの「接続ごと」または「クライアント」と等しい意味を持つならば、私は安心です。 しかし頭の出来があまり良くない私には、SQL-Serverの「現在のセッション」という正確な定義が分かりません。 もし宜しければ、教えて頂けないでしょうか?
607 :
604 :2006/10/07(土) 01:25:06 ID:???
自分で書いておきながら、「セッション」と「スコープ」が混ざってしまいました。 これでは読む側も分かりませんね。申し訳ないです。 「セッション」も「スコープ」も、定義が分からないのです。 今分かっていることは、 INSERTステートメントとトリガーはスコープが異なる IDENT_CURRENTは他の処理(クライアント)で挿入されたLast IDまで返されてしまう の2つだけです。
MySQLはわかんないけど、 セッションは、ざっくり言うと、ある特定ユーザがDBに接続してから切り離すまでの単位のこと。 スレッドが違えばセッションは変わる。
セッション下で直接実行される一連のSQL命令で1つのスコープ。 そこから呼び出されるストアドプロシージャは別スコープ。 INSERTやUPDATEで間接的に呼び出されるトリガは別スコープ。 プロシージャやトリガからさらに呼び出されるプロシージャやトリガも別スコープ。 例えば create table XXX (id int identity, data int) create procedure sp_HOGE as insert into XXX (data) values (900) go insert into XXX (data) values (999) exec sp_HOGE select @identity, scope_identity() go この場合、結果は @identity = 2, scope_identity = 1 になる。
>>609 なるほど。
1. insert
2. 別なストアド実行(ここでもinsertが発生する)
3. 1.でinsertした行をupdate
というストアドを作る場合は
3のwhereでscope_identityを使うとウマーイわけだ。
勉強になりますた
611 :
604 :2006/10/07(土) 23:52:21 ID:???
>>608 >>609 ご説明ありがとうございました。
特に「ある特定ユーザがDBに接続してから切り離すまでの単位」という情報がとても参考になりました。
他ユーザのINSERTステートメントが影響するのかどうかが、とても心配でした。
ストアドプロシージャ・トリガを考慮しないとすれば、
INSERTステートメントを実行した直後にSCOPE_IDENTITY()を実行すれば良さそうですね。
本当にありがとうございました。
別スレッドで質問して、こちらに誘導されました。 以下、質問の内容です。 Windows 2000 に SQL Server 2000 をインストールして使っていました。 OSのホスト名を変更したのですが、SQL Server に昔のホスト名が残ってしまいます。 (レジストリを検索しましたが、ヒットしませんでした。) SQL Server は、ホスト名をどこで管理しているのでしょうか? また、変更するにはどうすればよいのでしょうか?
>612 ヒント @@SERVERNAME Books Onlineで検索すると多分正解までわかる。
>>612 別なヒントは「masterデータベース内」
nvarcharに日本語、中国語、英語、その他いろいろな言語を入れています。 PHPからUTF-8として読み出そうとしているのですが、どうすればよいでしょうか? 普通に接続して読み出すとShift-JISになってしまいます・・・・ SQLに何か書くのでしょうか?
>>615 多分PHPレベルでの問題。「普通に接続して」のあたりに原因が潜んでそうだな。
PHPスレで聞いたほうがいい。
617 :
612 :2006/10/10(火) 11:44:44 ID:???
>> 613 SQL Server Books Online の中に「サーバーの名前の変更」という項目がありました。 こちらを元に作業してみます。
SQL 2005でSQL 2000のSQL Enterprise Managerにあたるものはどれでしょうか?
SQLServer Management Studio
ありがとうございます
621 :
NAME IS NULL :2006/10/13(金) 19:50:43 ID:BKv/4VYy
DB超初心者です。SQL-serverでローカル接続はできるんですが、 ファーストサーバに接続する方法がわかりません。 SQL-server ManagementStudioExpressで サーバ名「oldclock####」 SQL-server認証 ユーザ名「L_########」 パスワード「#######」 「・・・リモート接続許可しないようになっていることがエラーの原因である可能性・・」 こういうエラーが出ます。やり方そのものが間違っているのでしょうか? ファイヤーwall消しても同じです。 ちなみにSQLEXPRESSはTCP/IP のみを使用するになってます。
ファーストサーバってなんだろう。 それ自体わからない超初心者です。 対象の接続したいSQL Serverですが、本当にSQL認証モードなのでしょうか? 認証方法がWindows認証かWindows+SQL認証のどちらかしか選択できないので、 とりあえずドメインユーザで接続を試してみてみたらどうかな。 あと、自分も質問を。 復旧モデルがフルの際に、トランザクションログには今まで実行した命令が 全て書かれていると思うのですが、実行を行ったSQL文自体を参照することが できるのでしょうか? DBCC Logだと、トランザクション掛ける際に付けたマークは出てくるのですが、 その際に実行したSQL文を後追いできるのかなと・・・・・・。 勝手にデータ消されて、いつ誰がやったのか調べたいのです。 ご存知でしたら、ご教授いただければ。 よろしくお願いします。
ちょっとExpress Editionを落として遊んでみたけど サーヴァーの設定が結構難しかったよママン
SQLServer2005におけるパフォーマンスについての質問なんですが、 何十億単位のレコードがはいっているテーブルにおいて、indexの張られている 列の検索に要する時間というのはどれぐらいかかるのでしょうか。 自宅のP4マシンで試そうとおもったのですが、億単位のデータを用意することが できなかったので、ご存知でしたら教えてください。 また、Indexの再構築にかかる時間も、もしご存知でしたら教えていただけないでしょうか
>>625 まともに計算する気がサラサラないが、参考にどうぞ。
数十億レコードといって思いつくのが、金融系の履歴情報ぐらいしか思いつかないのだが、
仮に100億のレコードとして、1レコードあたり200Byteとする。
100億*100Byte=1000GB=2TBとなる。
この時点でまずRAID必須かつ、1パーティションサイズの最大となる。
ということは、1ファイルグループでは扱えない=テーブル作れない。
ここまでがSQLServer2000のお話。
2005になって、「データパーティショニング」という機能が追加された。
簡単に説明すると、テーブル単位でもファイルグループを分散させて
置くことが出来る機能。
で、それを含めると各ファイルをドライブごとに分けたりすることができて、
Disk I/Oを減らすことが可能。
他にもクラスタ機能などDB上で高速化も図れる。
RAID構成や、載せてるメモリ、CPU数で変わってくる。
提示された条件だけじゃ時間なんてわからん。
あとあんまりメモリやHDD容量が足りないと、最悪帰ってこない。
変なこと書いてないよね、ね?
>>626 漠然とした質問だったにもかかわらず丁寧なレスありがとうございます。
データパーティショニングは調べているうちに知って凄い機能だと感動しましたが、
この機能はEnterpriseEdition以上(というかEE)のみのサポートですよね。
使えるのはStandardEditionなので、この機能には期待できません。。。
たとえばMixiとかの「足あと」機能を実装する際に、一人当たり1000件保存していたと
しても、結構なレコード数になりますよね。(現時点で600万ユーザらしいですし)
いま想定しているのは、テーブルをユーザIDごとに分けて(1〜10000ユーザまではテーブルAのように)
テーブルサイズを小さくして行えばいいのかと思っているのですが、しなかった場合ってどれぐらいの
時間がかかるのか知りたかったんです。
※OpenPNEでは1テーブルに全部ログを残していくみたいですが、これだと肥満化してしまう気がします。
この辺の設計って、どこで勉強できるんでしょうか?
628 :
626 :2006/10/14(土) 01:46:46 ID:???
mixiはやってるから、「足あと」機能については何となくSQL Serverで 実装した際の説明はできる。 ちなみに実際にテーブル構造調べたりしたわけじゃないから、↓に書くことが 本当にそういった構成かは責任もてない妄想の産物。 あと本も出てるみたいだけど、手に取ったこともない。 「足あと」機能の表示は最大30件ということで、どんなに増えたとしても 会員数*30件、600万人でも2億行かない程度。 プラスして、各会員管理してるテーブルにでも訪問数フィールドを 用意すればおけ。 もしくは、会員レコードには足跡用に60個分フィールドが用意されていて、訪問者+時間を そのまま入れてるのかもしれない(←こういった考えも出来るというだけですよ) うちがmixiで気になってるのは友だち登録。 自分の名前横に()で友人の数が出てくるけども、その数が他人のページから見た際と 異なってる場合がある。 例として。 ABCの3人いたとして、A-B、B-Cが友だちとして、Aのページ・Cのページから見た際に Bの友人数が異なっている時がある。 要は更新にタイムラグが発生しているということ。 そのくせ、「マイミクシィ最新日記」に出てくるのはタイムラグを感じたことはなかったり。 普通に考えて、DBサーバ複数あって同期取るのに時間が掛かってるだけなのかも知れないけど。 そう考えると、友人が目の前でログインしていたとしても、最終ログイン時間が5分以内というのも 納得できるのかなと。 (例え秒刻み表示出来たとしても5分以内と表示させるといったポリシーなのかも知れない・・・・・) OpenPNEはごめん、まったく知らない。 軽く調べてみたけど、テーブル構造がExcelで転がってるみたいだから何となくはわかるんじゃない?
>>625 大量のレコードを用意するだけなら同じテーブルのレコードを無条件に結合したのを元にテーブルを作ればいいんじゃない?
数千万〜億くらいでもindexを使ってればレコード数に依存して遅くなるってことはないよ。それ以上でかいのは試したことないけど。
630 :
超初心者 :2006/10/14(土) 02:05:47 ID:OCcBm/5X
>>628 本当、丁寧なレスありがとうございます。
「足あと」機能を例として話を続けさせていただきますが、
[log_id] [int] index //ログID
[member_id] [int] index //ログを記録している会員のID
[access_id] [int] //訪問者のID
[access_datetime] [datetime] //アクセス日時
というテーブルがあったとして、1会員最大30件だとした場合、
select count(*) from ログテーブル where member_id = 会員ID
のCountが30件になるまでは普通にInsertしますが、31件目になった
場合は、一番古いログをDeleteして、新しいのをInsertしますよね。
これを何度も繰り返しているとIndexが断片化してしまいパフォーマンスが
落ちると思うのですが。
2億行のテーブルに対してIndex再構築は時間がかかりそうですし、
Index Fill Factorに余裕をもたせておいても、アクセスが多い(更新が頻繁な)
場合はあまり意味がない気がします。
Index再構築を考えるとテーブル分割しか対応方法はないのでしょうか。
>>629 ループで1行ずつ足す方法をやっていました・・・これだと異常に時間がかかってしまい
断念していましたが、教えていただいた方法で試してみます。
最適化?されたIndexなら良いのですが、更新が頻繁にある場合のIndex断片化および
再構築が気になって仕方ありません・・・。
ミッションクリティカルでないシステムの場合は夜間バッチで再構築もありだとおもうのですが
大規模システムでダウンタイムゼロのシステムの場合は、DBをミラーリングのようにしておいて
片方を落としてIndex再構築みたいなことをやっているのでしょうか。
大規模DBの場合、この辺をどう対応しているのかが気になりました。
>>631 履歴が30件限定なら、訪問者のIDをキーに含まないようにして代わりに1−30の番号を使用する。
場合によっては第一正規形を崩して1−30のデータを1レコードで持ってもよい。
これによってキーが書き換わる可能性が極めて低くなる。
足跡の更新にはメッセージキューを使うと幸せになれる気がする。
>>630 レンサバ固有の制限ならそこの業者に聞くしかないような。
635 :
626 :2006/10/14(土) 10:15:38 ID:???
>>632 たぶん、足あと機能の履歴30件での運用という意味ではなく、631は大量のレコードを
扱っているテーブルの管理が聞きたいだけなのかもしれない。
例題が300件だったら、1レコードに収まらないということで考えたほうがいいと思う。
>>631 まずそのテーブル構造だと主キーが[log_id][member_id]の複合のような気がするんだけど、
どうなのかな。
普通に考えて、[member_id]がユニークなのだからIndexは会員Noだけでよい気もする。
[member_id]をSelectして、[log_id]orアクセス時間でソート。
で、再構築に関しては2005からはオンラインで再構築できるようになったから、
バックグラウンドでやろうと思えばやれるはず。
場合によっては処理が引きずられて終わらなくなって、バックアップもまともに
出来なくなるだろうから、お勧めはしない。
少なからずウチはしていない。(データが少ないというのもあるけど)
ただ、632が言ってるように再構築しなくても良いようなテーブル構造するのがベスト。
あと、DBミラーリングに夢を持ってるみたいなのでついでに。
フェールオーバークラスタリング機能使ってもダウンタイムは発生するよ。
2000Ent使って、サーバ2台、HDD1台構成で運用してた経験があったけど切り替わりに1分近く掛かった。
要はサービスの再起動やってるから。2005は知らない。改良されたのかな。
サーバ老朽化のH/W切り替えのついでに2000→2005をやったんだけど、構築・管理・運用・復旧が大変なこと、
SLA定義してクリティカル度の再確認を理由にしてクラスタは止めた。
ちなみにサーバ管理者だけど、開発者ではないから構造云々は話半分でお願い。
もう解約したけど、ファースト鯖はやめとけ。 お試しでもやめとけ。
理由を3行でどうぞ
警告: NULL 値は集計またはその他の SET 演算で削除されました NULLで集計してるのはわかってるんで このメッセージーを出さないようにするにはどうしたらいいですかね。
>>626 100億 * 100Byte = 1000GB = 2TB?
1000GBがなんで2TBなんだ
626じゃないが1レコード200バイトと言っているか2TBではあるだろう。 実際はINDEXつけるだろうから2TBでも収まらんと思うが。
適当計算とか言ってるからどうでもいいじゃん 実際細かい計算なんてできるもんなのかも知らないが ところで、誰かLog Explorer for SQL Serverって使ったことある? 使い勝手ってどんなもんなのかな
642 :
NAME IS NULL :2006/10/23(月) 13:11:28 ID:pRTVOkHD
ARCServe+agent for mssqlでオンラインバックアップ取ってる人いたら教えて下さい。 週イチでフルバックアップ、 日次で差分取って復旧出来ますか? トランザクションログは無視でいいのかなぁと疑問に思いましたので
しかし情報源が少ないよね〜 ぐぐってもMSのサイト以外なかなか見つからない・・。
644 :
NAME IS NULL :2006/10/25(水) 00:46:10 ID:2cjIU9XR
IntegraionSrvices(SSIS)について詳しい方教えてください。 これからSSISでファイルtoDBのバッチ処理を開発します。 データフロータスクのフラットファイル接続マネージャで、入力ファイル名を 変数から指定する方法はありますか? 開発環境と運用環境のパスが違う可能性があるので困っています。
トランザクションログはいるだろ。
646 :
NAME IS NULL :2006/10/25(水) 12:52:47 ID:UZdZ/gmr
644です agent for mssqlはトランザクションログをバックアップしません。と書いてあったので… DBと別にos側(ファイルべース)でバックアップ取れって事ですかね…
647 :
NAME IS NULL :2006/10/25(水) 16:00:21 ID:djRfJ7iX
VB.NETでSQL SERVERにアクセスするWebアプリを開発中です。DBから取得した情報をDatagridに表示するという 処理なのですが、処理を実行したところ以下のエラーが発生しました。 '/WebApplication1' アプリケーションでサーバー エラーが発生しました。 -------------------------------------------------------------------------------- オブジェクト名 'Products' は無効です。 説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.Data.SqlClient.SqlException: オブジェクト名 'Products' は無効です。 ソース エラー: 行 30: Dim cmd As New SqlCommand("SELECT * FROM Products", cn) 行 31: 行 32: Dim dr As SqlDataReader = cmd.ExecuteReader 行 33: DataGrid1.DataSource = dr 行 34: DataGrid1.DataBind() ソース ファイル : c:\inetpub\wwwroot\WebApplication1\WebForm1.aspx.vb 行 : 32 スタック トレース: [SqlException: オブジェクト名 'Products' は無効です。] System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) System.Data.SqlClient.SqlCommand.ExecuteReader() WebApplication1.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebApplication1\WebForm1.aspx.vb:32 System.Web.UI.Control.OnLoad(EventArgs e) System.Web.UI.Control.LoadRecursive() System.Web.UI.Page.ProcessRequestMain() どうすればこのエラーを解消できるでしょうか? ちなみにOSはXP PROです。
>>647 Productsテーブルが見つからんというエラーだな。
使用しているデータベースが違うか、スキーマが違うかのどっちか。
テーブルを作ったときのユーザーと接続時のユーザーが違って無いかチェック。
接続先のDBをNorthWindにしていないからだそ。
650 :
NAME IS NULL :2006/10/26(木) 16:59:14 ID:KETWZyDn
2000なんですけど、DTSの設定情報をコマンド一発でテキストに落とす方法はありますか? ぐぐったら名前を付けて保存→VBソースに落とす ってな方法はあるみたいなんですが、 コレが限界なんですかね? 出来ればVBソースみたいなわかりにくいもんじゃなくて XML形式に落とせれば最高なんですが (スクリプトで調査・編集しやすいので)
SQLServer2005 です。 Transact-SQLから、外部に置いたSQLスクリプトファイルを実行するには、どうしたら良いでしょうか?
>651 セッション別でよければxp_cmdshellでisql経由で。 同じセッションがよければファイルを読み込んで、文字列につっこんで動的SQL。
653 :
NAME IS NULL :2006/11/03(金) 11:17:13 ID:eXw2/gh2
毎月Windowsのセキュリティパッチが公開されているが DBサーバには何を適用すればよいっすか? 皆さんのサーバはとりあえず全部適用してるのでしょうか?
そんなもの適用しねぇ 検証しねぇといけないじゃん。
654に同意 普通はセキュリティパッチの内容を確認して関係あるかないかを判断する 社内にあるサーバならほとんど放置、外からアクセスがあるようなところなら検証が必要
SP4がらみのトラブル報告が無さ過ぎる。怖くて適用できない。 てか入れないのかなやっぱ。みなさんの仕事では入れてる?
>>656 入れてますよ。最大メモリの件があったらしいけどそれのパッチも出てるから大丈夫でしょう。
統計の自動更新を入れていると時々全く応答を返さないクエリが発生するんだけど不具合か何かでしょうか? CPU使用率はCPU1個分が100%食ってる状態でタイムアウトをなしにして一晩放置しても結果が帰ってこなかった。 一度そういう状態になっても1〜2時間くらいで正常に応答を返すようになる。 毎回同じクエリが引っかかるわけでもなくテーブル3つくらいをサブクエリで使うクエリはどれでも起きることがある感じ。 統計の自動更新を外すと正常に応答を返すようになるので統計の自動更新でおかしなことになってるのかな? SQLServer2000SP4でWindows2003です。
>>652 遅くなりました。
ありがとうございました。
660 :
660 :2006/11/11(土) 11:13:07 ID:???
質問です。 かなり長くなる予定なので、見苦しくなる可能性があります。 申し訳ない。 WEBシステム 開発言語:Java アプリサーバ:Interstage Application Server DB:SQL Server 2000 用途:複数店舗(50店舗ほど)からのデータ照会・登録・更新・削除 上記環境でWEBシステムで、 ある日から商品詳細画面の表示が非常に遅くなった。 SQLプロファイラでのトレース結果から、問題となるクエリを抽出した結果、 Reads件数が、通常の20倍以上であった。(1,000〜2,000 → 40,000) (以下、該当クエリ@見づらくてすみません) ※ 本日='20061108' (01) SELECT (各種マスタ・データから100項目程度) (02) FROM 商品マスタ 商品 (03) ---------- (04) LEFT JOIN 端末マスタ 端末 ON IPアドレス='(接続端末のIP)'/* IPより店舗を取得する為 */ (05) LEFT JOIN (その他マスタ10種類程度) (06) : (07) ---------- (08) LEFT JOIN (SELECT 商品コード, SUM(発注数) AS 発注数 FROM 発注データ WHERE 日付='20061107' AND 店舗コード='0000' GROUP BY 商品コード) 発注1 ON 発注1.商品コード = 商品.商品コード (09) LEFT JOIN (SELECT 商品コード, SUM(発注数) AS 発注数 FROM 発注データ WHERE 日付='20061108' AND 店舗コード='0000' GROUP BY 商品コード) 発注2 ON 発注2.商品コード = 商品.商品コード (10) LEFT JOIN (SELECT 商品コード, SUM(発注数) AS 発注数 FROM 発注データ WHERE 日付='20061109' AND 店舗コード='0000' GROUP BY 商品コード) 発注3 ON 発注3.商品コード = 商品.商品コード (11) LEFT JOIN 実績データ 実績1 ON 実績1.日付='20061101' AND 実績1.店舗コード=端末.店舗コード AND 実績1.商品コード=商品.商品コード (12) LEFT JOIN 実績データ 実績2 ON 実績2.日付='20061102' AND 実績2.店舗コード=端末.店舗コード AND 実績2.商品コード=商品.商品コード (13) LEFT JOIN 実績データ 実績3 ON 実績3.日付='20061103' AND 実績3.店舗コード=端末.店舗コード AND 実績3.商品コード=商品.商品コード (14) LEFT JOIN 実績データ 実績4 ON 実績4.日付='20061104' AND 実績4.店舗コード=端末.店舗コード AND 実績4.商品コード=商品.商品コード (15) LEFT JOIN 実績データ 実績5 ON 実績5.日付='20061105' AND 実績5.店舗コード=端末.店舗コード AND 実績5.商品コード=商品.商品コード (16) LEFT JOIN 実績データ 実績6 ON 実績6.日付='20061106' AND 実績6.店舗コード=端末.店舗コード AND 実績6.商品コード=商品.商品コード (17) LEFT JOIN 実績データ 実績7 ON 実績7.日付='20061107' AND 実績7.店舗コード=端末.店舗コード AND 実績7.商品コード=商品.商品コード (18) LEFT JOIN (その他データ数種類) (19) : (20) ---------- (21) WHERE 商品.商品コード IN (SELECT TOP 10 商品W.商品コード FROM 商品マスタ 商品W WHERE (条件略))
661 :
660 :2006/11/11(土) 11:14:03 ID:???
(前承) 簡単に言えば、ある条件のトップ10商品に関して、 前後1日の発注(予定)、過去7日間の実績(売上、仕入等)を抽出しているだけです。 ちなみにデータ件数ですが 商品マスタ:50,000件くらい?(すみません、覚えてません) 発注データ:40,000(件/日)×3ヶ月=3,600,000件 実績データ:400,000(件/日)×5週間+α(未来が若干)=15,000,000件 ※ LEFT JOINでのリンク部分においては、すべてクラスタ化インデックスでのスキャンとなっています。 上記クエリをSQLクエリアナライザで実行し、実行プランを確認した所、 (17)の部分の負荷が、非常に高くなっていました。 ※ 参照件数を見る限り該当日付の全レコードを読み込んでいるっぽい (11)〜(16)と(17)の行を入れ替えたり、 (11)〜(16)と(17)の日付を入れ替えたりして、クエリを実行した場合、 入れ替えた行(つまり日付='20061107'の行)がかならず負荷が高くなります。 (17)の日付='20061108','20061109'等に変更すると、問題なく動作します。 また、(17)の商品.商品コードを固定値('49〜'等)に変更しても、問題なく動作します。 と言うわけで、「実績データ」のインデックスが壊れているような気がしたので、 ・インデックスの再創生 ・インデックス削除 → 再作成 と行いましたが、結果が変わりませんでした。 また、クエリを最小限にして実行した場合(以下参照)、 (01) SELECT (各種マスタ・データから100項目程度) (02) FROM 商品マスタ 商品 (03) ---------- (04) LEFT JOIN 端末マスタ 端末 ON IPアドレス='(接続端末のIP)'/* IPより店舗を取得する為 */ (07) ---------- (11) LEFT JOIN 実績データ 実績1 ON 実績1.日付='20061101' AND 実績1.店舗コード=端末.店舗コード AND 実績1.商品コード=商品.商品コード (12) LEFT JOIN 実績データ 実績2 ON 実績2.日付='20061102' AND 実績2.店舗コード=端末.店舗コード AND 実績2.商品コード=商品.商品コード (13) LEFT JOIN 実績データ 実績3 ON 実績3.日付='20061103' AND 実績3.店舗コード=端末.店舗コード AND 実績3.商品コード=商品.商品コード (14) LEFT JOIN 実績データ 実績4 ON 実績4.日付='20061104' AND 実績4.店舗コード=端末.店舗コード AND 実績4.商品コード=商品.商品コード (15) LEFT JOIN 実績データ 実績5 ON 実績5.日付='20061105' AND 実績5.店舗コード=端末.店舗コード AND 実績5.商品コード=商品.商品コード (16) LEFT JOIN 実績データ 実績6 ON 実績6.日付='20061106' AND 実績6.店舗コード=端末.店舗コード AND 実績6.商品コード=商品.商品コード (17) LEFT JOIN 実績データ 実績7 ON 実績7.日付='20061107' AND 実績7.店舗コード=端末.店舗コード AND 実績7.商品コード=商品.商品コード (21) WHERE 商品.商品コード IN (SELECT TOP 10 商品W.商品コード FROM 商品マスタ 商品W WHERE (条件略)) この場合は、問題なく動作したりします。(ワケワカンネ
662 :
660 :2006/11/11(土) 11:16:18 ID:???
(前承) 更に、「実績データ」に対して ・データ退避 → テーブル削除 → 再作成 → データロード('20061101'以降のみ) と行ったら、日付='20061107'では良好になりましたが、 今度は、日付='20061108','20061109'等の未来日付で異常(高負荷)になるようになりました………(ワケワカンネ ちなみに、サーバ機のディスクに障害はないっぽいです。 (イベントビューアや監視ソフト上ではアラートはあがっていません。) 結局、 [1] インデックス領域が論理的 or 物理的に壊れている [2] 実績データの件数が多すぎ [3] クエリが長すぎる(テキストにして10KB以上なんですよね…) [4] クエリの返す結果が大きすぎる と考えたのですが、さっぱり判らず、 最終的に、妥協案ですが、「実績データ」を再び ・データ退避 → テーブル削除 → 再作成 → データロード('20061101'以降のみ) と行い、インデックス作成時に非クラスタ化インデックスで作成したら、 試した限りのパターンで、問題なく(非クラスタ化インデックスの為、極小の負荷がかかっていますが)動作しました。 という訳で、とりあえずは暫定的にはなんとかなったのですが、 いつかのタイミングでまた起こり得そうな感じがして、いまいち納得がいかないんです。 長くなりましたが、 原因が判る(または、推論等でも全然かまわないのですが)方、 同じような現象に事があった事がある方がおりましたら、 何か対処/対応法、意見等をいただけたら幸いです。 長文/乱文、本当に失礼しました。 鬱陶しい、見苦しいと思われた方がいましたら、大変申し訳ありませんが、スルーしてください。m(_ _)m
JOINの数が多いと途端にパフォーマンスに影響でるんですよね だからといってどうする訳にもいかなそうですけど 私の場合JOINの相手が件数の少ないマスターだったから できるだけJOINを除きプログラム側で対処してしまいました
なんつーか、問題のSQLの特に後半部分が頭悪いと言う印象しかない。 >実績データ 実績1 ON 実績1.日付='20061101' なんて指定してJOINするDBの設計に欠陥があると思うのだが。 Accessから移植したDBかよ、って感じだ。 ソフトを改良できないんだったら、仕方ないので、 より高速なハードウェアに交換汁。としかいいようがない。
665 :
660 :2006/11/11(土) 17:43:02 ID:???
>>663 返信、ありがとうございます。
JOINの問題もあるのかなぁ…
確かに一回ですべてを読み込む必要って無いとは思うんだよね。
特に、発注データのサマリの部分は…
(私なら、少なくともそこは外で取得するような設計するんだが…)
コーディングレベルの対応だと面倒なんだよなぁ…
時間的にも………金額的にも……………_| ̄|○
666 :
660 :2006/11/11(土) 17:50:13 ID:???
>>664 返信、ありがとうございます。
ハード面は、一応検討済み。金の問題な訳で…_| ̄|○
それと、設計レベルの不具合(ちゅーかダメダメさ)は今更勘弁。
つか、私自身が一番思ってる所。
ちなみに、実績データのDB設計って
どんなんだったら良かったんでしょうか。
日付・店舗・商品別に各種実績値を持たせてるだけなんだが。
日付毎に横持ちさせた方がいいん?
667 :
664 :2006/11/11(土) 19:02:01 ID:???
>>660 実際はもっと複雑なクエリが動いていて、ハード面での
実装とパワーのバランスがあるから一概にいえないが、
joinするにして、それらのJOINを高速にしたかったら
テーブルに固有のIDを割り振るべきかと。
そして「前後1日の発注(予定)、過去7日間の実績(売上、仕入等)を抽出」
のクエリならFROM句は「発注データ」か「実績データ」で商品マスタをJOINじゃねーの?
またDB設計の段階で発注に対する発注番号(発注データ.発注ID)と
実績データ(実績データ.発注ID)としてJOINさせるにしても負荷が
かからないテーブル設計するとか。
でメインのクエリのWHERE句で「実績データ.日付 BETWEEN CURRENT() DATE() - 7 AND CORRENT_DATE()
とスマートに書け。アフォみたいに一週間分の日付リテラル指定しているのはどーかと思うし。
とメインはDB2使いの漏れが言ってみるテスト(w
ああ、タイプミスが。 CURRENT_DATE()関数は当日の日付を返すです。 実際は-7で一週間前にはならんと思うので創意工夫ヨロ
MySQLと間違えた ややこしい名前つけんなM$氏ね!
671 :
NAME IS NULL :2006/11/13(月) 13:18:35 ID:ULPeGeY3
ディスク障害が起こった場合、ログファイル無しで復旧できますか? 復旧方法も教えてください
>671 ディスク障害で全部お釈迦になったの? バックアップはいつ時点のどういう状態のものがあるの? ログファイルがないという情報しかないのであれば、 どう復旧させたらいいのかおいらもわからん。
673 :
NAME IS NULL :2006/11/15(水) 15:38:03 ID:8Q9DJyEe
SQL Server 2005の入っていたWindows Server 2003をアンインストールして入れなおしたのですが、 SQL Server 2005の再インストール時、 「SQL Server セットアップは、ユーザuser\domainをローカルグループSQLServer2005MSFTEUser$machine$MSSQLSERVER」 と出てインストールできませんでした。 もしかしたらスレ違いかも知れませんが、 対処法などご存知の方がいましたら教えてください
674 :
NAME IS NULL :2006/11/15(水) 18:00:05 ID:BzPAr/v3
SQLServerの国際化についてですが、行き詰まってます… JSP→Servlet→JDBC→SQLServer2000という構成で、 クライアントから入力した韓国語、中国語がSQLServer内で化けてしまいます。 (エクセル2000へのエクスポートで確認) SQLServerでは、型をnvarcharにしただけです。 JSPはcharsetをUTF-8とし、ファイルをUTF-8で保存しています。 SQLServerとJavaはUCS-2を使用しているため、JDBCの前後では何らかの変換は 不要と予測しています。となると、JSPのリクエストをServletで受け取ったところで UTF-8とUCS-2への変換、またレスポンスを受け取る際はその逆変換が 必要になるかと思うのですが、そもそもそのような事ができるのでしょうか。 また、そもそも、Java環境でのSQLServerの国際化の方法は上記で合っているのでしょうか。 現状は、Servletで new String(xxx.getByte(8859_1), "UTF-8")としても化けます。 また、何もしなくても化けます。 OSはWindows2000です。韓国語、中国語のフォントは入れております。
675 :
NAME IS NULL :2006/11/15(水) 19:09:00 ID:NWg/dc2n
SQLサーバのエージェントでタイマー起動のDBのバックアップファイルから、 DB復元を実行すると、PGからアクセス出来ない現象がおきています。 どうも、復元するときにクリエイトテーブルが走って接頭語(USER OR DB体?) が付いているみたいで、接頭語を付与するとクエリアナライザから読めます。 DB復元前: drop table XXテーブル DB復元後: drop table USER.XXテーブル DB復元時に、接頭語がつかない復元方法の 対処法などご存知の方がいましたら教えてください 。<(_ _)>
>>675 ユーザーとログインの関連付けがうまく行ってないのじゃないの?
>>674 まず、どの時点で文字化けが発生しているのかを確認すること。
登録時に化けていることは確認済み、とのことなので、リクエスト
パラメータをStringオブジェクトに格納するときに化けているのか
ServletからDBに登録するときに化けているのかを確認する。
それから、日本語は化けていないの?
>また、そもそも、Java環境でのSQLServerの国際化の方法は上記で合っているのでしょうか。
MS純正のJDBCドライバであれば、そもそも対象の列定義がなんであれ、
適切な変換を自動的に行う仕様になっているはずです。
>現状は、Servletで new String(xxx.getByte(8859_1), "UTF-8")としても化けます。
この方法はServlet2.2以前の手法。
request.setCharacterEncoding("UTF-8");
を実行すること。
678 :
NAME IS NULL :2006/11/16(木) 14:36:10 ID:DKWl/GHI
調査を続けた結果、以下一通りうまくいきました。 JSP→Servlet→JDBC登録→SQLServer→JDBC検索→Servlet→JSP 結論から言うと、SQL文中のUnicode型の値に対し、 Nプレフィックスがなかったのが原因です。 nchar,nvarcharといい、SQLServerの独自仕様なんですね…困ります。 もっと汎用的な方法はないものかと。。。 リクエスト部分についても、自前でUTF-8でファイルに出力して 試しましたが、問題ありませんでした。(log4jがエンコーディングを指定できないため) また、new String(xxx.getByte(8859_1), "UTF-8")でも request.setCharacterEncoding("UTF-8"); でも同じ結果でした。 回答をくれた方ありがとうです。
679 :
NAME IS NULL :2006/11/16(木) 14:59:00 ID:FKuri+ao
SQL Server 2005 Express、Management Studio Expressを使ってます。 同じDBを他のPCにもすぐ用意出来るようにするためにダンプファイルを作りたいのですが、 作り方がわかりません。 右クリック→名前を付けてスクリプト化ってやつですか?
>>678 独自といえばそうだが、多国語文字を直接SQLにコンスタントに埋め込む必要はあるのか、
プレースフォルダで指定してパラメーターにすれば問題なく使えると思うのだが。
>>679 Oracleのexp/impユーティリティのようなものを期待してるならそんなものは無い。
ローカルやオンラインで繋がってる環境ならIntegration Services(2005)かDTS(2000)が使えるが
expressではサポートしていない。
データベースの規模が小さいならデタッチしてまるごと持ってゆくのが吉。
SQL Server 2005SP1にてデータベースミラーリングを組もうとしています。 プリンシパル、ミラー、ミラー監視を同マシンにてインスタンスを3つ作って ミラーリングする分にはまったく問題なく行くのですが ミラーを別のマシンにしてミラーリングするとうまくいきません。 具体的にはALTER DATABASE でパートナーを指定するときに ミラー→プリンシパルのパートナー指定はうまくいくのですが プリンシパル→ミラーのときのALTER DATABASEがエラーコード1418が 発生しうまくいかないです。 いろいろ調べたところドメイン環境だと何も考えなくて言いようですが ローカルシステムユーザにて実行している場合はユーザ認証がらみの エラーが出てしまうようです。 MSDN等見て証明書を発行したりしてみたものの、うまくいかないのですが 誰かマシン2台+非ドメイン環境でミラーリングを組んで成功した人は いないでしょうか?
683 :
NAME IS NULL :2006/11/21(火) 23:15:04 ID:obYC19E+
技術的な質問ではないのですが・・・ SQLServerにSQLサーバ認証でクライアントアプリを接続した場合、SQLServerのライセンスは 1接続分必要ですがWindows鯖への接続はノーカウントで良いのでしょうか?
Windows鯖への接続も 不特定多数の場合ならExternalConnectionLicense。 そうでないなら通常のCALが必要のはず。
685 :
NAME IS NULL :2006/11/23(木) 16:58:36 ID:v1iq/dyp
Transact SQLをつかって新規Databaseを作成する際に -------------------------------------------------------- CREATE DATABASE [whiskey_love] ON PRIMARY ( NAME = N'whiskey_love', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\whiskey_love.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )..... -------------------------------------------------------- ですとDatabaseを作成できるのですが、ファイルパスを変数として容易に変更可能にしようとして -------------------------------------------------------- DECLARE @dbpath nvarchar(128) SET @dbpath = N'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\whiskey_love.mdf' CREATE DATABASE [whiskey_love] ON PRIMARY ( NAME = N'whiskey_love', FILENAME = @dbpath, SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )..... -------------------------------------------------------- とすると ------------------- メッセージ 102、レベル 15、状態 1、行 16 '@dbpath' 付近に不適切な構文があります。 ------------------- と表示されてしまいます。 CREATE DATABSEではFILENAMEに変数を使用することはできないのでしょうか。
TransactSQLって案外その辺変数とかが自由に使えないよね。 ストアド内でIdentityの列を持った一時テーブル作るところで 初期値を変数でセットしたかったんだけど出来なくて悔しかった覚えがある。
SQL Server 2005 なのですが、テーブルのスクリプトを作成する時に、 列のプロパティの「説明」の部分を出力したいのですが、 SQL Server Management Studio で出力するとこの部分が出力されず、 方法がわかりません。 列の説明の部分も含めてスクリプトに出力する方法があれば教えて 頂けないでしょうか?
VBでSQLDMOにてバックアップをとったまではいいんですが、 そのバックアップをリストアしようとすると「排他アクセスできません・・・」 というエラーが出てしまい、リストアができません。 何が原因か不明なのでどなたかアドバイス下さい。
シングルユーザモードで起動してないとか。
親ストアドから、子ストアドのトランザクションを制御することは可能なのでしょうか? たとえば、ストアドAからストアドB1、B2を呼ぶような構成の場合、 B2でエラーが発生したらB1、B2のロールバックをA1で行う、といった流れです。
最後の行ミスりましたorz ×ロールバックをA1で行う〜 ○ロールバックをAで行う〜
>>691 できる。
MSSQLのトランザクションはネストできるから、たとえB1、B2の中にトランザクションがあってもそれなりに動く。
それなりの中身が気になるならBOLを参照。
695 :
NAME IS NULL :2006/11/29(水) 18:26:10 ID:Nq3VYQ/3
varchar (MAX)だけど、使いやすっ 結構レスポンスも早いけど・・・使いまくってるが大丈夫かなぁ。 みんなそう?
2005使ってるんだが、メンテナンスプランでジョブの実行順序が 制御できないんだが、漏れだけか? ジョブはテーブルのcsvエクスポートをSSIS保存したのを、 そのままステップにいくつか登録してジョブとしたもの。 これと同じようなジョブをもう1つ作って(1つのジョブにしなかったのは それぞれ単体でも実行したいから)、この2つを順番に実行したいから メンテナンスプランからジョブをまとめました。 メンテナンスプランで矢印を繋いで制約を完了とか成功にしてるんだが それぞれのジョブがパラレルで動いてしまうのです。 なんか勘違いしてますかね。
697 :
NAME IS NULL :2006/11/30(木) 23:21:53 ID:aXwUgIXF
698 :
NAME IS NULL :2006/11/30(木) 23:51:02 ID:EIrKJZOX
WindowsVistaにSQLServerをInstallして使っているのですが、 接続に時間がかかります。 で、エラーログを調べてみたらこんなエラーが出てました。 ソース 'Microsoft-Windows-Security-Auditing' のイベント ID '5061' の説明が見つかりません。 必要なレジストリ情報またはメッセージを表示するメッセージ DLL ファイルがローカル コンピュータに存在しない 可能性があります。または、これらのデータへのアクセス許可がユーザーに与えられていない可能性があります。 次の情報はイベントの一部です:'S-1-5-18', 'コンピューター名$', 'ワークグループ名', '0x3e7', 'Microsoft Software Key Storage Provider', 'RSA', 'Microsoft SQL Server$MSSQLSERVER$FallBackCert', '%%2500', '%%2480', '0x0' よく見てみるとイベントIDはいくつかの種類がありますがすべて ソース 'Microsoft-Windows-Security-Auditing' で始まるエラーです。 SQLServer2005 SP2ですが、これで何かわかるかたはいらっしゃいますか?
700 :
699 :2006/12/06(水) 09:47:34 ID:???
未だによくわかっていませんが、とりあえずExpressを使うと大丈夫そうなので それで対応しました。 とりあえずということですが・・。
701 :
NAME IS NULL :2006/12/06(水) 10:55:28 ID:YuO4Y4BI
vistaみてーな正式版も出てない怪しいおもちゃでDBを運用するようなヤツがいるのか? まだ公式な情報も無いし、あちこち大幅に変わってるし、メーカーも対応してないのにか? 遊びや実験でやるんならわからんでもないが
702 :
NAME IS NULL :2006/12/06(水) 11:05:23 ID:6GghITXQ
Microsoft Accessのテーブル内フィールド最大個数は255個 Microsoft SQL Serverのテーブル内フィールド最大個数は何個ですか?
1024カラム/行。むしろ8,060バイト/行の制限ほうが先にくる。
705 :
699 :2006/12/06(水) 12:47:36 ID:???
>>701 別に正式に運用しているわけではありません。
テストしてるんです。
それと正式版です。
MSDNな人と企業ユーザーの一部は正式版使えるな しかし、クライアントならともかくサーバーをいきなりテストする意味は
707 :
699 :2006/12/06(水) 12:57:26 ID:???
>>706 私が悪かったです。ごめんなさい。
荒らしてすみませんでした。
708 :
教えてください・・・ :2006/12/06(水) 14:51:46 ID:lAjnh/tr
Sql server management studio express でテーブルを開く際、いちいち右クリックしないといけないんでしょうか? 他のDBのツールの癖でついリターンキーを押下してしまいます。
709 :
NAME IS NULL :2006/12/07(木) 19:37:09 ID:iGAVIqmT
今までLANだけで使っていたSQLServerがあるのですが、 これをHTTPしか使えない外からアクセスしなくてはならなくなりました。 例えばSQLServerのネットワークプロトコルをHTTPでWrapするようなものって ないでしょうか?
SQL Server 2005での開発において、charとvarcharの違いに困っております。
当初は固定長と可変長の違いくらいしかない程度に思っていたのですが、
char(5)のフィールドに”あいうえお” -> OK
varchar(5)のフィールドに”あいうえお” -> NG(「文字列データまたはバイナリ データが切り捨てられます」エラー)
となってしまい、目論見が外れてしまいました。
http://msdn2.microsoft.com/ja-jp/library/ms175055.aspx によると、「varchar(6) は、このデータ型に最大 6 文字まで格納できることを示します」となっているので、
てっきり全半角関係なく文字が入るものと思っていたのですが・・
何か他に見落としている違いがあるのでしょうか?
すいません、勘違いだったみたいです。両方で同じ結果が得られました スレ汚し失礼しましたorz
charのつもりがncharだったとかかしら charとvarcharなら、どっちも`あいうえお'は入らないし。
charは、固定長の文字列 varcharは 可変長の文字列として扱われる 日本語は2バイトとして扱われるので5バイトであれば3文字格納しようとするとエラーになる。 nchar、nvarcharはUnicode文字列を扱うためのデータ型。こちらはシングルバイト文字も2バイトとして格納される。 おれみたいにWebシステムばかりつくっているとncharとnvarcharをもっぱら利用する。
714 :
NAME IS NULL :2006/12/08(金) 18:08:31 ID:i4CIm9Hz
同一DBからバックアップした日時の異なる2つファイルを同一マシンの復元して サブクエリを使った同一条件のSQLをManagementStudioのクエリから実行すると バックアップした日付の新しいDB(対象件数が多い)ではtempdb.mdfが90MB程度増加するのに対して バックアップした日付の古いDB(対象件数が少ない)ではそれが7GB以上増加するのですが 件数が少ないにも関わらずtempdb.mdfが多い処理に比べて増加する原因は何が考えられますか? ProfilerでデバッグするとReportServerが[Event]テーブルに対し繰り返しI/Oを行って その度に増加しているのですが現象の原因がよく分からないのです
715 :
NAME IS NULL :2006/12/08(金) 22:50:17 ID:R+mvYS7n
SQL Server 2000を初めて使うことになったのですが、text型のデータの 出し入れのやり方がわかりません。 MySQL3で動いていたものを移植しているのですが、単純に移植したら 大きいデータが途切れて返ってくるのですが、、、 どうしたらいいものでしょうか 助けてください、、、
>>715 なにで使ってんのかぐらい書けよ。PHPか?
>>716 FreeBSD6.1
Apache1.3
PHP5
です。
718 :
NAME IS NULL :2006/12/10(日) 11:38:27 ID:ke+O4cHU
インターネットを通じてSQLサーバー間でデータをやり取りする方法を 教えてください。 下記の方法を想定しています。 1.会社内で顧客を登録(SQL A) 2.インターネット上に置いたSQL(SQL B)にそのデータを同期 3.SQL Bにある顧客名を携帯からプルダウンで選択させ、営業報告結果 を入力させる。 4.入力したデータをSQL Aに反映させる SQL B についてはホスティングサービスでSQLServer が使えるところを想定しています。 入力データをテキストファイルに出力してFTPでとってくる方法もあるかもしれませんが、 取得間隔とかエラー処理をあまり気にしたくないので、SQLServerでできないかと。 同一ネットワーク間だと資料は当然あるのですが、上記のケースは見かけませんでした。 SQL BをMyとかポスグレというのは無理ですよね。
>>718 できる、できないの話ならできるし、Internetの鯖がMySQLだろうが
Sybaseだろうが可能だろう。
ただ、
>>718 程度の知識でソレを実践しようとすると、
そのプロジェクトはデスマ決定だろうなぁ。
720 :
NAME IS NULL :2006/12/10(日) 12:16:50 ID:ke+O4cHU
>>719 できるできないの返答ではなく手段を聞いているのだ。
要はおまいは説明できないんだろ?
「Internetの鯖がMySQLだろうがSybaseだろうが」
この文の書き方時点で、俺以下確定だ。
ID:ke+O4cHUが必死になってまつな
アフォなSEが2chで質問して逆ギレでつか
DB板には珍しい現象ですね!(・∀・)ニカ!
普通にSIerに相談しろって事だろ。 しかし、そういう案件でSQLServerに拘る理由がわからんが。 どんなシステムでもエラー処理は気にしなきゃいけないし、 「気にしたくないのでSQLServer」ってのがワケわからん。 相談される方も商売だから対応するだろうけど、 携帯系だとMySQLやSybaseの方が導入実績多いんだが。
>718 BOLはもってないんか? ちょっと、目次を眺めてみようとか思わんのか? なんかわけわからん噛み付きしてるしみてて気の毒になってきた。
>>718 ところで、もしその2つのSQLServerが同じLAN内にあったとしたら、
その2つのSQLServer間のデータのやりとりは出来る当てはあるの?
インターネットだろうがLANだろうがTCP/IPには変わらないので、
同じやり方すればいいんじゃね?
727 :
NAME IS NULL :2006/12/11(月) 00:00:16 ID:CSR5Laje
>>718 SQL鯖側のポート1433を空けておけばLAN内の鯖接続と同じさ!
そして、LAN内と同じようにウイルスにやられると・・・
saのパスワードブランクでヨロw
730 :
NAME IS NULL :2006/12/13(水) 00:14:26 ID:yVx21Jep
つーことで、レプリケーション使えばいいんだよね? しかし安いレンタル鯖では無理だろうな。専用鯖ならいいが。 話それるけど、わかってはいても SQL Server を SQL って略すのは慣れないなぁ。 俺の前の上司がそうだったんだけどさ(w
そしてデスマが始まるのか…
♪やっとこやっとこくりだしたー
733 :
NAME IS NULL :2006/12/14(木) 15:09:47 ID:EhO4PNVc
>>718 のレベルじゃ概要設計もままならないだろうに
メンバがかわいそうだよ
妙なトコで金をケチって大失敗するいい例だろうなぁ。
SQLServer2000で、毎年3月31日の23時50分にSQLを実行するような ジョブをスケジューリングしたいのですが、可能でしょうか? 日付を3月31日に指定しても次の31日(5月31日)に、 再度実行されてしまいます。
>>736 10年分くらい手動で登録しておくとかw
それ以降は保守費用が必要ですよと・・・。
738 :
736 :2006/12/16(土) 00:31:24 ID:???
>>737 それは最終手段ということでw
どうしても無理っぽかったらそういう方向でいこうかと思います。
739 :
NAME IS NULL :2006/12/20(水) 01:07:19 ID:11kqGl3X
インストールの時にシステムデータベースやtempdbの配置を細かく指定する方法ありますか? データファイルとトランザクションログを別ディレクトリに配置したいのですが…
740 :
NAME IS NULL :2006/12/20(水) 22:52:21 ID:aocdH2Ll
メンテナンスプランのインデックスの再構築で、 「ページごとの空き領域比率を変更する」に20%をいれといたら、 DBのサイズが4倍に膨れ上がったorz。これはMSのワナですか?
>>740 FILLFACTORは指定の%だけデータをつめる指定だから、4〜5倍になるのは当然じゃない?
別のDBMSでは空き分を指定するものもあるからたまに勘違いするやからがいる。
742 :
NAME IS NULL :2006/12/22(金) 01:17:01 ID:NXkTsvze
>>741 一度はそう思って納得してたんだが、
SP1を適用後、「ページごとの空き領域比率を変更する」に80%
を設定したら、またしても4〜5倍に膨れ上がった…orz
2重トラップかーーーー!?
743 :
NAME IS NULL :2006/12/22(金) 15:30:10 ID:8Jl2GbsI
>>743 CrusoeはCPUチェックで蹴られるお。
745 :
NAME IS NULL :2006/12/22(金) 16:20:58 ID:Gv6jbZYz
2000から2005に移行中です。 ユーザーをsp_help_revloginで移す予定ですが、オブジェクト権限とかは設定しなおしですか?
SQLServer2000+ADOのありがちなシステムの ソースチェックを依頼されたので、見ているのですが 接続プールを自前で実装しちゃっています。 ADOにプール無いんでしたっけ? (デフォルトで作動しているような気がするんですが)
>>747 まさに欲しかった情報です。ありがとうございます!
マルチスレッドだと若干扱いが難しくなるようですね。
プログラム全体で閉じないConnectionを1個
各スレッドで扱うConnctionは1個
って感じでしょうか
SQL SERVER 2005をアンインストールしたいんだけど、コントロールパネルから アンインストールをすると必ず失敗する どうすればいいの?
OS入れなおせw
751 :
749 :2006/12/24(日) 22:05:54 ID:???
SQLServer2000のフルテキスト検索を試しているんですが、 NorthwindのCategoriesで試しても0件しか帰ってこないです。 条件の指定がおかしいのでしょうか? 下記のクエリーで試しているのですが。 select * from Categories where CONTAINS(Description,'Sweet') サポートサービスのフルテキスト検索も始まっていて、 クエリー実行時も特にエラーは起きていないようなんですが。
754 :
NAME IS NULL :2006/12/27(水) 01:52:54 ID:HQEHQMMV
ファイル配置を検討中です 700GB程度のDBですが、データファイルサイズは皆さんどれくらいにしてます? 1ファイル50GBくらいにしたほうがいいのかな〜? この辺りの定石があったら教えてください
nchar と nvarchar ですが、5桁程度の文字列の場合で、100%固定長ではない場合 (だいたい5桁はいるけど、まれに それ以外の桁数が発生する) こんな場合、みなさんなら nvarchar を使いますか? それとも、nchar を使いますか? ちなみに、この項目は、そのテーブルのプライマリキーです。 桁数が多い時は無条件に nvarchar を使いますが、短い時は、 nchar にすべきか、nvarchar にすべきかいつも迷います。 アドバイスください。
固定でいいんじゃね?
100%固定長でない値が入るカラムを固定長にすると 直接select文でデータを見たいときとか いちいちwhere xxxx = ' 1234' みたいに聞かなきゃいけないから面倒くさい
>>755 > それ以外の桁数が発生する
細かいことだけど「それ以下」じゃなくて?
おれは、基本的に同一の桁数にならない場合は varchar 系を使う。
char 系だと、桁数が不足している時に後にくっつく空白の存在を忘れ
てバグってしまったことがあるから。
>>755 データをゼロパディングさせられれば固定長。
でなければ可変長だな。
SQLServer2000のデータベースサーバーインストールをしようとしているのですが、 インストール中、サーバー設定の部分で以下のエラーが出てしまいます。 サーバーの設定に失敗しました。 詳細についてはサーバーのエラーログと、C:\WINDOWS\sqlstp.logを参照してください。 何度試してもこのエラーが出てしまい、sqlstpを見てもよくわかりません。 どなたか教えてもらえませんか?
>>760 どんな環境にインストールしようとしてるの?
sqlstp.logを参照できるのは、あなただけなんだけど・・
>>760 > sqlstpを見てもよくわかりません。
なんで、晒そうとしないんだ...。
> どなたか教えてもらえませんか?
104 に電話して、市内のエスパーさんの電話番号聞いて、電話すればいいと思うよ。
>>760 もしかしてWindows2000 SP2以降に入れようとしてるとか?
SP4とかに入れようとしてるなら、SQL Server 2000のSP3かSP4を入れないと
すんなりインストール出来なかった覚えがあるよ。
「サーバーの設定に失敗しました」の後にリブートしてから、
SQL Server2000 SP4を入れると確かOKだったはず。
764 :
760 :2007/01/04(木) 04:08:47 ID:???
765 :
NAME IS NULL :2007/01/04(木) 22:55:33 ID:vVnBA9bS
SQLServer2005ですが、MySQLのMD5()関数のようなものはありますか?
bcpコマンドで、 bcp out ... orderヒントを使うのと、 bcp queryout ... rder by 句を使うのとどう違うんですか?
767 :
NAME IS NULL :2007/01/10(水) 21:42:20 ID:Io9Psu79
上のを訂正します。 bcpコマンドで、 bcp out ... orderヒントを使うのと、 bcp queryout ... order by 句を使うのとどう違うんですか?
>>767 マニュアルを見たらヒントはロード時専用のオプションのように書いてあるが
outには影響しないのではないかな?
769 :
NAME IS NULL :2007/01/12(金) 11:55:16 ID:OY3pGSSx
SQLサーバ2000SP4でインデックスの断片化状況が監視できる パフォーマンスカウンタの項目はありませんでしょうか? \SQLServer:Access Methods\あたりではないかと見込んでいますが
770 :
NAME IS NULL :2007/01/12(金) 22:21:17 ID:bkYGPvz+
>>768 よく分からない・・・
でも、返答ありがとう
新サーバーへ以降を考えていますが、処理速度があまりにも悪く疑問に思っています。 ある社内アプリケーションで比較した場合ですが、旧サーバーで10秒で済むものが、新サーバーでは40秒となってしまいます。 考えられるのは、プログラムの関係で、SQL2005(新サーバー)のオプションでデータベースは2000を指定しています。 この設定で処理能力はここまで落ちるものでしょうか? 旧サーバー P3-1GHz*2 RAM2GB SQL2000STD 新サーバー XEON2.8GHz*2(4CPU) RAM4GB SQL2005WorkGroup
>>771 何か設定が悪いんだろうな。それだけの情報だとコンサル入れろとしか言えない。
773 :
NAME IS NULL :2007/01/16(火) 12:18:27 ID:WaLxqazn
Windows 2000 Server SP4 SQLserver SP3aの環境です。 ハードディスクの空き領域が少なくなってきたので、 「トランザクションログの切り捨て」後に「データベースの圧縮」を実行しました。 圧縮後 トランザクションログが、6.5GB → 1.5GBまで縮小したのですが、 その後、日次運用のDB更新処理をしたら トランザクションログが、1.5GB → 6.5GBまで増大してしまいました。 ハードディスクの空き領域が確保できず困っています。 DB更新処理は DB内のレコードを全件削除し、新たなレコードをINSERTする処理です(いわゆる全件更新)。 このような経験のある方、回避策を教えてください。 よろしくお願いします。
>>773 復旧モードは何で運用してるのか?
更新で1トランザクションで大量更新はしているのか?その対象になるデータ容量はどのくらいか?
>>773 >DB内のレコードを全件削除し、
Truncate Tableを使ったらどうだ?
>>774 >>775 レスありがとうございます。
・復旧モードはシンプル
・1トランザクションで大量更新は…分かりません。すみません。
全部で約100個のテーブルを10個ずつ
レコード削除は、Truncate Table
レコード追加は、BCPユーティリティでテキストファイルから追加
処理しています。
トランザクションの開始と終了が明記されておらず、
1トランザクションがどこからどこまでか見えません。
・対象のデータ容量は約9GBです。
これで何か分かるでしょうか?
自分でも調べていますが、なかなか原因が掴めません。
よろしくお願いします。
>>776 シンプルならログエリアはほっといても再利用されますし、
truncate tableはDDL操作だから変更前データは記録されないし、
bcpも最小ログ動作で動いてそうだから、問題はなさそうに思えるな。
ログファイルのプロパティはどうなってます?
ログファイルの自動拡張の有無、MBまたは%単位。最大サイズあたりです。
このあたりにはバグがあって%から一度MB単位に変更して、再び%に戻すとなぜか
とんでもない数字のMB単位になって%に戻らないといった現象が見られます。
>>777 訂正)ここで書いてるバグはtempdbの話だったかもしれない。通常DBは問題ないはず。
実際にそれだけのログが書き出されて拡張しているのか単にnextが大きすぎるかは見極めたほうがいいので
一応調べてみてください。
データベースA と データベースB があって データベースAの商品テーブルとデータベースBの商品区分テーブルをJOINするとして。 例えば SELECT A.商品名, B.商品区分名 FROM 商品テーブル AS A LEFT JOIN データベースB.dbo.商品区分テーブル AS B ON A.商品区分 = B.商品区分 みたいなSQLを発行するとJOINできたんだが なんでJOINできたのか私には良くわからなかったんだ これは、DBの設定でアクセス制限かけてなかったり、2つのDBが同じサーバーにあるから有効なのかな? あと、こういうJOINの仕方には何か名前があるのだろうか? Googleで調べるのに、良いキーワードがわからなくて…
>>777 >>778 アドバイスありがとうございます。
ログファイルは自動拡張有り、10%単位、最大サイズ指定無し
で、仕様上設定変更できないんです。
とりあえず、更新処理でのログの書き出し方をもっと詳しく解析する必要がありそうですね。
テスト環境は一応(別の場所に)あるので、いろいろ試しながら調べてみます。
時間掛かりそうだなぁ…ま、仕事なのでしょうがないです。
いろいろありがとうございました。
初心者スレ?が見あたらないのでここで質問させてください。 Windows 2000 Server, SQL Server 2005でWebアプリ開発を命じられました。 社内で使用するSNSの構築なのですが、データベースはほとんど触ったことがなく 日々勉強しながらの開発を行っております。 ブログやコミュニティにてユーザが自由にコメントを記述できるようにしたり、 ユーザ間でメッセージのやりとりを行うようにしたりしているのですが、 いらなくなったメッセージやコメント(ユーザが削除すると決めたもの)は DELETEしてしまっても良いのでしょうか? 一般的にDBでは削除は行わず、フラグをたてて「消したこと」にする、と本に書いて あったのですが、その場合ディスクサイズが膨れる一方だと思うのですが。 変な質問ですが、宜しくお願いします。
>781 データを実際に削除するしないはシステムのコンセプトで決めるものなので、 消して良いとか悪いとか即答は出来ない。 フラグを立てる事で削除の代わりとして、実際の削除を行わないケースは、 後から履歴を追いかけられる様にする時に使う。 これだって実際に削除する代わりに、削除前のデータと操作の日時などを ログに残せばよい訳なのでね、絶対にこうでなければならないと言う訳では ないのです。 単純に考えるなら、削除するデータはDELETEして良いが、トラブルが起きた時に 削除したデータを確認する事の出来る手段を用意するかしないか、そこで 判断できるのではないかな。
783 :
NAME IS NULL :2007/01/17(水) 01:55:22 ID:7eR0lpLP
>>781 Windows(Macもか?)でファイルを削除したらゴミ箱に入るのはなんでか考えてみ。
SQL ServerだからとかWEBアプリだからとか難しく考えんでいいと思われ。
やってるこたぁ実世界と一緒じゃよw
>>782 なるほど。 丁寧な回答ありがとうございます。
後で履歴を追いかけるために残すのですね。
最初はフラグをたてて、ある期間後にDELETEすることにします。
SQL Server絡みのイベントログについて、こちらで聞いても大丈夫ですか?
>>785 MySQLの質問でなければいいと思うよ。
>>786 PostgreSQLで、イベントログを参照するにはどうしたらいいですか?
789 :
NAME IS NULL :2007/01/18(木) 15:34:56 ID:+JE8Wk3H
SQLServer2000のストアドかトリガーから COMは呼び出せますか? サンプルソースなどご提示いただけるとうれしいのですが
790 :
NAME IS NULL :2007/01/19(金) 01:56:57 ID:6RRbIvbO
791 :
NAME IS NULL :2007/01/19(金) 20:04:31 ID:1o6mCdkW
winXP環境で、 $db_connect = mssql_connect ("localhost","sa","パスワード"); というphpファイルで同一PC上にあるSQLserverにアクセスしたところ、成功しました。 実際には、別のWindows2003サーバにアクセスしたいのですが、 localhostの部分をIPアドレスに変えるだけではダメなのでしょうか? ローカル環境 Apache2.0 PHP5.1 SQLserver2000 接続先サーバ Windows2003 SQLserver2000 よろしくお願いいたします。
接続先がファイアウォールでポート閉じてる可能性大。
793 :
791 :2007/01/19(金) 21:25:03 ID:???
>>792 ありがとうございます。
サーバー関係とか難しいですね。。。
チャレンジしてみます。
SQL Server Expressをローカルのマシンに入れて、Accessのadpでシステムを 組んだ場合、データベースの知識がそんなに無い方達(運用する現場の方達)が、 日々の業務のデータのバックアップを取るようにするにはどうしたらよいのでしょうか。 ボタン一つでメモリスティックやMOなどにmdf,ldfファイルをコピーできればよいのですが。
795 :
NAME IS NULL :2007/01/20(土) 10:21:29 ID:GIKn2zRa
↑sage忘れた
>>794 ADO経由でBackup Database文実行すればいい。
保存先フォルダとかファイル名などのパラメタは
GUI経由でACCESS側で作ってやればいいだろ。
で、↑の処理をボタンのイベントに仕込めばOK。
>>797 レスありがとうございます。
> 保存先フォルダとかファイル名などのパラメタは
> GUI経由でACCESS側で作ってやればいいだろ。
> で、↑の処理をボタンのイベントに仕込めばOK。
ここの部分は具体的にどうやればいいのかすぐに分かりましたが、
> ADO経由でBackup Database文実行すればいい。
ここの部分は良く分かりませんでした。
Backup Databaseは、osqlで動かす場合のコマンドは分かりますが、
adpとかで動かす場合が分からなくて、ぐぐってみたのですが、
コードのサンプルもみあたりませんでした。
もう少しヒント、お願いいたします。
>>790 ありがとうございました。
使うときがきましたら、その本を買ってみたいと思います。
>>798 > > ADO経由でBackup Database文実行すればいい。
> ここの部分は良く分かりませんでした。
> Backup Databaseは、osqlで動かす場合のコマンドは分かりますが、
> adpとかで動かす場合が分からなくて、ぐぐってみたのですが、
> コードのサンプルもみあたりませんでした。
> もう少しヒント、お願いいたします。
T-SQL を実行する方法がわからない、と言ってる?
SELECT を実行するときと同じなのだが。
801 :
800 :2007/01/22(月) 09:15:17 ID:???
802 :
800 :2007/01/22(月) 09:18:06 ID:???
間違いってのは言いすぎだった。 とりあえず細かいことは気にせず Execute メソッドでやればできるってことでがんばってくれ。
804 :
791 :2007/01/23(火) 20:45:56 ID:???
>>795 ありがとうございます。
pingは通っています。
追加で質問させてください。
サーバ名での接続と、IPアドレスでの接続はどう違うのでしょうか。
MySQL等のように、どちらでも良く、
IPアドレスが変わった際にもサーバ名であれば対応できる。
と言う程度の認識でいいのでしょうか?
よろしくお願いいたします。
>>804 どちらでも基本的にはかわらない。
というか何でそんな質問してるのかがわからない。
ちなみに localhost は 127.0.0.1 に解決されている。
期待通りに動かなかった時はどんなエラーが返された?
>804 Windows認証が入るとサーバ名とIPアドレスで挙動が変わったり。
2000なんですが、DTSのローカルパッケージに所有者がありますよね。 俺のローカル サーバー上で作ると所有者が「社内のドメイン\俺」に なりました。これを.dtsファイルに保存して、他のサーバーにロード、 保存すると、所有者が俺のままになっています。 ひょっとして社内のドメインが見えないと使えないのか?と思って 実験しました。 VitualPCのAdministratorで作ったパッケージ(所有者はVitualPC名\Administrator) を上記の方法で自分のサーバーに持ってきて、VitualPCは閉じたのですが、 持ってきたパッケージは普通に実行できます。 ちなみに、saのパスワード無しで操作しています。 パッケージをユーザー環境に持って行きたかったのですが、所有者は どのように扱えばよいのでしょうか?
808 :
791 :2007/01/24(水) 15:19:33 ID:???
>>804 >>805 ありがとうございます。
ローカルのXPがドメインに参加していたため、
IPアドレスでの接続ができなかったようです。
現在、自分のローカル環境では、
$db_connect = mssql_connect ("ホスト名","sa","パスワード");
の、
ホスト名部分が
192.168.0.20(ローカルWinXPマシンのIPアドレス)
自分のコンピュータ名
127.0.0.1
で接続が出来ています。
しかし、他のマシンからphpにて接続しようとすると、
Warning: mssql_connect(): message: ユーザー 'sa' のログインに失敗しました。
理由 : SQL Server の信頼関係接続に関連付けられていません。 (severity 14)
in c:\program files\apache group\apache\htdocs\com.php
とエラーが出てしまいます。
そのマシンからは、Accessなどでの接続は可能です。
解決策が見当たらないのですが、どなたかご存じないでしょうか。
809 :
NAME IS NULL :2007/01/24(水) 18:49:47 ID:XZ2h3Vml
上司に次の原因を調べてくれと頼まれたことなんですが、 「SQLServer2000で主キーはってるのに、キーが重複したレコードができることがある」 ってそんなわけのわからんことあるんですか? また再現するのが難しく、ただ一度そうなったサーバは癖づいてよくなるとのことです。 ググってみたけど、全くわかりませんですた。
>>809 はははこやつめ、俺も初耳。
主キーのつもりがただの非ユニーク索引だとか、他の表とJoinしてるから当たり前だとか、
DBよりアプリを疑ったほうがいいと思う。とにかくその上司の勘違い。
あえてあげれば索引を一時的に無効にする運用をしてて戻すのを忘れるくらいかのう。
811 :
Six Perfections :2007/01/24(水) 21:12:42 ID:5G35Yl/d BE:798811294-2BP(0)
>808 だから、Windows認証になってるんじゃないの? >809 表結合して結合の相手が複数レコード出てくるようなクエリを実行してるんだと思う。結合条件が抜けているとか。 さすがに主キーで重複した状態は作れないだろ。
>>808 なんか曖昧だなあ。
WinXP 上で動作している Access のアプリケーションから Win2k3 の SQL2k には sa でログインできるけど、
WinXP 上で動作している Apache の php Web アプリケーションから Win2k3 の SQL2k に sa でログインしようとすると
エラーになるってこと?
だったらその php スクリプトをコマンド プロンプトからスクリプト ランタイムを使って実行してみたらどうなる?
多分動くと思うんだけど、そうしたら Apache が動作している実行ユーザーをドメイン ユーザーにするか
Win2k3 の SQL2k に対して Apache が動作している実行ユーザーのログオンを許可すればいいんじゃね?
もしくは SQL2k の認証モードが混合モードになってないとか。デフォルトは確か Windows 認証だよね。
php はよく知らないけど、mssql_connect って先に Windows 認証でログオン試行をしたりとかするのかな。
814 :
809 :2007/01/25(木) 07:18:07 ID:duvWp6HK
ですよね。。 もしその状態が再現できたらまた報告します。
815 :
NAME IS NULL :2007/01/25(木) 09:25:48 ID:duvWp6HK
少し情報の追加です。 @アプリでSelectをしたら「テーブルがこわれています」と出力された。(ADO) AIndexを再構築しようとしたら、「キーが重複しています」となり再構築できなかった。 Bテーブルを調べてみたら主キーが重複していた。 C主キーを一旦外し、重複行を削除後に主キーをはりなおした。 とのことです。緊急であったためハードコピーなどはのこっていないそうです。
>>815 主キーの索引が無効になってるか、人為的に無効にした。
無効にした場合クラスタインデックスの場合テーブルが
ロックアウトするのでノンクラスタインデックスを使ってるものと考えられる。
ADOのエラーはSQLServerからの直接のものではなくADOが出している2次的なものでは。
ハード障害などの影響で無効になる可能性もゼロではないが低いうえログに残る。
索引再構築が容量不足などで失敗した場合。
bcpによる一括ロードで索引を一時的に外す運用をしていて、
ロード後データのダブりなどで索引の再作成に失敗した場合。
817 :
NAME IS NULL :2007/01/25(木) 20:13:27 ID:zpmvLODW
すみませんが、相談させてください... さきほどMicrosoft SQL Server 2005 Express Edition with Advanced Servicesをインストールしたのですが、 Management Studio Express の日本語化が中途半端です。(英語の箇所も多いです) XpSP2 / Pen4 3G / Memory 1G です。 ちなみにデフォではないドライブにインストールしました。 これは仕様なのでしょうか...?
818 :
NAME IS NULL :2007/01/26(金) 00:49:04 ID:plGi8grs
>>818 それSQLServer7の話だが、やっぱりblukcopy周りの障害のようだ。
バグにしろ人為的なミスにしろ何か起きるとしたらbulkinsertの時が一番怪しい。
>>817 Developer Edition を使っているけど、
・英語になっている場所
・どんな英語になっているか
・ダウンロードした URL
を教えてくれれば、俺のがどうなっているかは答えるよ。
822 :
817 :2007/01/26(金) 23:30:23 ID:3Gq5PlQH
>>822 C以外に入れると引っかかるのか。
うちの会社も開発環境では必ずパーティションを分けてDに入れるようになってるから踏みそうだ。
824 :
822 :2007/01/28(日) 12:03:14 ID:CIyPdD9c
>>823 マシン環境が悪かったかのもしれないし、断定はできませんが・・・。
僕の会社でもC以外に入れることが多いのでガッカリしました。
今回は幸い、自宅PCだったので助かりました。
Enterprise Edition の入ったサーバが何台かあったと思います。
C以外のドライブに入ってるか見てみますよ。
ログも読まずにいきなりおしえてくんなんだけど SQL Server 2005 でDDL 文もロールバックできるんだけど これって大丈夫なの?
>>825 ホントだ知らなかった。2000はどうなんだろう。
827 :
825 :2007/01/28(日) 21:32:12 ID:sj+FZ9mk
2005からだと思う ところでOracleと同じようにスキーマーの機能が追加されたの 知ってる? デフォはdboネ
>>827 SQL Server 2000でもDDLのロールバックができる。
スキーマはSQL Server 2000から使えたがユーザー名(ログイン名とは別)=スキーマ名で固定だった。
それで何にでも dbo.のプレフィクスをつける習慣があった。
クエリ用にエスケープするphp用の関数ってないんでしょうか? sqlite_escape_string とか、 mysql_real_escape_string のように。 エスケープの仕方がわからず困っています。。。
>>829 なぜパラメータクエリを使用しないの?
エスケープよりぜんぜん確実だし。
PHPはDBごとにモジュールも関数の体系も違ううえ、 MSSQL用のは古いDBLibをベースにしてるからADOから使う場合ともちょっと違ったりするんだよね。 シングルクオーテーションを2回ダブるようにすればいけたと思うから自作したら?
SQL Server 2005 SP2 っていつごろ出そうなの?
dllのロールバック関連で便乗。 ログをログテーブルに出したいけど oracleみたいな自律型トランザクションとか無いですよね。 select into はddl扱いでロールバックされないだろうとか思ったら見事にロールバックされるし。 ・主処理のロールバックによってログがロールバックされない ・ログのコミットが主処理に影響を与えない てのがやりたいんですが、なにかうまい方法はありますか?
>>833 君は根本的な発想が間違っている
先ずSQL Server はOracleではないって事
ところでオルガン占いのオラクル後藤さんって知ってる?(もう亡くなっているけど)
簡単なのはセッションをもう一個張る。
>>834 オルガン占いじゃなくて
アコーディオン占いじゃネ?
837 :
791 :2007/01/30(火) 17:52:24 ID:???
回答くださった方、ありがとうございます。 どうにも状況が改善しません。 環境を少し変えてみたので、改めて質問させてください。 ■Webサーバ 192.168.0.40 OS:WinXP home Apache2.0 PHP5.0 ■DBサーバ 192.168.0.100 サーバ名:DB01 OS:WinXP Professional DB:SQLserver Personal 混合認証モード Apache2.0 PHP5.0 上記の環境で、DBサーバに接続を試みています。 DBサーバ内に立てたApacheからは、接続が可能です。 php内の記述が、 $db_connect = mssql_connect ("192.168.0.100\DB01","sa","db_password"); の場合、 Warning: mssql_connect(): Unable to connect to server: 192.168.0.100\DB01 in c:\program files\apache group\apache\htdocs\index.php on line 7 データベースサーバに接続できません とのエラーが出てしまいます。 php内の記述を、 $db_connect = mssql_connect ("192.168.0.100","sa","db_password"); とすると、 Warning: mssql_connect(): message: ユーザー 'sa' のログインに失敗しました。理由 : SQL Server の信頼関係接続に関連付けられていません。 (severity 14) in c:\program files\apache group\apache\htdocs\index.php on line 7 Warning: mssql_connect(): Unable to connect to server: 192.168.0.100 in c:\program files\apache group\apache\htdocs\index.php on line 7 データベースサーバに接続できません とのエラーになってしまいます。 ファイアウォールの設定などは問題ないと思います。 1433ポートは空ける設定にしています。 よろしくお願いします。
Personal ってリモートから接続できんの?
php.ini の mssql.secure_connection の値は? PHP 知らんけど、これ、 統合認証を使うかどうかだよね?
840 :
791 :2007/01/30(火) 18:34:24 ID:???
841 :
791 :2007/01/30(火) 18:40:20 ID:???
>>839 ありがとうございます。
確認したら、OFFでした。
842 :
791 :2007/01/30(火) 18:58:07 ID:???
>>838 そういうことだったみたいです。
お騒がせしました・・・。
ありがとうございました。
>>838 MSDEだってリモートから接続できるんだから、できるんじゃないの?
ライセンス上、接続していいのかどうかは知らんけどw
>>837 「信頼関係接続に関連付けられていません」と言われるってことは、
Webサーバ側からは統合認証でつなごうとしてるんじゃないの?
とりあえず DBサーバにある osql.exe を Webサーバ側にコピーして、
osql -S192.168.0.100 -Usa -Pdb_password
で 1> と表示されることを確認すべし。抜けるには quit。
Personalにリモートから接続した事あるから、出来るはずだよ。 OSはWindows Server 2003 Standard Editionだったけど。 SQL Serverに関しては、ライセンス的にも問題無いんじゃないかな? ただ、OSがXPだとDBやWebサーバーとしての使用は OSのライセンス違反だったような気がする。
845 :
844 :2007/01/31(水) 23:57:12 ID:???
あ、ごめん。 791さん接続出来たって書いてあるね。 ちゃんと読めてなかった。
>>836 いや、確か、座って両手で弾いていたような記憶がある
だけど、アコーディオンも使っていたかも知れないです
ところで、エクセルのテーブル定義書からDLLを吐くマクロ作ったけれど
使うのがいまいちめんどくさいのです
ぶぅいぶぃーどっとねっとで作ろうとしたら簡単ですか?
なんか、DataGridView にComboBoxつくって、息切れしているんですけど
テーブルは100本以上あります(多分)
>>846 そのDLLについてkwsk
・・・DDLだよな?
なんとExcelがRADツールに!
849 :
NAME IS NULL :2007/02/03(土) 08:45:31 ID:I6+2iOwz
sqlserverでテーブル定義を見たい oracleのdescに相当するコマンドってなに?
>849 sp_help
851 :
NAME IS NULL :2007/02/04(日) 07:10:25 ID:JZQOpCFH
しょぼい質問で申し訳ないんですが・・ やりたいこと:ADO接続で、 いくつかのテーブルをロックする →すでにどれかがロック済みならエラー返す oracleのfor update nowait に相当するSQLはSQLサーバーにはないんでしょうか? ストアドではやりたくないし・・・
>>851 SET LOCK_TIMEOUTで適当な時間のタイムアウトを設定する。
2005以降ならOPTION(NOWAIT)が使えるが、SET LOCK_TIMEOUT 0 と同じ意味なので注意。
すばやくロックをかけてすぐに開放するのが共有ロック式のセオリーだから、
SET LOCK_TIMEOUTで100ミリ秒以上は待ったほうがいい。
OracleにしろSQLServerにしろ通常のデータ操作でNOWAITが必要になるのは
なにか設計や考え方がおかしいと思われるので見直したほうがいいだろう。
>>848 なんかエクセルのマクロでマージャンゲームまであるよ
エディターのマクロでテトリス作っちゃう人もいたし
ところでsp_helpの出力をうまくエクセルに取り込む方法知りませんか?
しょうがないからテキストベース固定長として取り込むマクロ作ったけど
もっといい方法あるはずなんだよね
すいません どなたか教えていただけませんか 現在、SQLサーバの更改があり、旧サーバから新サーバにデータをコピーする必要があります。 付属のデータコピーウィザードを使用しコピーを試みたのですが、 以下のエラーがおこりコピーが出来ません ステップ エラー コード: 80004005 ステップ エラー ヘルプファイル:sqldts80.hlp ステップ エラー ヘルプ コンテキスト ID: 1100 下記のサイトによると コピー先の SQL Server がドメイン アカウントで起動されており、 そのアカウントがコピー元のコンピュータのローカル管理者特権を持っていない場合は、ウィザードで 次のエラー メッセージが表示されることがあります。 とあるのですが、ドメインアカウントとはインストールの時にドメインを指定した時のユーザでよろしいのでしょうか? またローカル管理者権限とはコピー元のアドミニストレータ権限でよろしいのでしょうか? またコピーウィザード中にコピー元のローカル管理者を指定する項目がないように思えるのですが、 どこで指定をすればよろしいのでしょうか
856 :
855 :2007/02/06(火) 00:49:09 ID:???
すみません
環境を書くのを忘れてました。
移行元サーバ
OS:Windows2000Server
ソフト:SQLServer2000
移行先サーバ
OS:Windows2003ServerR2
ソフト:SQLServer2000
ハード更改のためソフト環境は同じです。
なお、参考にしているのは下記サイトです。
よろしくお願いします。
参考サイト
http://support.microsoft.com/kb/274463/ja
参考先サイトを見ずにレス > とあるのですが、ドメインアカウントとはインストールの時にドメインを指定した時の > ユーザでよろしいのでしょうか? インストール時に指定したサービス起動アカウント。 サービスの設定で変更できる。 > またローカル管理者権限とはコピー元のアドミニストレータ権限でよろしいのでしょうか? そう。ドメインユーザーアカウントを Administrators グループに入れればいいと 思われ。
>>855 ACについては詳しくないけど
新しいサーバーのアカウントを
古いサーバーのドメインに登録してあげればよいのでは?
エラーの内容は
新しいサーバーが古いサーバーからデータを取ってこようとしたら
古いサーバーに入れずに怒られたという事だと思うんだけど...
859 :
855 :2007/02/07(水) 00:38:06 ID:RBDOyVWh
たびたびすいません 現在、移行先(新サーバ)のインストール時に指定したアカウント、移行先のAdministratorのアカウント、移行元のAdministratorのアカウント はすべて同じ物を使用しております。 >>そう。ドメインユーザーアカウントを Administrators グループに入れればいいと >>思われ。 上記がよく分からないのですが、移行先と同じアカウント、同じパスワードをもつアカウントを移行元サーバに作成するのでしょうか ネットワークパスのような物で移行先のアカウントを指定するのでしょうか? 例えば "コンピュータ名¥アカウント名"のような指定の仕方をローカルサーバに指定するのでしょうか よく分かって無くてすいません よろしくお願いします。
>>859 > 現在、移行先(新サーバ)のインストール時に指定したアカウント
具体的には? まずそれを書こうね。あと、コピー元のサービス実行アカウントも。
> ネットワークパスのような物で移行先のアカウントを指定するのでしょうか?
> 例えば "コンピュータ名¥アカウント名"のような指定の仕方を
違う。ドメイン\アカウント名 というドメインユーザーアカウントを利用しているのなら、
コピー元にそのユーザーが必要、ってこと。
861 :
855 :2007/02/07(水) 01:35:13 ID:???
うまく伝えられてないようで 例えば、SQLサーバをインストールしたときに指定したドメインアカウントをtestとすると 移行先のサーバにもtestと言うAdministratorのアカウントも作っておりますし、 移行元のサーバにもtestというAdministratorのアカウントも作成しております。 上記のようにそれぞれのサーバで同じアカウントを指定するだけでよろしいのでしょうか コピー元のサービスアカウントはおそらくローカルシステムでインストールされているのではないかと思われます。
862 :
NAME IS NULL :2007/02/07(水) 01:37:04 ID:RBDOyVWh
>>コピー元のサービスアカウントはおそらくローカルシステムでインストールされているのではないかと思われます。 上記に関しては前任者と連絡が取れず確認できておりません、資料も見つからないのです。
>>861 ドメインについてもう一度勉強しなおしてからこい。
ドメインアカウントってのは、ドメインに所属するアカウント。
例として domain ドメインの test アカウントだったとすると、
domain\test として表わされる。
移行先(PC名 src)、移行元(PC 名 dest)で test ってアカウントを作ったとしても、
それとドメインアカウント(domain\test)は何の関係もない。
src\test、dest\test というユーザーだから。
domain\test が Domain Admin(または、それと同等の権限を持つユーザー)でない限り、
移行元 PC の Administrators グループに所属していないとだめ、ってことだろ。
雑談ネタで済まないのですが、MSSQL2005でXPath、XQuery使って 多変量データを扱うシステムを構築している方おられますか? Oracle使うとか、自分で中間処理部分書くとかありますが・・。 目的は大量の不定形のログデータ(数値、文字列)蓄積で、質問の主旨は パフォーマンスとデータ内の整合性(ロック含)の面について、コメント頂けるとありがたいです。
XML使うのにパフォーマンスを追求するの?
日本語が変だったw パフォーマンスを追求するのにXML使うの?
868 :
864 :2007/02/07(水) 13:00:09 ID:???
>>866 、
>>867 レスどうも。
パフォーマンス追及が目的ではないけど、現実はどの程度のものか上限を知っておきたいなと。
半構造の利便性とパフォーマンスは計算量的にどう見てもトレードオフ関係なのは承知の上です。
ttp://mag.autumn.org/Content.modf?id=20050927174016 とかも見てみました。
際限なく開発費があるならTX1とか使ってみたいですが、自分でミドルウェア書くほうが無難かな。
目に見えるコスト算定が可能であればパフォーマンス上限が分かるしチューニングしやすいし、
それとDB任せにしないで実データ要素のDB上の配置とかXMLの物理構造レベルでの
チューニングすればいいのかな。
自分が対象とするデータは常にスキーマが不定形というわけでもなく、ある程度決まっているけど、
たまに変わる程度なので。
大量に蓄積したいし検索もしたいというのはエゴですな (要求仕様ですが・・)
可能な限りM$SQLで粘って他のベンダに乗り換える方向でがむばってみます。。
ちょっとお聞きしたいのですが、 INNER JOINを使った場合と普通に結合した場合性能的にはどちらが良いのでしょうか? SELECT uriage FROM uriage_tbl INNER JOIN customer ON uriage_tbl.user_id=customer.user_id か、 SELECT uriage FROM uriage_tbl , customer WHERE uriage_tbl.user_id=customer.user_id ちなみに、INNER JOINのON以下を記述し忘れると外積になってしまうのでしょうか?
870 :
NAME IS NULL :2007/02/08(木) 00:42:39 ID:QnfZrBzz
>864 つまり、それぞれのサーバに同じ名前のアカウントを作ってもコンピュータ側からしたら異なるサーバの 全く別のアカウントのため、権限の問題が発生するということですね データコピーウィザードはADのあるドメイン環境でないと使えないのでしょうか
この例だと同じ実行プランになるはずなので変わらない。 結合が複雑になるとJOINをつかった方が結合条件がわかりやすく良いプランが出来る可能性が高い。 2005だとON句なしのINNER JOINは不可、CROSS JOINと書く必要がある。
>>871 分かりました。ありがとうございます。
JOINを書いたほうが良いということですね。
>>870 ローカルユーザーアカウント同士なら、AD とかドメインとか関係ない。
だけど、前提が
>> コピー先の SQL Server がドメイン アカウントで起動されており、
だろ?
SQL Server 2005で、 データベースAにあるfooというテーブルのデータを データベースBにあるbarというテーブルに随時コピーさせることは可能ですか? データベースAおよびBにあるほかのテーブルに影響を及ぼさず、テーブルfooとbarのみ データを一致させたいのですが。
>>874 可能。
update で dbA.dbo.foo からデータを取ってくればいい。随時、ってことなら、トリガにでも
するのがいいんじゃね?
今のプロジェクトで、エクセル(VBA)とサーバモジュール(C++)から 同じデータとってくるSQL文発行しているんだけど、 これってやっぱりストアドプロシージャにして1個に纏めたほうが良いんですよね?
>>876 残念ながらVBAからストアド呼べないよ
呼べます。で、
>>876 への回答だけど、どっちでもいい。
ストアドにすることで、メンテナンスの手離れがいいというメリットを取るかどうか、
ってことでしょ。
単なる SQL なら、ストアドにするメリットってあんまりないし。
>>877-879 ありがとうございました。
結構長いSQL文で、機能追加のたびに変更されるので
毎回2箇所書き換えるのは大変だなーと思っているところでした。
ただ、SP知ってるメンバーが少ないのでちょっと検討しようと思います。
COMでもいいかな・・・
SQLをスクリプトファイルなりベタテキストなりにしておけば?
<<88jあまえはすぐにうちらのことをおいこすよ「 がんばれ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
883 :
NAME IS NULL :2007/02/11(日) 08:56:50 ID:RpZ/vITy
これからSQL Serverを覚えようと思うんだけど、 うちのPCはWinXP home。 まずパソコン買わないとダメ? 今、買い替えるならVist搭載の、どのバージョン以上買えば良いのでしょう。 自宅のそのパソコンで学習しながらデータベース作って、 コピーして会社のパソコンに持っていく事ができますか? 会社のパソコン数台のうち1台、XPproがあれば使えるでしょうか。
せっかくレスがついているのに理解できないようであれば、 それは向いていないという事なので 違う道を考えたほうが良いと思います
>>885 いやっ、違う!
知識が無いのと、知恵が無いのを混同しては駄目です
知識が無い者には知識を与えてあげればよいだけです
知識は与えることが出来ますが、
知恵は与える事ができません
知恵は知識で補うことは出来ません
知恵の無い者に限って
自分の知識を出し惜しみしたりします
正直ムカつきます
>>883 SQL Server はMicrosoft 社の製品なので
そこのホームページを探してみてはどうでしょうか
きっと、それほど出費なしに、勉強が始められますよ!
MSDE とかいいよね。古いPCにぶち込んでデータベース遊びできる。 俺も 500MHz ぐらいの CPUのに Windows 2000 SP4 + MSDE 2000 SP4 で遊んでる。 2005 Express になると .NET必要だったりで重くて萎えるけども、 XP Home が快適に動くPCなら、お遊びには十分だろう。
SQLServerとOracleの違いって何? 時々お客様に聞かれますがうまく答えられません
>>889 ベンダが違うだろ。
あと価格とライセンス体系。
MSのソフトウェアだけでシステム構築するなら
SQL Serverの方が良いけど、
他のOSやPerl/PHPとかのスクリプト言語とか
Javaとの連携しやすさみたいなところまで考えなきゃならんなら、
Oracleの方が楽。
>>889 Oracle:メジャーリーグ
SQLServer:プロ野球
>>891 マルチバイト対応なんて深く考えていないところは
「Oracle = メジャーリーグ」
と言っても良いかもしれんなwww
OracleにできてSQLServerにできないことってなんですか? すべてMS関連でシステム作るとして。。
そんなことも調べられないんだったら、SQLServerにしとけ。
教えてください。データベース コピーウィザードでコピーすると バックアップJOBとかもコピーされるのでしょうか? データベース オブジェクト<INDEX情報以外に何が含まれるんでしょうか?
>>893 PL/SQLの変数や関数引数の宣言に ProductID in MasterProduct.ProductID%type のような記述ができないこと。
server2003x64にSQLserver2005評価版を入れていたのですが、 評価版の期限が切れるので、Express Editionを入れようと思います。 データベースその他はそのまま使えるものでしょうか。 難しいことはさせていないので、expresseditionで十分なようなのですが。 (データベース自体は以前7.0から移行してきました)
>>893 select for update
言い訳は色々聞くが、ね。
901 :
NAME IS NULL :2007/02/13(火) 04:24:24 ID:9r46V504
すいません お尋ねしますが 会社のPC(XP)にSQL SERVER2005を インストールしたいのですが ネットワークの検索に引っかからないようにする事はできますか? 誰にも見つからずひっそりとDBの勉強がしたいのです しかしLANケーブルを抜いてしまうと困るし なにかいい知恵があれば教えてください
>>901 セキュリティの構成ツールを使って設定しない限り外から見えたり接続は出来ないはず。
開発版やExpressはそうなってる。
>>901 つ「Personal Firewall」
904 :
NAME IS NULL :2007/02/13(火) 15:20:44 ID:9r46V504
>>902 なるほど やはりそうですか
どうもありがとうございます
905 :
901 :2007/02/13(火) 16:41:16 ID:9r46V504
リモート接続の許可をOFFにしたら ほかのPCから見つからなくなりました ドメインではなくローカルでインストールいたしました 無事解決です ありがとうございました
CSVファイルにMicrosoft Text Driverでアクセスしています。 SELECT HOGE_ID FROM HOGE_TABLE WHERE HOGE_NAME LIKE '%HOGE%' として検索しているのですが、大文字小文字の区別とかを なくした検索をしたいのですがなにか良い方法がありますでしょうか? ご教示よろしくお願いします。
909 :
906 :2007/02/14(水) 09:26:47 ID:???
すみません。UCASEという関数がありました。 SELECT HOGE_ID FROM HOGE_TABLE WHERE UCASE(HOGE_NAME) LIKE '%HOGE%'
910 :
NAME IS NULL :2007/02/15(木) 15:14:01 ID:8aFDwjm4
911 :
NAME IS NULL :2007/02/15(木) 15:15:27 ID:8aFDwjm4
コテタン処理スレッド
http://music7.2ch.net/test/read.cgi/nika/1171180941/130 (↓1024byteちょうど)
uddlug.V.Yud.Vdldlabbe.Vgwud.Vdlacudc,dlug.Sgwab.Sis.S.V.Kudc,c,c,gw.Kgwbebeacugud.Kgwac.T.Sdlac.K.V
.Tugudugbedlc,is.Tab.Tabgwbe.Tud.Tbe.S.Kisgwugabbe.Sis.Kdl.Tud.Tudgw.V.Tugacugud.T.Vabug.K.Ygw.K.S.Y
ug.Ygwab.Y.V.Visbeud.Sudabc,.Yc,is.Tac.Sdl.Kis.Vugc,ug.Kug.Tis.Ygw.Yudugbe.K.Tisgw.Sdlugacudug.Ybegw
.Sdlbeugab.Vc,dlgwdl.V.Vdlab.Kgwab.T.K.Sgwc,.Kdl.Tacis.Tgw.Kdl.V.Yc,.Sc,.V.K.Kugacudc,abc,.T.Kacac.Y
.V.Y.Tacugc,.Yisug.Yududbeudc,.Kbeacacugbebeabababudc,.Vc,c,beug.S.Kisdlug.T.V.Tacudabisbe.Tugis.Vab
isc,.Tacudab.Vc,.V.K.S.Vbeacac.T.S.Kisbegwbeab.K.Y.S.Sab.Kudab.S.Yugc,ab.T.Tacac.Vab.Yugbeud.Vdlbe.S
dlgwudug.Sis.Kisabgw.Vab.Yc,.Y.Kc,.Y.V.Yis.Tgwudbedl.T.T.Kugc,abbeacbec,.Y.Sab.Kudab.Yisbeabacabisab
ug.V.T.Tud.Kud.V.Vgwgwgw.Sug.Tugbe.Kabdlabudab.Kudug.Tbe.Vug.Tuddl.Sudis.Kisudc,.Vud.Sdlc,gwbe.Tisc,
c,ab.V.V.Sisdldlud.S.Sc,ugug.S.Kacug.Tc,.Kacc,.Vgw.Visabc,.T.Tug.Tc,.Sgw.V.Vc,ugdl.Tdlacgwabud.Sdl.Y
udisgwdlc,c,.Ydlugugud.Kisugud.Ydludis.Y.S.Kugud.Tac.Vdl.Tudacudug.Tis.Vdlisgwgwbe.V.Vis.Tis.Kugc,dl
ud.Y.Y.Yududbeabdl.Sacab
912 :
NAME IS NULL :2007/02/15(木) 15:17:24 ID:8aFDwjm4
コテタン処理スレッド
http://music7.2ch.net/test/read.cgi/nika/1171180941/5 (↓1024byteちょうど)
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンンン
ンンンンンンンンンンンン
913 :
NAME IS NULL :2007/02/16(金) 14:07:28 ID:oNR5BaBg
コテタン処理スレッド
http://music7.2ch.net/test/read.cgi/nika/1171180941/161 (↓1024byteちょうど)
As.K.Y.Yc,beisbedl.Visbeug.Y.Tugc,isc,dlgwisis.Y.Vgwudgwdlududab.Tbe.T.Y.Tac.Yc,dlis.Y.Vc,beud.Yacdl
c,.Kc,dlbebe.V.Vabdlbegwgw.T.T.Sabud.Sisbe.Y.K.S.Tbe.Kgwgw.Yac.Kabugabugacdl.Vabc,dl.K.Y.Tbe.Tisabug
abudab.Kacug.K.Sugudacab.S.V.Tud.Tudisabababugdlacabdldl.Tab.Sbe.Kabac.Sgw.Y.Ybegw.K.K.Yac.V.Ygwacc,
.Yacuddl.Tacc,.Yisug.Kgwdlacugdlbe.Yudbeabacisudacabgwisug.V.S.Kc,.Kurgwdlabdluggwisab.S.Y.Sugac.Kis
udgwbe.Sc,.Tugc,abug.T.S.Ydlacacac.S.V.Visabis.Yac.Sc,ud.Sis.Tug.Sisac.5195017beabgwuddlac.Sdludacug
.Kac.Sabis.Tududisisabdl.Sudugacab.T.Kac.S.Sdl.V.T.Sdlbec,beugc,ac.Tudac.Sis.K.T.Tc,c,.Sacac.Tgwc,.T
.Tgw.Tgwbebe.V.K.Tabis.Vbe.Tdlc,ugbeabc,ab.Sc,acud.Y.K.Tbe.Tabbe.V.V.Visdlis.Tgwgwugabbeisabacabbec,
bec,is.Yacacc,.4008189293167387674549692477721754759147630482871555452004979915517366420175711acugbe
.Ygw.Vgw.Kac.Tacbe.K.Kgw.Ybe.S.Ydl.K.Sdlgwisis.Y.K.K.K.Tac.K.Kdlabugab.Tbe.T.K.Yc,dl.Kisisbeudgw.Sbe
gw.Sbe.Vududgwud.K.Vdl.K.Vis.Y.V.Tgwugac.Sc,ac.Tgw.Vacisis.K.Ybeugdl.Vab.S.Tab.Y.S.Kugacgw.V.V.Kug.T
udc,isug.Tdl.V.Kdlacbea.
914 :
NAME IS NULL :2007/02/16(金) 14:08:32 ID:oNR5BaBg
915 :
NAME IS NULL :2007/02/16(金) 14:17:39 ID:GH/Xe65t
1 :おさかなくわえた名無しさん :2007/02/15(木) 22:37:20 ID:gIZCPGDM
962 名前:おさかなくわえた名無しさん[sage] 投稿日:2007/01/12(金) 06:52:38 ID:0wf1ypQR
最近近くに越してきた一家の夫が、どうやらコンクリ殺人の犯人らしい。
すでに町内はパニック状態で、
署名を集めて出て行かせようとしたり、その一家には何も売らなかったりとかなりの差別っぷり。
私はひょんな事からコンクリの奥さんと話すようになったんだけど、
引っ越しても引っ越してもストーカーのように追いかけ続ける人が何人もいて、移り住んだ地域の人達にソース付きでバラしてしまうらしい。
そしてそれは妻が子供を連れて別居しても続いてしまうので、離婚もできないらしい。
23 :おさかなくわえた名無しさん:2007/01/13(土) 11:33:58 ID:1ooRv/+3
前スレ962だけど、
全部本当だよ。日本も捨てたものじゃないね。
昨日、家にコンクリの奥さんから電話かかってきて、
「私たちの事、掲示板に書いたでしょう!」って言われた。
生活板住人だったみたい。
「どうなるかわかってるでしょうね!」って言われちゃったから、もうすぐコンクリにされちゃうかも。
63 :おさかなくわえた名無しさん:2007/01/13(土) 18:35:59 ID:1ooRv/+3
>>57 石川県。田舎を転々としてるみたい
リストの名字と一致しないから、たぶん婿養子なんだろう。
中学生の娘がいるからたぶん最後の人。仕事はしてないっぽい。
あと
>>53 、引っ越してきて直ぐの時にストーカーにそれやられてた。
ついでに市のサイトのBBSにも書かれてたよ。
5 :おさかなくわえた名無しさん :2007/02/15(木) 22:39:15 ID:gIZCPGDM
この事件を知らない方はここにあります。多分冗談だろ?と思いますが事実です。
これがあの震撼させた事件です
http://tokyo.cool.ne.jp/maromi/pic/jyoshikouseiconcretehannninnpic.htm http://www5e.biglobe.ne.jp/~rolling/concrete.htm http://2ch-library.com/news/concrete/ さらに恐ろしい事に主犯・宮野は2月2日に出所済。近郊の方、要注意!
下のような計算機システムを作っています。 DBサーバ→制御サーバ→各計算機 制御サーバは DBから取得したデータをテキストファイルに落として 各計算機に投げ、それを受けた計算機があくまでも受動的に計算を行うのですが この場合も各計算機にCALはいるのでしょうか? 上の人は、各計算機が制御サーバにリクエストを送るわけじゃないから ライセンスは要らないといっているのですが。
>>916 > この場合も各計算機にCALはいるのでしょうか?
マルチプレキシングに相当するか?
が、問題になる。
ただ、この点をまじめに検討するより、
デバイスは多いけど、ユーザーが少ない状態なら
>ユーザーまたはデバイスの数だけの CAL (クライアント アクセス ライセンス) が必要になります。
のユーザー CAL でカバーすると、プログラムを修正した場合でも問題ないので楽。
データ量によっては、Express Edition で十分な気もするが。
SQL Server 2000 で次のようなSQLを実行(KOKYAKU_MSTとTEN_MSTには該当データ があってKOKYAKU_SUB_MSTには該当データがない)すると、該当データ無しになって しまうとお客さんのとこから連絡がありました。(VBのアプリの中でSQLを実行してます) 社内の環境ではSUB_MSTのとこだけNullになってデータ有りとなります。 お客のところのSQL ServerがSP4(社内はSP3)に変わったそうなのですが、SP4には そういった現象がでることがあるのでしょうか? ご存知の方、情報をよろしくお願いします。 SELECT M.*, S.*, T.TEN_NAME FROM ( KOKYAKU_MST AS M LEFT JOIN KOKYAKU_SUB_MST AS S ON (M.KOKYAKU_CODE = S.KOKYAKU_CODE) AND (M.TORIHIKI_SYUBETU = S.TORIHIKI_SYUBETU) AND (M.TEN_CODE = S.TEN_CODE) ) LEFT JOIN TEN_MST AS T ON M.TEN_CODE = T.TEN_CODE WHERE T.KUBUN='SHITEN' AND M.TEN_CODE = '1111' AND M.TORIHIKI_SYUBETU = '1' AND M.KOKYAKU_CODE = '12345'
>>920 TEN_MSTをOUTER JOINしたいのならWHERE句に条件書くなよ。
>>920 特にそういう現象は起きてないな。まずデータや条件を疑うべきだが、
システムを疑う気ならDBCC CHECKDBでもかけてみたら?
923 :
NAME IS NULL :2007/02/20(火) 11:56:25 ID:u5eSYaHv
2000を使ってテーブル作ってるんだけど、 列名にカタカナ使うと[ ]が自動的に付くのは何故?
>>923 無用なトラブルを未然に防ぐための
要らぬ親切大きなお世話って奴www
Experess用のSP2は別なのかよ・・・・ ID忘れたからDLすんの面倒だよ
>>921-922 すいませんでした。
お客さんがマスタのデータを勝手にいじくってました・・。
927 :
923 :2007/02/21(水) 10:50:11 ID:???
誰かExperess用のSP2うpしてください
>>929 昨日はWindowsLiveのIDないとダメだったのに今日は落とせるのね
ありがとう
>>930 昨日落としたけど別に何も聞かれなかったよ
もう出たのか SQL Server 2005 SP2 ・・・ Windows Server 2003 R2 SP2 も出るし、サーバーリプレースせにゃあ
確かに早いな。
934 :
NAME IS NULL :2007/02/22(木) 09:54:40 ID:2bLf0DAK
SQLServer2000を使用しています。 Col1という列のうち、値が半角小文字の s で始まる行を 抽出したいので、SLQ文で SELECT Col1 FROM hoge WHERE Col1 LIKE 's%' とすると、小文字のみならず大文字の S も含んだ行を返します。 小文字のみを抽出するにはどのように書けば良いのでしょうか?
>>934 SELECT Col1 FROM hoge WHERE Col1 LIKE 's%' COLLATE Japanese_CS_AS_KS_WS
つか、データベース作るときは
要件に応じて適切に照合順序設定するクセつけろ。
>>934 COLLATE Japanese_CI_AS
を
COLLATE Japanese_CS_AS
に変更。
937 :
934 :2007/02/22(木) 10:30:46 ID:???
SQLServer2005で、今DBファイルをおいている場所を別に変更したいんだけど どういう手順になるんですか? 単にエクスプローラでファイルを移動してパス変更 すればいいのでしょうか。あと、デフォルトで作成される場所も変更したいんですが… SQL Server Management Studioを触ってたけどさっぱり…
SQL 2005 SP2のインストールがエラーになるじょ。
941 :
938 :2007/02/23(金) 23:05:24 ID:???
>>939 ありがとうございます、まさしくそれです。
月曜に頑張ってみます。
943 :
NAME IS NULL :2007/03/06(火) 14:01:56 ID:gpz/T0xd
SQLServer2005 で、投げることのできるクエリのバイト数に上限はありますか? アクセスだと255バイトが上限だったような気がするので。
>943 ないんじゃないかな? 4000バイトとか8000バイトくらい投げつけたりしても引っかかる様子はなかったし。
な、なんだってーー!!
それでも、漏れの環境では、SP2インストールでエラーになる...
テーブルを開いたときに、見せたくない(*で表示したい)列があるんだが、 2005に、そんな感じのマスク機能ある?
949 :
NAME IS NULL :2007/03/08(木) 03:21:53 ID:aUi2AJOj
見せたいカラムだけでビュー作れば?
データーベースのバックアップの構文を教えてください。 backup database の続きがわかりません。よろしくり。
人間グーぐるの異名をとるこのスレに来たのに ぐぐれはひどいよー
953 :
NAME IS NULL :2007/03/09(金) 19:55:08 ID:jneX7HlS
Windows VistaではSQLServer 2005 SP2を使ったとしてもWindowsの管理者 アカウントでは管理権限が与えられなくなった。 今までインストーラの中でアタッチしていたのができなくなってしまった。 アタッチするための権限を得るために管理者ロールにアカウントを入れて やらなければならない。つまりDBの自動インストールができない!!!! インストール後手動で権限与えるなんてやってられるかよ!!!! VistaとSQL Server 2005の相性は最悪だと思った。
>>953 Administratorでログオンしても同じ?
955 :
918 :2007/03/11(日) 00:23:55 ID:???
>>919 遅レスですいませんが、まさしくそれでした。
ありがとうございました。
956 :
NAME IS NULL :2007/03/11(日) 07:04:02 ID:f9rdgs/+
超初心者です。教えてください。・゚・(ノД`)・゚・ SQLServer2005を入れたのですが、最初のログインでもうつまづいてます。 エラーメッセージはこんな感じです。Windows認証でlocalhostサーバーで入ろうとしたら、エラーが出ました。 OSはXPです。OSにはAdministratorでパスワードなしでログインしてます。 localhost に接続できません。 サーバーへの接続を確立しているときにエラーが発生しました。 SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、 SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした) (Microsoft SQL Server、エラー: 2)
>>956 サーバー名は .\sqlexpress
958 :
NAME IS NULL :2007/03/11(日) 07:26:59 ID:f9rdgs/+
>>957 レスありがとうございます。サーバ名を[localhost]から[.\sqlexpress]
に変えれば良いのでしょうか?
959 :
958 :2007/03/11(日) 09:09:42 ID:f9rdgs/+
別のやり方で解決しました。
961 :
958 :2007/03/11(日) 13:31:28 ID:f9rdgs/+
>>960 すいません、そもそもの原因はIISをインストールしないまま、SQL Server2005のインストールを行ってしまい、
途中でエラーが発生した後も、そのままインストール処理を続行していたのがいけなかったようです。
IISを入れた後、再度セットアップした後、SQL Server2005のSP2をインストールし、localhostからでもログインできるようになりました。
(SP2を入れない状態では確認してません。てんぱってました)
962 :
NAME IS NULL :2007/03/11(日) 16:51:44 ID:tg8mXIwA
VS2005、ストアド上のブレークポイントでの止め方教えてください。 以下長いけど詳細。 ローカルのSQLServer2005Developper+VS2005(VSTO)、アプリケーションのデバッグで ストアドプロシージャのブレークポイントを使ってくれません。 (このドキュメントのシンボルが読み込まれていません、と出てます。 サーバエクスプローラからのストアドの実行とステップインは可能です。) ・プロジェクトのプロパティ、SQLServerデバッグ:有効 ・サーバエクスプローラの「アプリケーションのデバッグ」:有効 ・同「SQLまたはCLRのデバッグを許可する」:有効 ・msvsmon.exe:サービスとしてのログオン権限とAdministrators権限、sysadmin権限を持って稼動中。 ・ファイアウォール:切ってある ・私:SQLServerのsysadmin権限あり ・アプリ:私の権限でWindows認証ログオン ・アプリ内容:VB(ADO.Net2.0)からExecuteScalarで「EXECUTE 関数名」だけ。 ・SQL鯖はSP当ててないはず。バージョン9.00.1399.06 よろしくお願いいたします。
IIS 入れないで SQL Server 2005 入れるとマズいのか?
>>963 IIS は Reporting Services に使われる。レポートは Web ページとして表示するから。
データベース エンジンしか使わないのなら IIS は要らない。
Oracleとロックの種類とか違うみたいなんですが SqlServerのロックについて分かりやすいサイトないでしょうか?
>>965 比較なら共有ロック、マルチバージョニングでググればいろいろ出てくる。
SQLServerのロックの詳細はPOLを見た方が早いと思う。
typo POLじゃスクエニだにゃ。 BOL = SQL Server Books Online
968 :
NAME IS NULL :2007/03/13(火) 13:17:04 ID:oFtuibL7
SQL server 2005 Express って当然64ビット版ありますよねー 上司がないとか言ってて仕方ないです
>>968 Express の64bit版はないが使える。64bit WindowsではWOWで動作する。
970 :
NAME IS NULL :2007/03/13(火) 14:44:03 ID:oFtuibL7
>>969 64ビットでも使えるなんて、リアクションとしてワオゥ(WOW)
WOWで動作するってのは、
動作するマシン64ビットだけど、SQLサーバは32ビットで動作するって意味なんですかね
その辺はググっておきます
その上司に同情するよ・・・
亀レススマン。
>>943-944 SQL Server 2005 の最大容量仕様 (BOL)
http://msdn2.microsoft.com/ja-jp/library/ms143432.aspx > SQL ステートメントが含まれた文字列の長さ (バッチ サイズ) = 65,536 ネットワーク パケット サイズ
> ネットワーク パケット サイズとは、アプリケーションとリレーショナル データベース エンジン の間の
> 通信に使用される表形式のデータ ストリーム (TDS) パケットのサイズです。既定のパケット サイズは
> 4 KB であり、network packet size 構成オプションによって制御されます。
973 :
NAME IS NULL :2007/03/14(水) 14:24:03 ID:2/UVaeYi
datetime型に日付のみを入れることは出来ないのでしょうか? バージョンは2000です。
>>973 残念ながらANSI互換のDATEやINTERVALはない。
セットするとき0時0分0秒にそろえて書き込もう。
select convert(datetime,convert(char(8),GetDate(),112),112)
下記のようなSQL文で SELECT * FROM ::fn_xxxxxx の ::って、どんな意味があるのでしょうか?
>972 最初、その制限を受けるかなと思ってたけど別に影響受けてる様子がなかったような記憶が。 後で確認しておく。 text型のフィールドをレプリケーションすると4KBごとの境界の2byte文字が破壊されることを思い出した。