08/05/22 17:30:58
>>119
もうちょっとやり方があると思うぞ?
まず、そのテーブルでのユニークな数字は、IDENTITY属性で指定できる
わざわざ行数+1なんて入れてたら同じ数が入らないとも限らない
順序の項目を参照→URLリンク(www.sqlpassj.org)
金額が高い順に連番をふるんじゃなくて、入札(?)テーブルに
金額とユニークな商品IDを登録して、WHERE 商品ID = @商品ID ORDER BY 金額 DESCすれば
金額順に表示される。
基本的には、どのテーブルにもIDENTITY属性のID列、行が挿入されたときのInsertDateTime列、
行が更新されたときのUpdateDateTime列、行が削除されたことを表すIsDelete列を作っておけば
後にいろいろ対応できる。
とマジレスしてみる。
121:NAME IS NULL
08/05/22 17:42:56
>>120
お遊びなんがからマジレスするな
122:NAME IS NULL
08/05/22 21:32:20
>>120
論理削除は色々と意見はありそう。
InsertとUpdateの更新日付をわける意味は?
123:NAME IS NULL
08/05/22 21:40:15
>>122
論理削除は、マスタ関連なんかで参照される可能性があるけど
表示時間が長くなるから一覧には表示したくないとか、
後からわがままな要望がでてくる可能性を考慮。
Updateは同時実行制御なんかに必要で、
Insertは入力補助のために過去何日間に入力されたものの一覧を出せとか、
ある特定日に入力したものだけ一覧で出せとかを考慮して。
124:NAME IS NULL
08/05/22 23:16:27
ああ 楽観的ロックね。
125:NAME IS NULL
08/05/23 00:10:45
バーボン、ロックで。
126:NAME IS NULL
08/05/23 00:13:18
113
121さんの言うとおり仕事でもないのにすみませんでした
120さんもマジレス感謝です、要らない列は省きます
ここの人達は皆親切ですね
127:NAME IS NULL
08/05/23 17:55:44
考えることで自分の知識を整理・強化してるんだよ
128:NAME IS NULL
08/05/23 23:20:17
ストアドプロシジャの中で変数に値を代入するのに 2つの方法があるよね
1. set を使う
2. fromやwhereのない select を使う
俺はいつも 1. で、2. を使う理由が思いつかないんだけど、2. の利点って何かある?
129:NAME IS NULL
08/05/23 23:40:51
↑代入文の右辺に、演算子や関数のほかは定数と@変数しか出てこない場合です
130:NAME IS NULL
08/05/24 02:12:13
>>128
表が変わっても、正しそうな値を拾ってこれる。
131:NAME IS NULL
08/05/24 03:38:36
SQL CLRを利用すれば、そんな問題からすべて解放されるぉ
132:NAME IS NULL
08/05/24 13:13:30
その代わり違う問題をいっぱい抱えそうだけど。
133:NAME IS NULL
08/05/24 16:23:11
なんか不具合とかある?
SQLでもいいんだけど、.NET使えれば使えたで便利だから
ストアドでSQL CLRを使おうと思ってたんだけどさ
134:NAME IS NULL
08/05/24 17:33:40
いや別にチャレンジングゥ~な君を止める気はさらさらないから。
人柱よろしく。
135:128
08/05/24 18:20:27
>>130 レスサンクス&解説お願いしていいですか?
表が登場しない、set でもできるし select でもできる代入を、
あえて select でやることの利点があれば知りたいです。
136:NAME IS NULL
08/05/24 19:00:26
>>134
こういう保守的な技術者が日本の技術を悪化させてると思う
137:NAME IS NULL
08/05/24 20:01:25
枯れた技術を使うのは基幹システムの基本
新技術をいきがって使うのは社会的に重要でないシステムにしろよ
138:NAME IS NULL
08/05/24 20:17:33
関数でSQL CLR使ってるよ
正規表現をどうしても使いたい場合
ファイルの削除や存在チェックをする場合
WMI APIを使いたい場合
ところでSQL Server2008正式版って今年中にはでそうなの?
139:130
08/05/24 20:39:24
>>135
SQL Serverは触ったことないので、単なる勘です。
Oracleのストアドプロシージャで散々な目にあったので、RDBMSで共通のSQLで表現できればそちらを採用するってだけです。
参考にならなくてごめんなさい。
140:NAME IS NULL
08/05/24 21:06:29
Oracleはなんであんなにバグだらけなんだろう。
141:NAME IS NULL
08/05/24 21:38:05
>>136
MS の言う新技術に何度となく裏切られてるから、導入を躊躇するのは当たり前。
いきがって導入するのは、学習能力のない奴だろ。
安定したら、検討するよ。
142:NAME IS NULL
08/05/25 00:33:47
枯れた技術とかいいながらSQL Serverを使用している137、141は矛盾
なんでISAMとかBtrieveとか使わないの?池沼?
143:NAME IS NULL
08/05/25 00:40:09
>>139
サンクス、了解しますた
さーて、MSDE 2000 でまた遊ぶか
144:NAME IS NULL
08/05/25 00:45:10
>>142
技術者ってのは面倒を避けるために、適当な理由をつけて、問題を回避する傾向が強いからね
んで枯れた技術とか、最新の技術は・・とか理由をつけて言い張ってるだけだから気にすんな
145:NAME IS NULL
08/05/25 00:47:53
でもOracleのANSI SQL対応がバグだらけなのを見ると
枯れるのを待つのはありな気もする。
146:NAME IS NULL
08/05/25 04:04:25
ならば訊こう。枯れたの定義は?
147:NAME IS NULL
08/05/25 04:49:35
枯れた枯れてないの定義なんて、使用する側の自己満足に過ぎないでしょ
枯れる枯れてないに関わらず、どうせ問題が発生したらメーカのせいにして責任は負わないんだから
責任を追う必要がないのに、新しい技術を導入しないのは、単にそれを導入したくないというだけの話
導入したくない理由は? それを理解していないから=技術者曰く「枯れていないから」
148:NAME IS NULL
08/05/25 09:57:13
2chでもう枯れてるよねーという話題になったとき枯れてる。
あれこれバグ報告があるうちはやめたほうがいいね。
でもOracleはバグの回避策を掲示板等へ書き込むことすら
禁止してるからとんでもない糞
149:NAME IS NULL
08/05/25 10:18:00
同業他社製品との比較は別スレでどうぞ。
150:NAME IS NULL
08/05/25 12:50:12
>>142
> なんでISAMとかBtrieveとか使わないの?池沼?
枯れてりゃなんでもいいわけじゃない、必要な機能があることが前提なんだが
そんなこともいちいち説明しないのいけないのか?
まっ、反論したかっただけなんだろうけど。
>>146
枯れたかどうかなんて、自分の経験と周りの評判だよ。>>147 みたいに責任取
らなくて済むなら、そんなの気にせずにばんばん導入するのもありだろうけど。
>>148
サポート費用稼ぎたいんだろうけどな。
サポート費用も高いし、一旦やめてから再度サポート契約しようとすると、
やめた期間の費用+α 払えとか、ほとんどヤ○ザ同然。
151:NAME IS NULL
08/05/25 12:52:03
何この多重問い合わせ
152:NAME IS NULL
08/05/25 16:57:32
>>144
技術者だって仕事でやってんだから金にならん仕事は手間をかけずに片付けたいのは当然だろ。
153:NAME IS NULL
08/05/25 20:32:17 DMMLfmVY
>>138
悪いが、2008って2005と何が違うか
俺に五七五で教えてくれ
154:NAME IS NULL
08/05/26 10:24:31
2008の売りはXML対応と、MS Officeとの親和性だったかな。
ソフトウェア開発環境展で、新バージョンの利点を説明してた。
155:NAME IS NULL
08/05/26 12:08:16
マージ使えるってのは?
156:NAME IS NULL
08/05/26 19:47:52
まじ
157:NAME IS NULL
08/05/26 20:00:19
あとは圧縮バックアップとか
158:NAME IS NULL
08/05/26 22:14:38
今日すげー嫌な汗かいたんだが、XPにSP3適用するとSQL Server 2005の
TCP/IP接続おかしかない?
W2KでテストしてたのをXP SP3に移してみたら、127.0.0.1じゃないと
Windows認証もServer認証も通らない。
SQL Serverインスコし直したら、自分自身からならプライベートIP通る
ようになったけど、他のPCからは通らない。
当然TCP/IPは有効にしたし、Expressなんでポートも1433に固定して、
Firewallも穴開けてます。
なんかすっげー怪しいぜ、というか俺の勘違いでなければ非常にヤバイ。
159:NAME IS NULL
08/05/26 22:26:51
>158
別にそんなことおきてないよ。
SP3だけど普通に繋がってるよ。
160:NAME IS NULL
08/05/28 13:31:10
>>158
Express = 名前つきインスタンスという意味なら、Windows のファイアウォール設定は
sqlservr.exe に対して外部からのアクセスを許可しないと通らないよ。ポートは動的にアサインされるから。
ついでに UDP 1433 もあけないとだめ。SQLBrowser にアクセスして SQL Server が何番ポートで listen してるか
問い合わせるから。
それでも駄目なら netstat -ano してちゃんと listen してるか確認するのが次のステップだな。
161:NAME IS NULL
08/05/28 20:51:15
>>159
えんやこらやってServer認証は通るものの、Windows認証は未だ
通らず。
去年の末頃は同様の構成でつながってたのにわけからん。
ドメイン管理のない環境でWindows認証使うなという神様の言う
とおりか?
ODBCにファイルDSN使ってるシステムが動かんのも偶然であって
ほしい。
>>160
いやいや、当然そのあたりは全部確認済みですよ。
Firewall切っても動かないぐらいです。
162:NAME IS NULL
08/05/28 22:32:50
>>161
HOSTSファイルは?
163:NAME IS NULL
08/05/28 22:46:00
>>128
複数の変数に同時に代入できる
164:NAME IS NULL
08/05/28 23:04:33
>161
Windows認証は試してなかった、後で試してみるよ。
165:NAME IS NULL
08/05/29 00:25:29 On8Unush
最近T-SQLに興味を持ち出したのですが、
帳票出力等のプログラムからSQLでデータを取得する場合、
テーブル値関数使うという判断はいかがなものでしょうか?
割と便利な気がしたのですが、実用した人の経験談とかも聞いてみたいなと。
自分の選択肢だと
1.ストアドでワークテーブルに加工してInsert⇒レポート側でベタSELECT
2.Viewをいくらか作ってそれを元に帳票向けに加工したSQLで取得
3.レポート側のプログラムで複数テーブル参照しまくりの力技。
4.テーブル値関数(最近知った)でそのままSELECT(xxx,xxx,xx) FROM 関数名
ほかにも方法はあると思いますが、少なくともVIEWよりはテーブル値関数のが
管理的に便利な気がして・・・
ただ、障害発生や拡張とか考えたとき、解析・コーディングに負担あったりするとか
いろいろ気になります。
気持ち的にはやってみたい気がするのですが、前例やその他経験者の少なさから
興味だけで終わりそうな予感。。。
166:NAME IS NULL
08/05/29 21:04:25
>>163
あ、明快ですね。気がつかない俺がバカだった、サンクス
167:NAME IS NULL
08/05/31 00:39:24
おまえら弾丸ツアーいく?
168:NAME IS NULL
08/05/31 00:55:34
行くよ~。
半分は息抜きだけどね。(w
169:NAME IS NULL
08/05/31 09:24:19
このページの内容は役に立ちましたか?
1 2 3 4 5
非常に低い 非常に高い
170:NAME IS NULL
08/06/01 00:47:25 AcT0qzva
>165
テーブル値関数で実装したが、今のところ特に問題ないよ
やってることは1.ストアドでワークテーブル~ みたいなもん
ただ、where条件は中に入れないと、データ件数にもよるけど、
パフォーマンスが悪くなってしまう
×select aaa,bbb from t_func(111,222) where ccc=333
○select aaa,bbb from t_func(111,222,333)
それと、Access2003からテーブルリンクできなかったと思う
171:NAME IS NULL
08/06/02 01:20:57
SQLServer2008CPT2月版さわってるんだがManagementStudioでSQL書いたらインテリセンスが利いて驚いたぜ。
172:NAME IS NULL
08/06/02 16:17:24 gBCGUa8J
>>171
T-SQLのデバッグできるようになった?>ManagementStudio
自分は当分インストできねーーー
173:NAME IS NULL
08/06/02 20:52:27
>>172
どういうこと?
174:NAME IS NULL
08/06/03 00:05:48
ブレークポイント設定したり1行ずつ実行したり変数に何が入ってるか確認できたりってことでは
175:NAME IS NULL
08/06/03 01:56:45
ストアド?
176:NAME IS NULL
08/06/03 22:36:01
あと再帰なんかも途中の結果を見たい時がある。
弾丸ツアーで聞いてみようかな。
177:165
08/06/03 23:13:34 5E6/z6Zz
>170
>×select aaa,bbb from t_func(111,222) where ccc=333
>○select aaa,bbb from t_func(111,222,333)
確かに、関数化の意味なさそうですねw
ためしに速度とか試してみようかなぁ・・・
ありがとうございます。
>それと、Access2003からテーブルリンクできなかったと思う
なるほど。。。ちょっと痛いかも・・・
178:NAME IS NULL
08/06/04 01:16:27 U14zGNqi
JavaからPreparedStatementを使用してSQLを実行した時、
バインド変数を使うと使わない時と比べて圧倒的に
処理速度が低下します。(0.1秒→180秒くらいの差が出る)
この現象の原因としては何が考えられるでしょうか?
また、バインド変数の有無で処理速度が変わる所までは
突き止めましたが、これ以上の原因の切り分け方が有れば
教えてもらえないでしょうか。
よろしくお願いします。
179:NAME IS NULL
08/06/04 09:44:41
>>178
そんなに差が出るものかな?特別なケースの特別な現象かもしれないよ。
回答が欲しいなら、JDBC、OS、DBMSの種類とバージョン、
それから検証が出来るくらいのプログラムソースは示すものだ。
180:NAME IS NULL
08/06/04 12:17:26 pUXBCNvj
SQL-Server2005Express + IISの場合って、ライセンス要るの?
181:NAME IS NULL
08/06/04 14:37:53
>>180
CAL関連の話は複雑なので代理店に確認して欲しい。
SQLServer Express自体の接続に制限はないがOSのライセンスに制限される。
IISはOSにバンドルされているのでこれもOSのライセンスに制限される。
Client OSの場合ピアツーピアに限られるので定型的なアプリとしては使用できない。
Server OSの場合、IIS上のアプリが匿名ではなく認証を使用する場合
CALやプロセッサライセンスが必要になる。
Server OSで匿名接続の場合はOSの価格だけで構築可能。
182:NAME IS NULL
08/06/04 14:45:15 pUXBCNvj
>181 サンクス
Server OSで匿名接続の場合はOSの価格だけで構築可能。
です。
183:NAME IS NULL
08/06/06 22:03:02 oUKZsqUS
SP3はまだか?
2005今だにバグだらけで使い物にならないんだけど…
184:NAME IS NULL
08/06/10 23:14:08
>>178
俺は同じ現象の経験あるな。
とりあえずSQL晒せ。
185:NAME IS NULL
08/06/11 00:01:24
>178
むやみにインデックスを付けていてバインド変数を使ったときのクエリに対する実行プランが
使って欲しくないインデックスを使った実行プランになったりという感じかなと思う。
特にバインド変数を使うとクエリが同じだから悪い実行プランが使い回されて何度やっても同じ状態という感じになるかと。
スペースの有無くらいの違いで違うクエリ扱いされて違う実行プランが使われると突然応答が良くなったりすることもある。
sp_updatestatsを実行して様子を見てみたり、
WITH(INDEX())とかしてインデックスを指定したりOPTION FORCE ORDERとかやってみれば収まるかもしれない。
それにわざと違うインデックスとか指定してみて同じくらいの応答時間になるインデックスを探してみたりとかしてみたりするよ。
プロファイラで見ると使って欲しいインデックスを使って検索していたときに比べてReadの数が妙に多かったりする。
186:178
08/06/12 00:19:28 z6+fGzza
確認が遅れてすいません。環境は以下のとおりです。
SQLJDBC1.0.809.102
WindowsServer2003 SP2
SQLServer2005
[SQL]
SELECT *
FROM TBL1 A,
(SELECT DISTINCT child1, child2
FROM TBL1
WHERE (parent2 >= '1000000000' AND parent2 <= '2000000000')
) B
WHERE (A.child1 = B.child1 AND A.child2 = B.child2)
AND A.parent2=A.child2
上記SQLは1秒以下で実行されますが、
列parent2の1000000000、2000000000をバインド変数にした時は
200秒近く掛かってしまいます。
また、parent2とchild2はそれぞれインデックスが張られています。
他にも出すべき情報がありましたら教えてください。
よろしくお願いします。
187:NAME IS NULL
08/06/12 00:43:59
Distinctと*をやめれ
188:NAME IS NULL
08/06/12 00:45:43
あとはparent2 >= '1000000000' AND parent2 <= '2000000000'をBetweenにかえろ。
189:NAME IS NULL
08/06/12 01:50:58
>186
同じクエリをManagementStudioで実行プランを表示で実行してみろよ。
バインド変数を使った方のクエリはプロファイラに表示されたクエリをそのままコピって
ManagementStudioで実行して同じように長時間かかる場合が再現すると状況を確認できるよ。
大抵素直に再現してくれるよ。
多分違う実行プランが表示される気がする。
>188
BETWEENは>=と<=に展開されて実行されているんだよ……
多分差がでることはないよ。
190:NAME IS NULL
08/06/12 02:03:23
1. parent2にクラスタ化インデックスを作る
2. (child1,child2)でハッシュインデックスを作る
3. 結合方法をJoin句に変える
というのはどうなのでしょう?
191:NAME IS NULL
08/06/12 09:28:36
parent1, 2をクォーテーションで囲んでいるということは、まさかvarchar系じゃないだろうな。
numericじゃなければそうした方がいいと思う(そんなはずはないと思うが)。
と、心にもないことを言ってみるテスト。
>>189-190
betweenで速度改善が望めるらしいソースはここにあるけど、もしかして古すぎる情報かな。
ベンダ依存なのかもしれないけど・・・
URLリンク(www.geocities.jp)
192:NAME IS NULL
08/06/12 13:08:17
ADO.NetからSQL-Server2000を使用しています。
ストアドプロシージャに関して質問させてください。
DataAdapter の InsertCommand 用にデータを挿入するストアドプロシージャ Insert1
を作成しました。Insert1 ではストアド Proc2 を呼び出しています。
Proc2 内で select を実行すると呼び出しもとの DataAdapter にその結果セットが
帰ってくるのですが、これを Insert1 で受け取って破棄するにはどうすればいいの
でしょうか。
コードで書くとこんな感じです。
Create Procudure Proc1 as begin
exec proc2 -- ここでproc2の結果セットを破棄したい。
end
Create Procudure Proc2 as begin
-- 何か処理して処理後の結果を返す
select * from table1
end
環境は
VisualStudio 2005 Pro(VB.Net)
SQL-Server 2000 Ent です。
よろしくお願いします。
193:NAME IS NULL
08/06/12 14:53:30
>>186
これは実行プランを比べてみないとわからないね。
ポイントになりそうところは
parent2 >= '1000000000' AND parent2 <= '2000000000'
がおおよそどのくらいヒットするかという点。案外件数が少なくない?
parent2 >= ? AND parent2 <= ? としてしまうとオプティマイザは
どのくらいヒットしそうか予測できないので最適化の判断を誤る可能性がある。
194:NAME IS NULL
08/06/12 14:58:08
仮にネストしたループにプランされてしまっていたら大幅に遅くなるよね。
つまりAに対して1レコードずつ判定を繰り返す。
SELECT * FROM TBL1 A
WHERE A.parent2 = A.child2
AND EXISTS (
SELECT * FROM TBL1 B
WHERE A.child1 = B.child1 AND A.child2 = B.child2
AND parent2 >= ? AND parent2 <= ?)
このSQLはイメージでこれを実行しても別の最適化がされる可能性があるので注意。
195:NAME IS NULL
08/06/13 01:19:43
>191
SQLServerだとBETWEENは展開されるから変わらない。
INが大量のORに展開されてたりもするね。
一般的な話ではBETWEENの方が効率がよくなるのを期待していいはずなのでその情報は間違ってないと思うよ。
196:NAME IS NULL
08/06/13 09:47:16
20年前ならいざ知らず、最近のSQLパーサーは賢いから
小細工せずに素直に書いたSQLのほうが最適化されやすいよね
197:NAME IS NULL
08/06/13 10:44:32
まあね。
198:NAME IS NULL
08/06/13 10:47:09
最後は結局実行プランとにらめっこすることになるね。
プランが不安定になるのはテーブルや制約索引の設計がいい加減なケースが多い。
安易にヒントに逃げないでその辺を見直すのが先決。
上のお題では child2単独の索引をやめてchild2, child1 (順番大事)の複合で索引を作る。
もしTBL1にプライマリーキーがなければ適切なものをつける。
この2つでだいぶ改善するはず。
199:NAME IS NULL
08/06/13 11:15:25
カバードインデックスにする手もある。
create index TBL_IX2 on TBL1 (child2, child1, parent2)
MSSQL2005以降なら付加列インデックスが利用できる。
create index TBL_IX2 on TBL1 (child2, child1) include(parent2)
child2, child1でユニークというわけではないので付加列インデックスにする意味はないな。
200:NAME IS NULL
08/06/13 11:44:24
はじめのパターンのプラン
|--Filter(WHERE:(...
|--Nested Loops(Inner Join, OUTER REFERENCES:...
|--Nested Loops(Inner Join, OUTER REFERENCES:...
| |--Sort(DISTINCT ORDER BY:...
| | |--Clustered Index Scan(OBJECT:....
| |--Index Seek(OBJECT:...
|--Clustered Index Seek(OBJECT...
改良版のプラン
|--Nested Loops(Inner Join, OUTER REFERENCES:...
|--Stream Aggregate(GROUP BY:...
| |--Index Scan(OBJECT:...
|--Index Seek(OBJECT...
Sortがなくなってだいぶすっきりした。
>child2, child1 (順番大事)の複合で索引を作る
と書いたが順番は関係なかったので訂正。
parent2の単独索引も不要。
201:NAME IS NULL
08/06/13 20:29:00
質問しっぱなしで逃げるとかどういう神経してんだ
202:NAME IS NULL
08/06/14 00:26:10
>>192
テーブル変数か一時表で呼び元に返してやればいいんでないか
203:NAME IS NULL
08/06/14 01:48:48 19RmXNyg
2000 STD なのですが質問させてください。
最初のインストール時にはCAL10人分で始めたのですが、ユーザー数が増えたため
追加購入した場合どのように10人から10プラスアルファに変更できるのでしょうか
再インストールしなくてもエンタープライズマネージャから変更可能だと思いますが
解決法が見つかりませんでした。
よろしくお願いいたします。
204:NAME IS NULL
08/06/14 07:37:53
なんでライセンスを購入したところに聞かないの?
205:NAME IS NULL
08/06/14 16:39:39
>>201
死ぬほど忙しくなってインターネットをやる時間すらなくなってしまったんじゃないかな?
206:NAME IS NULL
08/06/15 22:32:42
ストアドプロシージャで、xml型のパラメータ受け取ってsp_xml_preparedocumentで
展開してから一括でINSERTしてましたが、存在チェックしてからINSERTする必要が
出てきたので、展開されたテーブルの1レコード毎にチェックしたいのですが、
どのようにすべきでしょうか?
207:NAME IS NULL
08/06/15 23:59:04
>>206
何の存在をチェック?
NOT INじゃダメなのか?
208:NAME IS NULL
08/06/16 00:24:11
一意制約違反を起こしたらrollbackすればいい
209:206
08/06/16 08:54:16 YabEVWOQ
やりたいのは一意制約違反の無い行のみ追加したいのですが、
ロールバックすると全てキャンセルしちゃうから1行ごとに
チェックするしかないのかなぁと…
210:206
08/06/16 10:24:40 YabEVWOQ
カーソルを使って思った処理が出来そうです。
失礼しました。
211:178
08/06/19 00:44:01 VBzYbTdU
多くの回答を頂いたにも関わらず御礼も言えないままで申し訳ないです。
実行プランを出してみましたが、ご指摘の通りバインド変数の
有無で大きく内容が異なりました。
バインド変数有りの場合、無しと比べて実行プランの長さが倍ほどになり、
IndexScanという処理が2回程現れます。(無しでは1回も現れません)
頂いたアドバイスを一つ一つ試したいのですが、週末からプロジェクトの
方が慌しくなり、あまり手が付けられていません。
落ち着いたらまた経過を報告させて頂きたいと思います。
ご回答頂いた皆様、どうもありがとうございました。
212:NAME IS NULL
08/06/21 20:03:15 xziLRgkp
MERGE早く使いたい!! (2008から入るらしいが・・・)
SQLServer2005上で↓を効率よく実現する方法教えて!
※参考(URLリンク(www.shift-the-oracle.com))
MERGE INTO USER_MASTER
USING (
SELECT
'0099' "USER_ID",
'入力した名前' "USER_NAME",
'0010' "DEPT_NO"
FROM DUAL
) phantom
ON (USER_MASTER.USER_ID = phantom.USER_ID)
-- または
-- USING DUAL ON (USER_MASTER.USER_ID = '0099')
--
-- 既存レコードの更新
WHEN MATCHED THEN
UPDATE SET
USER_NAME = USER_NAME || '(更新)',
MODIFIED_ON = SYSDATE
-- 新規レコードの作成
WHEN NOT MATCHED THEN
INSERT
( USER_ID, USER_NAME, DEPT_NO )
VALUES
(phantom.USER_ID, -- or '0099'
phantom.USER_NAME,-- or '入力した名前'
phantom.DEPT_NO ) -- or '0010'
213:NAME IS NULL
08/06/23 21:10:32
このソフトを熟知している方が多そうなので、
こちらにて質問させて下さい。駆け出しのネットワーク管理者をやっております。
パケットをキャプチャしているとICMP及びTCP接続パケットを大量に他NWに
投げている端末がありまして、確認するとsqlblowser.exeがTCP接続の原因の様なのです。
SQLServerを使用した事が無いのですが、
このアプリはICMPを投げた後にTCP接続するような動作をデフォルトで行うのでしょうか?
214:NAME IS NULL
08/06/23 21:11:08 AOnhapfM
すんません。あげておきます…
215:NAME IS NULL
08/06/24 13:53:50 BT1PbFhk
>>213
SQL Server 構成マネージャ > SQL Server 2005 のサービス
で SQL Server Browser 立ち上がってない?
#多分それでは無いかと・・・
216:NAME IS NULL
08/06/24 17:08:58
>>213
SQL Server Browserは、ご近所のSQL Serverを探して一覧を作成するのが
お仕事なので、可能性はあるが、キャプチャまでしたことない。
止め方は>>215のところで止めれば良いので、一度やってみては。
217:213
08/06/24 21:57:30 BwCyEnPQ
>>215,216
お二方共、有力な情報ありがとう御座います。
さっそく明日に該当サービスを停止しても業務に支障が無いか確認致します。
ありがとう御座いました。
218:NAME IS NULL
08/06/25 00:14:30
>>217
SQL Server Browser ってクライアントからのアクセスを
受け付ける役割もあるので、問題の端末がサーバ用途の場合、
サービスは止められないかもです。
パケットを投げるのがまずいのであれば、サービスを止める代わりに
アウトバウンド通信をブロックするとかどうですか?
219:NAME IS NULL
08/06/25 00:32:00
>>218
Oracleのリスナーと違ってアクセスを受け取る役割はないような。
可変ポートにしてない限りはいらない。
220:NAME IS NULL
08/06/25 00:35:02
IA64で性能でねぇ。。。
221:218
08/06/25 08:32:16
>>219
ずっと勘違いしてましたorz
ありがと。
222:NAME IS NULL
08/06/25 09:34:24 D8c5ROxn
>>219
クライアント:ポート:1434へアクセス(UDP)
SQLSV:->TCP/IP ポートまたは名前付きパイプを返す
クライアント:->返された、TCP/IP ポートまたは名前付きパイプでアクセス ですか
#まぁHelpを嫁ということですね
#このあたりは2008で変わるような記述をどこかで見たような
#>Oracleのリスナー
#昔だとfork() だろうけど、今は何だろう?
223:NAME IS NULL
08/06/25 18:51:50 JWkEO9dM
sql server2000でトランザクションログから更新sql全文を取得することはできますか?
oracleだとlogminerのような機能があるけど
224:NAME IS NULL
08/06/25 18:57:56
海外のサードパーティ系ツールであるそうだが標準ではないっす。
ログは物理操作だけで論理操作を記録しないこともあるから、
全部は取れないのではないかと思う。
225:NAME IS NULL
08/06/26 20:01:18 SvFJj1W/
>>224
ありがとです
サードパーティ系ツール名がわかれば教えてタモレ
226:NAME IS NULL
08/06/27 00:44:29
どういう用途に使いたいのか次第だろうけど、
プロファイラでクエリを全部取得するのじゃ駄目なんでしょうか?
一気に大量に来ると溢れるけどね。
227:NAME IS NULL
08/06/27 09:17:22
>>225
ググれよ!それくらい
つ URLリンク(www.vivouac.co.jp)
228:NAME IS NULL
08/06/27 11:02:05
>>225
自分が知っている範囲では、Log ExplorerとかSQL Log Rescueとかかな。
229:NAME IS NULL
08/07/02 10:15:03 h4L3xO4O
NOLOCKヒントってUPDATEの更新前行と更新後行を
両方同時に読んじゃうの?
これが本当ならダーティーリードするだけとか
そんなレベルの話じゃすまないんだけど…
URLリンク(oshiete1.watch.impress.co.jp)
230:NAME IS NULL
08/07/02 12:54:01
SQL Server2008で空間系の検証を行っています。
が、どうも空間インデックスが効いていないような感じです。
同じような境遇の方いらっしゃいますか?
数十万件のGeometry型を含むテーブルに対して、
次のようなクエリーを実行させると20秒程かかりかなり遅いと感じています。
>SELECT Geom.STAsText() FROM SpatialTable with(INDEX = SpatialIndex) WHERE Geom.STIntersects(@Data) = 1
実際に吐き出されるレコードは数件です。
@Data はPOINT()からSTBuffer()して作成したポリゴンです。
空間インデックスは作成出来たので期待していたのですが、
いざ実行プランを見てみると通常のクラスタ化インデックスが使用されていました。
そこで FROM句 に with(INDEX = SpatialIndex) でインデックスを名指ししたところ、
次のエラーが出ました。
メッセージ 8635、レベル 16、状態 9
クエリ プロセッサは空間インデックス ヒントを含むクエリのクエリ プランを作成できませんでした。
理由: 必要なバイナリ空間メソッドが条件に見つかりませんでした。インデックス ヒントの削除または SET FORCEPLAN の削除を試行してください。
意味がよくわかりません。
実はインデックスの中身が出来ていないのでは、なんて思っています。
SQLの知識は乏しいので八方ふさがりになっています。
何かヒント等ありましたコメントください。
231:NAME IS NULL
08/07/02 18:08:21
>>230は無かったことに。。。
232:NAME IS NULL
08/07/02 21:45:19
>>229
ダーティリードというのはそういうもので、知らぬ奴が馬鹿だ。
リンク先のような事例ではMSSQL2005以降のSNAPSHOT分離レベルを使えということになる。
233:NAME IS NULL
08/07/02 22:35:01
NOLOCKヒントがREAD UNCOMIITTEDと同じダーティリードとわかってない人は多そうだな。
つまり自身もロックをかけないし他のトランザクションのかけたロックも無視する。
コミット前のデータは見えるし、削除してコミットしてないデータは既になくなってるように見える。
インテントロックもかからないから、UPDATEやDELETE/INSERTでレコード物理位置が動いた場合は
両方見えることも両方見えないこともありえる。
NOLOCKヒントをはずせば解決だよん。
234:NAME IS NULL
08/07/02 23:25:06 faA08Ceq
>>223
個別にDELETE/INSERTした場合はともかく、
「UPDATEでレコード物理位置が動いた場合に
両方見えることも両方見えないこともありえる。」
本当にこれがダーティリードの正しい実装ですか?
他のDBMSでも同様の実装がなされているのでしょうか?
235:NAME IS NULL
08/07/02 23:31:49
>>234
> 本当にこれがダーティリードの正しい実装ですか?
ダーティリードだからね
236:NAME IS NULL
08/07/02 23:35:47
そこはDBMS依存だろう。
read uncommittedなんて管理用にアバウトな件数を数えるときに使う程度だよ。
それ以外で使ったのは、dual表作ったときくらい。
fromなしselectが使えないクライアントソフトがあったんで作った。
create view dbo.dual as
select top 1 'x' as x from sys.objects with (NOLOCK)
237:NAME IS NULL
08/07/02 23:41:20
ところでダーティリードの規格ってあるのかな?
ANSIで決まってたりしてないよな。
238:NAME IS NULL
08/07/02 23:43:09
viewにする意味もnolockにする意味もわからない
239:NAME IS NULL
08/07/02 23:47:36
COMMIT前のデータが見えるという仕様のみで、
実装方式により予期せぬ結果が返ってくるかどうかまでは
既定されてなさそうですね。
240:NAME IS NULL
08/07/02 23:51:40
実表をdualにした場合にダミーデータを消したり2件以上にしたりしたときのダメージが大きい。
sys.objectsを使うのはsqlseverに必ずある表で必ず1件以上データが存在し
常に参照されているためキャッシュされている確立が高い。
nolockを使うのは単に共有ロックのオーバーヘッドさえ避けたいため。
とにかく1件取れればよい。
241:NAME IS NULL
08/07/04 00:04:35 HGacSGIp
2008のRC0が出たばかりですがRC1ってのが次に出るの?
242:NAME IS NULL
08/07/04 00:55:47
>>240
どうしてもviewにしたいなら
create view dbo.dual as
select 'x' as x
でいいじゃん。
クライアントの仕様はともかくddl文にもfrom句必須って訳じゃあるまい
243:NAME IS NULL
08/07/04 18:55:18
>>242
それもやったのよ(笑
クライアントソフトは何やってたのだろうね。それもエラーになってた。
244:NAME IS NULL
08/07/16 20:20:43
SP2以降に見つかったバグが既に500件以上あるんだって
早くSP3出しとくれ。
245:NAME IS NULL
08/07/16 22:44:22
以下の条件文①(あるSQLの一部分)を、
②~③の何れかに代えてクエリアナライザ等で実行した場合、
④の場合のみ応答時間が低下する現象が発生しておりますが、
どのような原因が考えられるでしょうか?
アドバイス等ありましたらお願いします。
① where pk1 = '11111'
② where pk1 = cast('11111' as char)
③ where pk1 = cast('11111' as varchar)
④ where pk1 = cast('11111' as varchar(8000))
なぜ varchar(8000)にキャストするかというと、
JDBCのPreparedStatement#setStringにてバインド変数を使用した場合に、
JDBCドライバの内部的には上記④に近いSQLに展開されるためです。
バインド変数の使用によって性能低下が発生したことがきっかけで、
その後に切り分けを実施した結果、上記④での性能低下に行き着いた
次第です。
pk1は、主キーの第一項目で char(5)です。
実行プランは①~④で完全に同一です。
OS: Windows 2000 Server SP4
DB: SQL Server 2000 SP4
JDBC: SQL Server 2005 JDBC Driver 1.2
Java: JDK 1.4
246:NAME IS NULL
08/07/17 00:12:36
>245
似たようなことだが、C#で空文字をパラメータで渡すとvarchar(8000)に展開されて仰け反ったけど、
別に遅くなってる様子がなかったので気にしてなかったよ。
247:NAME IS NULL
08/07/19 17:19:16 ORteGkYE
SELECT tbl1.aaa, tbl2.bbb
FROM tbl1
INNER JOIN tbl2
ON tbl1.ccc = tbl2.ccc
WHERE tbl1.ddd = ○○○
AND tbl2.eee = ×××
っていう書き方がなんか嫌いで、いつも
SELECT t1.aaa, t2.bbb
FROM (SELECT * FROM tbl1 WHERE ddd = ○○○) t1
INNER JOIN (SELECT * FROM tbl2 WHERE eee = ×××) t2
ON t1.ccc = t2.ccc
みたいな書き方してしまう。このほうが(俺は)頭の中でわかりやすい。
でもやっぱ最初のSQLのほうが断然速そうに見えるんだが実際どうなんだろう?
(最近はWHERE条件がない場合でも下の書き方をする癖がついてしまった。。。)
248:NAME IS NULL
08/07/19 18:24:36
>>247
実際のところは実行プランを見ないとわからないが、
普通はその辺の書き方でプランに差は出ない。
どちらかのテーブルのCCCに索引があればどちらのSQLでもほぼ一定のプランになるはず。
両方のCCCに索引がない場合はSQLの書き方や統計情報にプランが
影響されやすくなるので差が出るかもしれない。
249:NAME IS NULL
08/07/19 21:22:53
て言うか、わざわざ書き換えるほど下の方がわかりやすいとは思えない。
1人でやってるなら、好きに書けばいいけど、その SQL を他の人がメンテ
する可能性があるなら、一般的な書き方をするべきだと思うよ。
250:NAME IS NULL
08/07/19 21:45:53
>>247
SQLに限らないが特殊なコーディング規約に慣れすぎるのは、
一般的や規約のコードに対する読解力が相対的に低下する
ことになるのでは?
きっと他のプロジェクトメンバは迷惑してるよ。
俺のプロジェクトでやるやつがいたら書き直しだな。
1つのSQLがあたりまえに数千行規模の場合、
期待しない実行プランになるリスクも高くなりそう。
251:NAME IS NULL
08/07/19 22:44:11
数千行規模のクエリとかどれだけ予想外な実行プランが走るか怖くて見たくないぞ。
252:NAME IS NULL
08/07/19 22:45:38
> 1つのSQLがあたりまえに数千行規模の場合、
ネタかバカのどっちかだろ。
253:247
08/07/19 23:34:54
みなさんご意見ありがとうございました。
ちなみに実際のコーディングでは下のような感じで書いてます。
こうするとクエリアナライザで個々のSQLが実行しやすいので。
SELECT t1.aaa
, t2.bbb
FROM (
SELECT *
FROM tbl1
WHERE ddd = ○○○
) t1
INNER JOIN (
SELECT *
FROM tbl2
WHERE eee = ×××
) t2
ON t1.ccc = t2.ccc
今後実行速度等の比較をしてみます。
あと社内のメンバーにも意見を聞いてみようと思います。。。
254:NAME IS NULL
08/07/19 23:37:04
前スペースって消えてしまうんですね。もう一回貼ります。
(スレ汚してスマン。。。)
>SELECT t1.aaa
> , t2.bbb
> FROM (
> SELECT *
> FROM tbl1
> WHERE ddd = ○○○
> ) t1
> INNER JOIN (
> SELECT *
> FROM tbl2
> WHERE eee = ×××
> ) t2
> ON t1.ccc = t2.ccc
255:NAME IS NULL
08/07/20 04:10:22
>>251
実業務のSQLが長くなるのは理由がある。
レコードあたりのフィールドの数がやたら多い。
select のフィールドのリストは縦に書くことが多い。select * は原則禁止。
(ここまでは仕方ない)
プログラム側にキャッシュできるような変更のない小さなマスターまで結合したがる。
(リザルトセットを直接利用するコントロールや帳票ツールのせいというのもある。)
外部キー関係がいい加減でやたら外部結合が必要。気が付くとcoalesceやdistinctを使いまくり。
サブクエリーにまでselect * は禁止!を守ってしまうアホがいる。
これを守れば一千行に手が届くようなSQLが出来上がる。
256:NAME IS NULL
08/07/20 10:38:32
× ネタかバカのどっちかだろ。
○ ネタかバカかアホのどれかだろ。
257:NAME IS NULL
08/07/20 15:11:05
>>255
概ねその通りだが外部結合のところがよくわかりません。
外部キー使うと外部結合が不要になるの?
258:NAME IS NULL
08/07/20 16:20:57
抜けのあるキーと結合するとなると内部結合ではデータが欠ける。
重複のあるキーと結合するとデータがだぶる。
参照整合性でその問題は発生しなくなる。
実際に物理的な制約をかけるかどうかは別にしてシステムとして
その辺の整合性を保障をしないと結合なんて使えませんがな。
259:NAME IS NULL
08/07/20 17:12:27
抜けのあるキーは別にして、キーがダブるって...
どんなレベルの奴が設計してるんだよ。
260:NAME IS NULL
08/07/20 18:53:08
既に大量のデータが存在するテーブルにクラスタ化インデックスを付けた場合、
インデックスの作成やデータの並べ替えなどが行われるのはCREATE CLUSTERED INDEX文を
実行した時ですか?それとも実行自体はすぐに終わってバッググラウンドで処理が継続されてる
んですかね?
(DROP_EXISTINGオプションが関係してくるのかな?)
261:NAME IS NULL
08/07/21 13:34:06
完了するまで戻ってこない。
他のプログラムからいじってもテーブルロックがかかって操作できないはず。
クラスタ索引の再編や付け直しはメインリーフページを再配置するから時間がかかる。
ケースによってはクラスタ索引なしという選択も悪くない。
262:NAME IS NULL
08/07/21 14:01:05
新しい職場で2005のMSDN版みたいな奴を初めていじったんだが
インストール手順書にメモリのチューニングがあった
みんなこれいじってる?
263:NAME IS NULL
08/07/21 14:02:18
訂正
MSDN→MSDE
264:NAME IS NULL
08/07/21 14:31:56
2Gや4Gの壁なら突破してるけど
メモリのチューニングってどれのことだよ
265:NAME IS NULL
08/07/21 16:31:20
>>261
レスありがとうございます。
ところで下記URLのページによると一度作ったインデックスはDBCC INDEXDEFRAGや
DBCC DBREINDEXで定期的に作りかえるよう勧められているのですが、>>261さんは
そういったことをされていたりしますか?(質問ばかりですみません。。。)
URLリンク(www.microsoft.com)
第 1 回 「インデックスアーキテクチャとデータアクセス方法を理解する」
266:NAME IS NULL
08/07/22 00:37:14
>>264
どこいじったのかよくわからんが
キャッシュの設定があった
267:NAME IS NULL
08/07/22 15:39:26
フルテキストインデックスなんですが
Like '%AAA%' と contains(カラム,'*AAA*') とでは
取得件数に大きな違いがあります
Like '%AAA%' と contains(カラム,'*AAA*') は
同じではないのですかね?
Like検索が遅いので、初めて全文検索を使ってみましたがよくわかりません orz
268:NAME IS NULL
08/07/22 15:40:37
SELECT * FROM HOGE WHERE HOGE1 > 100 AND HOGE2 < 200
といったSQLで引かれるテーブルがある場合
インデックスは
HOGE1とHOGE2別々につけたほうがいいですか?
ひとつのインデックスとしてHOGE1, HOGE2でいいですか?
269:NAME IS NULL
08/07/22 15:48:50
>>267
フルテキストはあらかじめ文章を単語に分解してそれを検索するイメージなので、
通常そこでは区切らないだろうような辞書にない単語や普通じゃない固有名詞などは
ヒットしない可能性が高い。
DBに登録してからフルテキスト検索にヒットするようになるまでタイムラグがある。
Linkと一致しないといってクライアントや上司(たよりにならね~)がバグだと言い出すので、
開発や導入前にどういうものかよく説明しておく必要がある。
SQLサーバーのは単語や類似語の登録が出来なかったように思うので、
企業内システムには割りと使いにくい。
(このへんは余り自信がない、出来るのかもしれない)
270:NAME IS NULL
08/07/22 15:51:08
>>268
別々につけても片方しか使われない。
複合キーした場合は2つ目は索引としては使われないが、
カバードインデックスとしての効果は出る。
271:NAME IS NULL
08/07/22 23:00:53
SQL server 2005 Service Pack2のセキュリティ更新プログラム(KB948109)だけ
何度再実行してもインストールされません。コード2B08ってのが出て、
問題のトラブルシューティングとかいうのも見てみたのですが、原因が全くわかりま
せんでした。種類が重要になってるので凄く気になります。どうすればいいんでしょうか?
OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
半角英数字のものにしましたがやっぱりダメでした・・・
272:NAME IS NULL
08/07/23 05:30:52
>>271
> OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
> にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
> 半角英数字のものにしましたがやっぱりダメでした・・・
ユーザーアカウントだけ?
コンピュータ名はどうなっているかな?
あと、コンピュータ名を半角の大文字で入力した方がいいはず。
(今回の件とは直接関係ないけど、念のため)
273:NAME IS NULL
08/07/24 22:19:22
昨日からExpress Editionで使い始めました。質問させてください。
テーブルにデータを入れるときは全て手動なんでしょうか?
csvファイルとかから読み込んで入れたいんですけど、そういう機能はないのでしょうか。
調べてもわかりませんでした。お願いします。
274:NAME IS NULL
08/07/24 22:31:06
>>273
DB右クリック>ウィザードで行けたような気
でも、型の推測がバカなので注意。
275:bcp
08/07/24 22:33:43
どうせ調べてないんだろ。
ググッた単語書いてみなよ。
276:NAME IS NULL
08/07/24 23:13:43
ツンデレな>>275に萌えw
(ヒント:名前欄)
277:NAME IS NULL
08/07/25 00:18:52
>>275
273です。
ありがとうございます。
しかし、Error = [Microsoft][SQL Native Client]サーバーへの接続確立時にエラーが発生しまし
た。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート
接続を許可していないことが原因である可能性があります。
というエラーが出て結局ダメでした。
ここを見てこの通りにやってもみたけどダメでした。
URLリンク(support.microsoft.com)
残念です。
>>274
Express Edition2008では「ウィザード」っていうコマンドが見当たりませんでした。
がんばって探したのですが。
278:NAME IS NULL
08/07/25 20:51:05
なにしろウィザードだからな
279:NAME IS NULL
08/07/25 20:59:22 zcVwMyen
>>277
ネタ? ちゃんと読んで、書いてある手順通りやんないと駄目だよ
#ちゃんとsql server 再起動してるよね?
>>Express Edition
には接続ウィザードないよ。
tool->データエースへの接続で mdf 直接指定じゃ無かったかな
ちゃんと調べなさい(もしくは書籍の立ち読み)
#Express ずいぶん使ってないから 覚えてないw
csvファイルの取り込みは DTSWizard.exe で探してクレイ
#なんかのバージョンで入っているらしい
#自分は、dev版使ってるからどれを入れればいいかわかんね>express
初めてさわるんなら、まず情報収集しなよ
280:NAME IS NULL
08/07/25 21:07:42
どうでもいいテストデータを少量入れる時、
Excelで作ってコピー>テーブルを開いてペーストとかやるな。
とんでもなく時間かかるからアレだがw100件未満推奨。
281:NAME IS NULL
08/07/26 02:58:17
なんか情報が錯綜しているんで、ちょっとまとめてみる。
> 昨日からExpress Editionで使い始めました。質問させてください。
> テーブルにデータを入れるときは全て手動なんでしょうか?
> csvファイルとかから読み込んで入れたいんですけど、そういう機能はないのでしょうか。
> 調べてもわかりませんでした。お願いします。
BCPというコマンドラインツールがあるから、これでテキストファイルのインポート/エクスポートが可能。
使い方としては、CSVファイルをインポートする場合
bcp データベース名.所有者.テーブル名 in CSVファイル名 -S.\SQLEXPRESS -T -t , -c
CSVファイルとしてエクスポートする場合
bcp データベース名.所有者.テーブル名 out CSVファイル名 -S.\SQLEXPRESS -T -t , -c
※詳しい使い方は、BCP /?入力するか、オンラインマニュアルを参照。
あと、Express Edition使っているんだったら、マイクロソフトダウンロードセンターから
Microsoft SQL Server Management Studio Expressをダウンロードしてインストールした方がいいよ。
URLリンク(www.microsoft.com)
282:NAME IS NULL
08/07/28 10:27:56
Express Editionでいちばん使い勝手がいいのはIBM DB2だよ。
あれは全部そろってる上に、そのまま業務に使える。
283:NAME IS NULL
08/07/28 19:48:11
Express EditionなんてDB2に無いぞ
284:NAME IS NULL
08/07/28 21:19:48
DB2 Express-C がそれです。
285:bcp
08/07/28 21:35:32
>>282
使い勝手などは人に依存する部分も多いので、一番とか根拠の
無いことを言う奴は宣伝と思っていいかな?
286:NAME IS NULL
08/07/28 21:39:43
いいですよ。私は”青い”血が流れているので
287:NAME IS NULL
08/07/29 12:06:06
ここで聞いて良いのかわからんのだが
VS2008のDVDでVSインストールしたら
一緒にSQLSERVER2005EXPRESSもインストールされたんだが
Microsoft SQL Server Management Studioがインストールされなかった
これは個別にインストールしろってことなのか?
288:NAME IS NULL
08/07/29 18:06:53
>287
ExpressEditionを使うなら別に入れる。
DeveloperEditionとか使うならVisualStudioのインストールオプションから削って最初から入れないでおく。
289:NAME IS NULL
08/07/30 14:28:40
>>288
トンクス
VS2008Pro版だったんだが
初めてのインストールなので戸惑った
290:287
08/08/01 13:25:01
本体からSQLEXPRESSを削除して
MSDNのSQL2005を入れたら
全部入ってくれたわ
いつの間にかXPでもSQLSERVERが動くようになったのね
291:NAME IS NULL
08/08/01 14:10:46
はじめからExpressとDeveloperEditionはXPでの動作は保証されている。
正規版はXPで動作するがライセンス上ほぼスタンドアロンでしか使用できない。
期間限定のお試し版はサーバー限定でXPはインストールできない。
確かこんなだったはず。MSDNのってDeveloer版じゃない?
292:NAME IS NULL
08/08/01 14:40:48 +ktCTmOk
>MSDNのってDeveloer版じゃない?
たぶん そのはず
293:291
08/08/01 17:52:04
確かにDev版でしたわ
ところで諸兄に質問
郵便局が発行してる郵便番号データのKEN_ALLってやつを
SQL2005のマネージメントスタジオでSQL2005にインポートすると失敗する
SQL2000のエンタープライズマネージャでMSDE2000相手にインポートだと成功するんだけど
これはうちだけなのかな?
294:NAME IS NULL
08/08/04 10:30:08
直前のSQLで更新された行の数を知る方法はないでしょうか?
MySQLのmysql_affected_rows()のようなものです。
URLリンク(dev.mysql.com)
295:NAME IS NULL
08/08/04 13:02:40
初心者丸出しの質問で申し訳ないのですが・・・
SQL Server 2005 EXPRESS が入っているサーバー間で
ミラーリングができないものかと思案中なんだけど
ググってもEXPRESSはミラーリングやフェイル・オーバー・クラスタ
とか構築できないという情報だけなんだが
やはり、EXPRESSエディション同士のサーバー間で
ミラーリングを構築することは不可能なのだろうか???
実際にExpress同士でミラーリングができる環境の構築に
成功している人がいたらアドバイスをお願いしたいのです・・・
296:NAME IS NULL
08/08/04 13:21:24
>>294
@@ROWCOUNT
297:NAME IS NULL
08/08/04 13:53:37 3h5OcO5t
>>295
MSDNに無いって書いてあるから、だめなんじゃない?
298:294
08/08/04 14:26:15
>>296 ありがとうございます。
299:bcp
08/08/04 23:28:26
>>295
不可能に決まってるだろ。
まじめな話し、エンジン部分の大きな違いはミラーリング/クラスタと
サイズ (プロセサの個数とかも含む) の制限だけなんだから、Express
でミラーリングなんかサポートしたらバカ高い Standard や Enterprise
Edition なんかを買う奴がかなり減るだろ。
300:NAME IS NULL
08/08/05 00:22:26
>>272
亀レスで申し訳ありません。インストール出来ました!!!
本当にありがとうございます。コンピューター名を半角の大文字にしたら
あっさりとインストール出来ちゃいました・・・本当に不思議ですね。
301:295
08/08/05 14:21:24
>297
>299
そのようですね^^;
とりあえず今回はトリガを用いて
DB(A)のテーブルの変化をDB(B)と同期させるように
するつもりです。
トリガ作るのがものっそい面倒なんで
ミラーリングができねーかなーなんて思ったのがきっかけでした。
ありがとうございました。
302:bcp
08/08/06 00:26:56
何でそんなことしたいのか知らんけど、仕事なら普通に
Standard Edition 買うのを勧める。
趣味なら、心置きなく楽しんでくれ。
303:NAME IS NULL
08/08/06 22:22:03
データ同期がしたいならログ配布っぽい仕組みにチャレンジした方がまだ現実的かも。
リアルタイムは無理だけどさ。
304:NAME IS NULL
08/08/07 00:35:39
トリガ使ってのミラーリングはやってる。
安定動作するまですごく大変だったよ。間違いなくお勧めしない。
305:NAME IS NULL
08/08/07 00:52:50
ミラーリングって一見簡単設定っぽいけど、一歩間違うと復旧させるの大変だろ?
ちょっとSQLかじった程度じゃ、トラぶった時、手に負えなくなるのが関の山。
306:bcp
08/08/07 22:47:38
そりゃミラーリング (=運用) と SQL (=開発) じゃあ、求められるスキルは違うだろうよ。
307:NAME IS NULL
08/08/08 02:43:48
Aというテーブルにデータが追加されたらBにも追加するというトリガ(after)があるとする。
Aでエラーが起きたらトリガは起動しない。
Bでエラーが起きたらAの追加もロールバックされる。
後者のBでエラーが起きてもAにはデータを入れておきたい場合はどのような手段がありますか?
308:NAME IS NULL
08/08/08 10:22:42
Bにエラーをさせないようによく言い聞かせておく
309:307
08/08/08 11:59:06
>>308
解決しました。ありがとうございました。
310:NAME IS NULL
08/08/08 12:36:20
ワラタ
311:NAME IS NULL
08/08/09 02:25:48
Oracle→SQL Serverに移行するんだけど
MSから出てるツールはどうなの?
データに完全に差分が出ないのなら使いたい
あと、複数のDBがあって、全TBLをまとめて同時に移行できる?
312:NAME IS NULL
08/08/11 22:09:31
>>311
自分でゴリゴリバッチ書けばいいじゃん
313:NAME IS NULL
08/08/12 04:18:53 ejoHNrE8
CREATE LOGIN したときの
DEFAULT_DATABASE は
どうやったら確認できますかね?
314:NAME IS NULL
08/08/12 21:04:24
SQL Server 2000で、datetime型の列の規定値を
データのupdate時の日時に設定することは出来ますか?
MySQLでいうところの
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
みたいなことをしたいのです。
列の規定値の定義方法をご教示いただきたく。
315:NAME IS NULL
08/08/12 22:16:39
GETDATE()をデフォルトに指定しろ。
316:NAME IS NULL
08/08/12 22:49:53
ユーザーが勝手にDBに接続してくる・・・。Windows認証だと防げない・・・。
317:NAME IS NULL
08/08/13 00:32:31
>>316
ユーザーが勝手にDBに接続しなきゃ、データ見れないだろw
318:NAME IS NULL
08/08/13 05:05:32 9W/6/zwG
SQL Server 2005のデータベースのデータ型の設定で
nvarchar(255)にしていADO.net経由で書き込みすると、文字列データまたはバイナリ データが切り捨てられます。
というエラーが返ってくるのは何故でしょう?
書き込むデータは半角やら全角やら混ぜたものなんですが・・・。
319:NAME IS NULL
08/08/13 06:02:31
>>315
㌧
INSERT時のデフォルトはそれで良さそうなんですが、
UPDATE時に変更はされないですよね?
>>318
エラーメッセージを正確に記載するのが良いとオモ。
つかADO.NETのスレの方が良くない?
320:NAME IS NULL
08/08/13 08:20:28 4+Qu872F
>>318
書き込むデータの長さは?
321:NAME IS NULL
08/08/13 10:25:32
>>317
うんまあそうなんだけどユーザーが無許可で作ったアプリケーションかスクリプトで
接続してくるのを防げないかな。
322:NAME IS NULL
08/08/13 14:25:06
>>318
SqlParameterのサイズかデータタイプが間違っている可能性もあるな。
その部分をさらせ。
323:NAME IS NULL
08/08/13 16:30:41
>>321
Windows認証なんて使うからだろ
324:NAME IS NULL
08/08/14 01:08:19 m4R6Ogem
>>319
>>320
>>322
遅くなりました。
あれからテーブルやDataSetを作りなおしたり、
色々試していたらちゃんと登録されるようになりました。
結局、根本の原因がわかっていないので
少し怖いのですがとりあえず解決ってことで・・。
325:NAME IS NULL
08/08/14 07:39:13 1s/mhNXs
Expressのダウンロードページは入り口のバナーだけ2008になっているけど、
なかにはいると2005のままだな。
326:NAME IS NULL
08/08/14 09:22:07
>>323
SQL認証の方が危ないだろ。
>>321
SQL Server Management Studioで、[セキュリティ]-[ログイン]で当該ユーザーに対して、
適切なアクセス権を設定すればいいと思うけど。
327:NAME IS NULL
08/08/14 11:47:02
>>326
>>322
328:NAME IS NULL
08/08/14 11:47:59
>>326
>>321
まちがえた。
329:NAME IS NULL
08/08/14 12:01:16
>>326
同一のクライアント端末で、あるプログラムからの接続は許可し、それ以外のプログラム
からの接続は拒否する。これをWindows認証でどういうアクセス権を設定すれば
実現できるの?
330:NAME IS NULL
08/08/14 12:46:04
そもそも、Aというプログラムで見せるのはよくて、Bというプログラムで見せるのはダメというのが間違いなんじゃない?
というか、元発言者の意味が不明。
接続と一言で言っても、SQLの管理権限なのかデータベース単位の書き込み権限なのかテーブルの読み取り権限なのかさっぱりわからないじゃないか。
前提がわからなきゃ、Windows認証もSQL Server認証もへったくれもない。
331:NAME IS NULL
08/08/14 13:18:25
326だけど、「無許可で作ったプロシジャ」と勘違いしていた。
>>326は無かったことに。 m(_ _)m ペコリ
332:NAME IS NULL
08/08/14 14:20:15
>>330
各ユーザーにAdministrator権限が設定されていて、
SQL Serverに接続できてしまうというオチだったりして。
333:326
08/08/14 14:31:46
悔しかったんで、>>321への対応策を考えてみた。
SQL Server 2005 SP2以降からログオントリガが設定できるようになったんで、
ログオントリガ中でAPP_NAME()が返す内容を調べ、許可されたアプリ以外だったら
ログオンを拒否する事で対策は可能。
ただ、変にこんな仕組みを組み込んじゃうとトラブルの元になるから
オススメはしない。
ログオントリガについては、以下を参照。
URLリンク(msdn.microsoft.com)
334:NAME IS NULL
08/08/14 15:02:29
>>329
アプリケーションロールで解決できないかい?
URLリンク(msdn.microsoft.com)
335:NAME IS NULL
08/08/14 15:41:41
>>330
2層システムでのDB単位の読み書き削除権限だと思うが。
ていうかAは自分で書いたもので、Bは悪意を持った内部の
ユーザーが書いたものと言えば理解できるのか?
336:NAME IS NULL
08/08/14 15:49:31
>>334
なんかこれが正解っぽいけど、ADO.NETで自動コード生成できなくね?
ていうか別にこれならSQL Server認証でも同じじゃね?
337:NAME IS NULL
08/08/14 20:00:19
質問です。かなり困ってます。携帯からなので改行変だったらすいません。
SQL SERVER 2005 を使ってローカルサーバーのデータベースに接続してるんだけど
データベースの名前を変更してしまったので
SQL SERVER自体にログインできなくなりました。
コマンドプロンプト上で元の名前に戻すことは可能でしょうか。
コマンドプロンプト上じゃなくても何でもいいです。
3時間調べたのにサッパリわかりません。
誰か助けて下さい。お願いします。
338:NAME IS NULL
08/08/14 21:00:00
>>329
つアプリケーション巻
339:初心者
08/08/14 21:00:35 vu4PdX5p
すみません。SQLサーバーの本をよみはじめてものなんですが
ストアドで、AS まえ(ヘッダー)に変数を定義するものと、AS以降の中で
変数を定義するものの使い方の違いはなにがあるか教えてください
340:NAME IS NULL
08/08/14 22:36:50
>333
接続元のアプリから接続文字列のアプリ名を入れちゃえば好きなようにアプリ名を設定できるわけだが。
既存のアプリと同じアプリ名を名乗られてアウトになると思うよ。
341:NAME IS NULL
08/08/14 22:53:58
>>337
コマンドプロンプトからだったら、osqlコマンドがあるからシステム管理者でログインして
ALTER DATABASEでデータベース名変更。
あと、デタッチして新しいデータベース名でアタッチする方法もあるか。
というより、Management Studioでシステム管理者として接続してGUIで変更した方が早いけど。
システム管理者の権限があれば(データベースの名前を変えても)SQL Serverに接続できると
思うけど、何をどうしたの?
342:NAME IS NULL
08/08/14 23:01:44
windows認証にこだわる理由が分からんな
343:NAME IS NULL
08/08/14 23:15:07
>>342
Active Directoryと統合できるじゃん。(=パスワードポリシー等も統合できる)
あと、SQL Server 2005では改善されたけど、SQL Server 2000まではアカウントポリシーも
設定できなかったし。
余程、レガシーなアプリケーションを使っていない限り、Windows認証を使うべきだと思うけど。
344:NAME IS NULL
08/08/14 23:35:37
管理面倒だからWindows認証使わせてないけど
345:NAME IS NULL
08/08/14 23:41:06
>>341
ありがとうございます。
ローカルサーバーにAという名前のデータベースがあったのですが、間違えて名前をBに変えてしまいました。
そしたらSQL SERVERに接続出来なくなりました。
Aという名前で接続してたときと同じログイン名とパスワードを使用したら
localhostに接続出来ません。ユーザーの既定のデータベースを開けません。
ログインに失敗しました。ユーザー"(ユーザー名です)" はログイン出来ませんでした。
microsoft SQL server エラー4064
というエラーが出ました。
そのAというデータベースは違うユーザー権限で作成してありますが
ずっとシステム管理者の権限で接続していました。
マイクロソフトサポートのページを参考に下記をコマンドプロンプトで試しました。
sqlcmd -S InstanceName -d master -U SQLLogin -P Password
注 : InstanceName には、接続先の SQL Server 2005 インスタンスの名前が入ります。SQLLogin には、既定のデータベースが削除されている SQL Server ログイン名が入ります。Password には、SQL Server ログインのパスワードが入ります。
3. sqlcmd プロンプトで次の行を入力し、Enter キーを押します。
ALTER LOGIN SQLLogin WITH DEFAULT_DATABASE = AvailDBName(←ここをデータベースBに変更)
注 : AvailDBName には、SQL Server ログインでアクセスできる、そのインスタンス内の既存のデータベースの名前が入ります。
4. sqlcmd プロンプトで GO と入力し、Enter キーを押します。
これを試してBというデータベースに接続(?)はできたのですが名前の変え方が分かりません・・。
この方法自体が間違っているのでしょうか。
Management Studioでの変更の方法の方が簡単ならそちらのがいいのですが
詳しく教えていただけないでしょうか。長文すいません。
346:NAME IS NULL
08/08/14 23:48:47
>>345
Management Studioにシステム管理者の権限(sa、もしくはAdministrator権限)を持ったユーザーで接続して、
[データベース]ツリーを展開して、当該のデータベースで右クリックして[名前の変更]を
実行するだけだけど。
あと、名前を変更した後、[セキュリティ]-[ログイン]のプロパティで[規定のデータベース]の
変更するのを忘れないようにね。
347:NAME IS NULL
08/08/14 23:53:32
ちなみにクエリーでの変更方法は以下の通り。
alter database 旧データベース名 modify name = 新データベース名
348:NAME IS NULL
08/08/15 00:09:25
>>346 >>347
SQL SERVER自体(むしろDBそのものを)全然使ったことがないのでManagement Studioは触ったこともなく・・
なので347の方法でやった方が簡単っぽいですね。なんとなくですが。
コマンドプロンプトで
alter database 旧データベース名 modify name = 新データベース名
と打てばいいのでしょうか。
その前に345で書いた(4. sqlcmd プロンプトで GO と入力し、Enter キーを押します。 )
までを実行した後に alter database 旧データベース名 modify name = 新データベース名 を打てばいいのでしょうか。
馬鹿な質問を何度もすいません。
349:NAME IS NULL
08/08/15 09:20:19
348ですがマネージメントスタジオでデータベースを変えていました。。どうしよう。
350:NAME IS NULL
08/08/15 10:12:50 XhgDq30d
>>349
何をどう変えたのか 落ち着いて書かないと、だれも反応出来ないぞ
351:NAME IS NULL
08/08/15 15:37:07
>>343
マイクロソフトの宣伝文句そのままやんけ
352:NAME IS NULL
08/08/16 04:42:24 tVj6/05A
URLリンク(nobumatsu.cocolog-nifty.com)
より
-----------------------------------------------------
ちなみに、SQL Server 2005はバグフィックスが全くなかった
信頼性の高い製品だということはご存じの方も多いと思いますが、
-----------------------------------------------------
このblog捏造にも程があるだろ!バグだらけじゃねーかよ。
明らかに前バージョン(2000)より酷い。
353:bcp
08/08/16 07:33:06
まあ、SP2 + その後の修正モジュールまで出てるのに、
バグフィックス "0" はないわな。
ただ、2000 より酷いか?
おれは、2000 の方が相当酷かったと思うが。
354:NAME IS NULL
08/08/16 07:39:22
ACCESSのMDBにエクスポート、インポートでエラー出まくりという時点で2000以下。
355:NAME IS NULL
08/08/16 11:08:23 tVj6/05A
>354
それのせいでACCESSほとんど使わなくなったなぁ。
356:NAME IS NULL
08/08/16 15:28:41
>354
やっぱあれって2005の不具合だったんだ…
357:NAME IS NULL
08/08/16 22:12:07
使用メモリ増えたら普通に落ちるしな
358:NAME IS NULL
08/08/17 19:45:03 SfEuPb5O
SQL SERVER 7.0 を使用してテープバックアップとファイルバックを
行っていたのですが、テープドライブを交換した後にオンラインバックアップが
機能せずにDBの応答が止まるようになりました。
テープでのバックアップはもちろん、ファイルでのバックアップの時でさえ
DBへアクセスできなくなります。バックアップが終了するとDBへアクセスできます。
所謂、アクティブオンラインバックアップが機能していないと思われますが、
設定で元に戻すことは可能でしょうか?
何か改善する良い方法はありませんでしょうか?
359:NAME IS NULL
08/08/19 16:18:13
2005から2008にバージョンアップする際の、機能の比較表等は
Microsoftから出されてたりするでしょうか。
バージョンアップの際のチェックリストを作成するにあたって、
比較対象となる資料を探していますがなかなか出てこないので…
2005からのマイナーチェンジ版という位置づけであれば、
単に移行した中身の確認で済みそうですが…何か注意するポイントはありますか?
長分で申し訳ありませんがご教授ください。
360:NAME IS NULL
08/08/19 17:41:56
ここで聞くより、MSのホームパージ行った方が早いし情報が多いし正確。
日程が許せばセミナーに参加することもできるし。
URLリンク(www.microsoft.com)
361:NAME IS NULL
08/08/21 20:18:08
初心者の質問ですが、もしも知っている方がいたら教えてください。
sql server 2005 developer edition って、テストか運用かという概念的な制限が
あるだけで、物理的な制限はまったくないのでしょうか?
たとえば「○人以上がアクセスしに行くと読めなくなる」とか。
362:NAME IS NULL
08/08/21 22:30:19
ないよ。EEと同じ。
363:NAME IS NULL
08/08/21 23:08:45
テーブル定義書をさっくり出力してくれるツールってないもんかのお。
できればカラムの備考なんかも出力してくれるとうれしいんだが
364:NAME IS NULL
08/08/21 23:23:14
>>361
じゃあ、社内や身内で使うシステムなんかだと、こっそり
Developer使っている所もありそうだな。
あと弱小レンタルサーバ業者とか。
365:NAME IS NULL
08/08/21 23:49:27
ねえよ。
366:NAME IS NULL
08/08/22 00:02:53
>363
Visioでテーブル定義を管理してそこからマクロで出力できたりしないかと
頑張ってみたけどマクロから取得できない部分が結構あったり
設定がちょっと変わったりするといろいろデフォルト値とか飛んだりして細かい融通が利かなくて中途半端で使えなかった。
結局直接DBを読み込んで好みのフォーマットのxlsに出力できるツールを自前で作って使ってる。
367:NAME IS NULL
08/08/22 07:12:35
>>363
ObjectBrowser ER4ってそんな機能なかったっけ?
368:NAME IS NULL
08/08/22 11:21:29
>>364
実装評価中ですと言えば使えるなw>Dev
369:NAME IS NULL
08/08/22 18:53:46
>>361
通報しますた
370:NAME IS NULL
08/08/22 19:24:51
>>366
あれ? Visioでデータベースのリバースエンジニアリングでできなかった?
371:NAME IS NULL
08/08/22 22:10:53
>>366
なるほどのお。俺も結局自分で書くことにした。
とりあえず必要なデータを取得するとこまでできた。
まあがんばってみるわ。さんくす
372:bcp
08/08/22 22:51:02
>>370
できるお。
ただ、各カラムの備考まででたっけ?
373:366
08/08/23 00:24:34
>370
出来るんだけどマクロで備考とか外部キーとか取り出せなかったと思うよ。あまりにも中途半端だった。
これを元にテーブルに対応したクラスのソースを自動生成とかしたかったのに。
てっきり全部取り出せるものかと思って少ないサンプルをいろいろ試したけど時間の無駄だった。
374:NAME IS NULL
08/08/25 11:28:42
ストアドの結果をカーソルで取得することって
できるでしょうか?
イメージ的には下記なのですが・・・
DECLARE curHoge CURSOR FOR
EXEC sp_hoge
375:NAME IS NULL
08/08/25 21:38:47
>>374
INSERT INTO hoge EXEC sp_hoge
みたいに、ストアドプロシージャの結果を既存のテーブルにINSERTした後で
カーソルを使って読み込むってのはどう?
376:NAME IS NULL
08/08/26 02:27:12
SQL Server 2008 Express Edition って 4GB 制限なくなったの?
URLリンク(msdn.microsoft.com)
特に記載がないのだけれど
377:NAME IS NULL
08/08/26 15:11:07
DBから定義書出すなら
CSEって言うツール(ベクターとかにある)を使うと良いかも
ちょっと古くておもにOracle用に作ってあるんだが
SQLSERVERにもODBC接続できる
EXCELに定義書が出力されて
肩とかがちょっと違う名前で出されるんだけどその辺は手作業で修正
378:NAME IS NULL
08/08/26 20:06:53
>>376
URLリンク(www.microsoft.com)
ここみたら4GB制限あるみたいだよ
379:NAME IS NULL
08/08/26 20:34:28
>>378
ありがと!
有償のパッケージソフトでExpressを使ってるのが多いんだけど、
例えば Search Server とかだと4GBってすぐいっちゃうんだよね。
毎度CPUライセンス買うのも何だし、CALはもっと高いし…。
380:NAME IS NULL
08/08/26 23:19:07 WgF1x9pf
Microsoft SQL Server 2008 Express with Advanced Services
URLリンク(www.microsoft.com)
このwithAdvanceServiceだけ、
ファイル名 : SQLEXPRADV_x64_JPN.exe
と64ビット版のファイル?しかダウソできない
(無印ExpressとWithToolは32版と64版がある)んだが、
これは32ビット用も含まれてるの?
もうインスコした人いる?
381:NAME IS NULL
08/08/26 23:56:37
2008入れたらうまく動かなくてアンインストールしたらVSとの連携が破壊された
って聞いてからびびって人柱の報告待ちでつ
382:NAME IS NULL
08/08/27 00:13:35
>>380
試したけど、含んでいなかったよ
383:NAME IS NULL
08/08/27 00:23:20
>>382
サンクス
てか他の言語だとx86とx64に別れてるな・・・
なにやってんだMSJapan
384:NAME IS NULL
08/08/27 03:20:17
>>383
直リン探してみたらあった。ちょっと怖いがので、Virtual PC に入れてみることにする。
URLリンク(download.microsoft.com)
385:NAME IS NULL
08/08/27 19:24:05
セーフモードで起動しているときにSQL Serverのフォルダ名を変えてしまい、
通常起動したら接続できなくなってしまいました。
後でフォルダ名を元に戻したのですがそれでも接続できず・・。
こういう場合修復する方法はあるでしょうか?
386:NAME IS NULL
08/08/27 21:58:23
サービスは上がってんのか?
387:NAME IS NULL
08/08/27 22:03:58
>>385
SQL Serverが起動できていないのなら、イベントビューアのシステムログに記録されているはず。
>>386にも書かれているけど、まずSQL Serverのサービスが起動しているか確認すべき。
SQL Serverが起動しているかしていないかで、今後の対応が変わってくるから、
とりあえずは、その辺りを確認してみて。
388:NAME IS NULL
08/08/28 09:41:38 qu30JBOu
2008 Express インストした人に質問
Management Studio Express からもストアドのdebugできるようになった?
#クライアントの部分入れ替えようかな・・・と
#いま テスト環境作れなくって
389:385
08/08/28 12:07:34
イベントビューアを見てみたら、サービス固有エラー 17058で停止してました。
「サービスとアプリケーション」から起動させて見ましたがやはり同じエラーで
とまってしまいました。
MSのHPには"ログ ファイル '%s' を開けませんでした。"という意味みたいですが
・・・再インストールしたほうがいいのかなぁ。
390:NAME IS NULL
08/08/28 19:51:18
>>389
どのログファイルが開けないの?
これだと、システムデータベースのログかユーザーデータベースのログか判らないから。
SQL Serverのエラーログは、
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG
にエラーログが記録されていると思うから参照してみて。
SQL Serverの起動オプションでなんとかなる場合もあるから。
もし再インストールするのなら、ユーザーデータベースの*.mdfと*.ldfだけはコピーしておいてね。
後でアタッチすれば戻るはずだから。(ただ、ログファイルが開けませんでした、というメッセージが気になるけど)
391:NAME IS NULL
08/08/28 23:53:49 xlOS+FEs
SQL Server 2005 Developer Editionを使用しています。
社内サーバー(Windows2003server)に、複数ユーザーの環境(DB)が同居
しており、その為インスタンスを増やしております。
サーバー内のDB(名前付インスタンス:SQLEXPRESS)に自分のPCから
ManagementStudioでアクセスすると、「リモート接続が許可されていない」
というエラーになります。
ただし、既定のインスタンスのDBへは特に問題なくアクセスできます。
設定内容は以下の通りです。どなたか対処方法を教えてください。
・サーバー名:IP→接続可/IP\SQLEXPRESS→接続不可
・SQLBrowser→サービス開始
・ネットワーク構成:TCP/IP→有効化済
・全てのインスタンスにおいて「ローカル接続およびリモート接続」を選択
しており、「TCP/IPおよび名前付パイプを使用する」も選択しています。
392:NAME IS NULL
08/08/29 05:13:24
>>391
ファイアウォールの構成は?
SQL Server Browser を使うなら UDP 1434 を空けて、
名前付きインスタンスの sqlservr.exe をプログラムの例外に追加する必要があるよ。
URLリンク(support.microsoft.com)
URLリンク(msdn.microsoft.com)
SQL Server Browser を使わない場合は、
名前付きインスタンスを動的ポートから固定ポートに変更して、そのポートを空ける。
URLリンク(www.atmarkit.co.jp)
接続には「tcp:<コンピュータ名>\<インスタンス名>, <ポート番号>」の接続文字列を使うこと。
393:385
08/08/29 18:09:34
>>390
ありがとう。そのあたりを調べてみます。
394:NAME IS NULL
08/09/01 09:48:48
自分はUDP1434決め打ちじゃなくて sqlbrowser.exe を例外に追加してる
395:NAME IS NULL
08/09/02 19:46:26
2008には前みたいな専用の管理ツールついてないのかな。
Express入れたはいいけど管理ツールがついてなくて弄れない。
VS2008からまあ触れるんだけど、ManagementStudioの2008版ってExpressにはないのかな?
396:NAME IS NULL
08/09/02 21:32:22
これじゃダメ?
SQL Server 2008 Express with Tools
URLリンク(www.microsoft.com)
397:NAME IS NULL
08/09/02 22:08:30
URLリンク(www.microsoft.com)
の北川さんのセミナーどうだった。
この人は日本オラクルのデータベースの製品責任者だったよな。
398:NAME IS NULL
08/09/03 10:05:39
SQLServer2005で検索のSQLを流すと検索結果件数がほぼ同じ150件程度なのに
XXX Like '%aaa%' and XXX Like '%bbb%' と
XXX Like '%ccc%' and XXX Like '%eee%' では (aaa bbb ccc ddd は説明上として)
検索の時間に大きな差がでてしまう orz
原因がわからない orz
10倍近く時間がかかるけど
399:NAME IS NULL
08/09/03 10:30:52
>>398
実行計画って両方同じか?
400:NAME IS NULL
08/09/03 11:08:39
>>398
それ以前に'%aaa%'みたいな書き方だとインデックスが効かないからね。
前回に実行したレコードの結果がキャッシュにあったからとか。
401:NAME IS NULL
08/09/03 13:15:35
Like検索は遅いよね
フルテキストインデックスもいまいち使えないし
ナマズ検索とか入れてみようかな?
402:NAME IS NULL
08/09/03 15:00:03
>>401
前方一致ならインデックスが効くから速いんだけどね。
後方一致でも、REVERSE関数でインデックスを効かせるという裏技もあるんだけど、
中間一致はインデックスが効かないから。
TechEDでPassJのBoFに参加したんだけど、SQL Server 2008のフルテキストインデックスは
なんとか使い物になるらしいけど、どうなんだろ?
403:NAME IS NULL
08/09/03 23:34:07 rUAiPbPY
SP2の累積更新パッケージってもう10までいってるんだな。
どんだけバグってるんだよ。SP2以降のバグまとめサイトとかないのか?
404:NAME IS NULL
08/09/04 10:03:38
>>403
いっそのこと2008にしてしまうっていうのはどうだ?
累積バグはほぼ解決されているだろうし。
405:NAME IS NULL
08/09/04 20:47:02
SQL Server 2005 Compact Edition って、リモートPCからアクセスできますか?
406:NAME IS NULL
08/09/04 21:38:19 m0oEq6NU
>404
新規機能以外は安定動作すると信じたいが、
2008はジャーバージョンUPなんだからSP1が出るまでは様子見だろ
407:NAME IS NULL
08/09/05 01:16:46
>>406
そんな事言ってたらいつまでたっても使えないorz
408:NAME IS NULL
08/09/06 09:20:57
>>406
つか、実際にはマイナーバージョンアップみたいなもんだから大丈夫じゃね?
新機能以外は。
409:bcp
08/09/06 17:12:24
>>405
なんで Compact Edition なの?
410:名無しさん@ゴーゴーゴーゴー!
08/09/06 18:23:38
どなたか、WindowsVistaで無料で使えるSQLServerを教えてください(MS)
EnterpriseManagerがあるもので><
SQL2005のあたりでしょうけど
411:NAME IS NULL
08/09/06 20:55:29 TEM3Zsb9
ExpressEditionは? SQL Server Management Studio しかないけどね
2000までじゃないのかな?>EnterpriseManager
412:NAME IS NULL
08/09/06 21:57:48 izhmgg+/
あ、レスありがとうございます
ExpressEdition SP2と
SSMSEE SP2とで、なんとかEnterpriseManagerの代用はできるみたいです
SP2=Vistaでも使える
今から、データーベースなどを入れて動くかどうか試します(*´ω`)
413:NAME IS NULL
08/09/06 22:39:27
2008でもある
414:NAME IS NULL
08/09/07 00:13:58 8QjXdBnk
SQLServer Management Studioには
Server2000の無償版のような、SQLServer エージェントの機能はないんでしょうか?
別の方法でエージェント機能が使えるならそちらでもいいのですが;;
415:NAME IS NULL
08/09/07 00:31:26
何から何までここで聞く気か?
416:NAME IS NULL
08/09/07 01:36:13 8QjXdBnk
すみません
なにやらVistaでSQLServer2000が動くと言っている人がいるのですが
実際、動かすことできるんでしょうか?
私の経験ではできなかった気がするのですが・・・(´・ω・`)
417:NAME IS NULL
08/09/07 02:04:00
その話が>>414 の質問とどう繋がるんだよ。
私の経験とか言うな
418:NAME IS NULL
08/09/07 03:06:30 8QjXdBnk
>>417
?|ω・`) 落ち着いて下さい
皆様助言ありがとうございます。無事アプリケーションを動かす事ができました
私が414でいったことは
SQLServer2005/2008 ExpressEditionにはSQLServer Agenは付属しておらず
別途、この機能をあくまでも無料の範囲で実現できるものかとお伺いした所存でございます
Developerを買えと煽られればそれまでの所でございますが
無償版で、詰まるところお金を使わずにどこまでいけるものなのかという話でした
結局、5000円程度払えばすむ話だったのもありますが
SQLServer2000を入れることで解決しました(Vistaでも強制的に入れれる模様)
これから、同じ事を考える人のために一応お書きしました
尚、SQLServer2000は やはりセキュリティー面で脆弱な為
不安な方は2008 Developer版をお勧めします。
皆様ありがとうございました
419:NAME IS NULL
08/09/07 08:48:02
落ち着いてくださいにわろた
420:NAME IS NULL
08/09/07 09:31:57 qU/73or3
EX版は機能制限が多いからしょうがないね
仕事で使うなら、後々のこと考えると2005/2008で評価しとかないと と思う
#大きなお世話w
421:NAME IS NULL
08/09/07 10:24:30
そもそもエージェントの機能って使うかや?
422:NAME IS NULL
08/09/07 10:39:45
自動メンテとか、ミラーリングの監視とか。
ほとんどOSのタスクスケジューラで代用できるから、
そのためだけに2000を使うとか馬(ry
423:NAME IS NULL
08/09/07 20:15:16 s+5Pmz84
SQL Server2000をPCに入れたいんですが、どうしたらよいでしょうか?
あるソフトを起動させたいのですが、そのソフトはNET Framework1.1とSQL Serverを入れないといけないらしいです。
どなたか解説してくれる人はいませんでしょうか??
すいません初心者なんで
424:NAME IS NULL
08/09/07 20:19:52
ソフト名伏せてちゃどんな設定で入れたいのかわかんねえよ。
そのソフトの導入手順書読めよ。
425:NAME IS NULL
08/09/07 20:26:50 s+5Pmz84
すいません
AISっていうソフトです。
そのソフトの導入手順書には
SQL Server2000(ver8.00.760以上)をインストールしてくださいとしか書いてありません
426:NAME IS NULL
08/09/07 20:48:18
DBとAISは別のPCに入れるの?
持ってるSQL ServerはStandard?
AISって何するソフト?
もしふつうのパッケージソフトでなければ当然誰もわからんからベンダに
聞くか、お仕事だったら情報システム部にでも聞いたほうがいいよ。
SQL Server入れるだけならインストーラ動かすだけなので特に難しい
ところはない。つまるとすればサービスアカウントと認証モードのあたり
だが、こればっかりは手順書に指定がないのならAISとやらを作った
ベンダにしかわからない。
427:bcp
08/09/07 22:41:19
> ver8.00.760以上
SQL-Server 2000 入れて、SP3 以上 (最新は SP4 かな?) を当てればいい。
つーか、>>426 も書いてる通りその導入手順書書いた所に問い合わせた方がいい。
428:NAME IS NULL
08/09/08 22:45:12
エンプラ2000とMSDE2000で
スケジュールバックアップやってたんだけど
同じ機能って2005にもある?
スタジオじゃそれらしい項目見あたらなかったんだが
429:NAME IS NULL
08/09/09 00:22:21
オレオレ略語でまくしたてる人ってきもいな。
430:NAME IS NULL
08/09/09 09:35:26 /zqMJM+Y
>>428
機能比較表くらいは嫁よぉ
431:NAME IS NULL
08/09/09 10:52:18
SQLエージェントがなければWindowsタスクを使えばいいじゃないか。
ところで、日立って何でもかんでもJP1を勧めてくるの?
必要な人には必要なんだろうけど、SQL Serverのエージェントで十分だと思うんだが。
432:NAME IS NULL
08/09/10 00:31:04
JP1は監視中のログファイルをつかみっぱなしにするので
ログファイルを一定サイズとかでリネームしたりして
切り替えていくことが出来なくて困った記憶が。
今でもログは肥大化し続けているというか…
433:NAME IS NULL
08/09/11 00:34:04
すまん、教えてくれ。
おまえらエージェントって何に使ってんだ?
434:NAME IS NULL
08/09/11 10:15:31 P/HcnLlc
時間指定でバッチを流す場合じゃない?
#使ったことないけどw
435:NAME IS NULL
08/09/11 14:23:47
ストアドで質問です。
動的にテーブルを作成する。
ストアドが作りたいのですが、できません。
仕様はあるファイルからテーブルの列、型、文字数を取得して、
ストアドにパラメータを渡して自動的にテーブルを作成するプログラムです。
問題は列の数は(1~n)で可変です。
ストアドに渡すパラメータは可変にすることは出来るのでしょうか?
例
EXEC CreateTable ’項目(配列)’ ’文字数(配列)’ ’型名(配列)’
見たいにできませんか?
436:NAME IS NULL
08/09/11 17:21:38
>>435
CURSOR使えば出来んじゃね?
437:NAME IS NULL
08/09/12 13:53:37
>>396
返事遅くなって申し訳ない。
IP制限で全然入れなくて・・・
それで早速それを入れてみたんだけど、管理ツールらしきもののインストールが見つからなかった。
レプリケーションとかに関してや、ヘルプがどうとかはあったんだけど。
インストール関係の専用ウィンドウがでるけど
その左ペインにあるインストールの項目を選んでも、本体のインストールかレプリケーション自体しか項目がなかった。
一体どれが管理ツールなのかな・・・
438:NAME IS NULL
08/09/12 13:58:50
>>437
Management Studioというのは見つからなかったかい?
439:NAME IS NULL
08/09/12 14:36:42
このSQL Serverを自宅のパソコンで少し勉強してみたいのですが、
XPで無償版をインストールして勉強だけはできるのでしょうか?
440:NAME IS NULL
08/09/12 21:00:01
勉強できるかどうか勉強しろ
441:bcp
08/09/12 21:30:15
無償なんだから入れてみればいいのに...。
上にも誰か書いてたように認証モードとか辺りでつまづくかもしれない
けど、それも勉強のうちだ。
どうしてもわからんならやったことと結果をきちんとこのスレに書けば、
誰かが助けてくれる... かも知れない。
442:NAME IS NULL
08/09/13 14:58:12 PTrJ4U+T
普通に使う分にはいいんじゃ無い
後は赤本かビギナーズガイド見ればいいんじゃないかな?
#2008版はまだ出てないけどね
443:NAME IS NULL
08/09/13 18:57:40
自宅のパソコン 2台の一方(XP Pro)にSQL Server、
もう一方(Vista)にManagement Studioを入れたんだけど
SQL Server認証でならログインできるのに
Windows認証でできない。
どこを設定すればいいのでしょうか?
444:443
08/09/13 19:14:02
自己解決
新しいログインで「NT AUTHORITY\NETWORK」を作った。
両方のパソコンに同じアカウントを作るだけじゃダメなのか・・・
スレ汚しスマソ。
445:NAME IS NULL
08/09/14 00:09:51 6q39VD8B
>>442
2008の本はもう出版されています。
情報遅すぎ。
446:NAME IS NULL
08/09/14 01:59:15
何コイツ(笑)
447:NAME IS NULL
08/09/14 22:21:51
詳しい方、教えてください。
例えば、
INSERT INTO 高額商品表 SELECT DISTINCT 商品名 FROM 価格表 WHERE 単価 >= 10000
みたいな感じで複数レコードを抽出して高額商品テーブルに挿入したいのですが、
高額商品テーブルの商品名列に一意制約指定しています。
一意制約違反とならないレコードのみ高額商品テーブルに挿入するためのSQLは
どのように書けばよろしいでしょうか?
448:NAME IS NULL
08/09/14 22:38:43
>>447
商品名が一意制約ってのはどうかとは思うが、、、
INSERT INTO 高額商品表
SELECT DISTINCT 商品名
FROM 価格表
WHERE 単価 >= 10000
AND 商品名 NOT IN(SELECT 商品名 FROM 高額商品表)
449:NAME IS NULL
08/09/14 22:50:21
>>447
同一の商品名で、顧客ごとに価格が変わる事はよくあることだと思うので、
DB設計者に一言確認した方がいいと思う。
450:NAME IS NULL
08/09/14 22:54:33
エラーが出なくなったからおk、
コンパイル通ったからおk、
みたいな人いるよなー。
451:NAME IS NULL
08/09/14 22:57:50
早速の回答ありがとうございます。
例では単純に書いてしまったのですが、実際は1レコード単位で商品名列が
3つに分割されています。
商品名1、商品名2、商品名3で商品名3がユニーク列です。
この場合に、商品名1~3と単価を高額商品表に挿入する場合は、どのように
書けばよいでしょうか?
452:NAME IS NULL
08/09/14 23:12:43
>>451
>>447の例もそうなんだけどさ、
テーブルである必要性がわからん。
単価が固定であればビュー、可変ならストアドで充分じゃね?
可変で別にSELECTしたいってんなら、テーブル関数ってのもあるし。
なんでテーブル?
453:NAME IS NULL
08/09/14 23:20:23
抽出された高額商品表をマスタ的な使い方します。
高額商品表に抽出されたレコードに各種情報を付加し、
価格表のレコードを付加情報を付けた状態にアップデートしたいのです。
454:NAME IS NULL
08/09/14 23:27:21
>>453
その一連の流れの中で飲み使うのであれば、
ストアド内でテーブル変数使ったほうが楽じゃないかな?
455:NAME IS NULL
08/09/14 23:27:31
ちょっとは自分で考えろよ。危うい感じがするなー。
ていうか、付加情報を別テーブルにして高額商品ビューと結合とかすればいいやん。
456:bcp
08/09/14 23:58:53
俺も危うい感じがするなぁ~。
そもそも
> 一意制約違反とならないレコードのみ高額商品テーブルに挿入するためのSQLは
で、違反となる奴はホントに処理しなくていいんか?
なんか、マジで >>450 みたいに思ってそうで怖い。
457:NAME IS NULL
08/09/15 09:07:51
制約違反となるものは最初1件とか条件があるんだと思うよ。
INSERT,SELECT文 一発では行わず、
カーソル付きSELECT文で対象レコードを取得して
WHILEループで制約違反にならないように
INSERTしていくという方法もあるよ。
458:NAME IS NULL
08/09/15 23:46:08
そうです、最初の一件目で制約違反で止まります。
カーソルについて勉強してみます。どうもありがとう。
459:NAME IS NULL
08/09/16 01:25:44
VB2008+SQL Server 2005 Express を使用して業務アプリを開発しています。
サーバーなどはたてずに、mdfファイルは配布しようとしています。
その場合、Management Studioなどでmdfの中身(ストアドなど)を参照する事が可能だと
思うのですが、それをできないようにする方法はあるでしょうか?
開発者以外にはストアドを参照させたくないのです。
よろしくお願い致します。
460:NAME IS NULL
08/09/16 10:11:38
>>459
>サーバーなどはたてずに、mdfファイルは配布しようとしています。
これってcompactになるんじゃないの?
っつ~かAccessをぶち込んでも変わらない気がするんだけど、パスワードかけておけばいいのでは?
…ただどっちにしてもReflector for .NETで気合い入れて見ていけばわかるというオチがw
461:NAME IS NULL
08/09/16 20:17:28
SQL Server 2008のManagement Studioで、2005にはあった、
利用状況モニター>プロセスによるロックってどこにいったの?
462:NAME IS NULL
08/09/16 21:32:37
>>461
今俺の横で寝てる
463:NAME IS NULL
08/09/16 22:19:33
>>461
まだ見つけられないの?(^.^)
464:NAME IS NULL
08/09/17 00:57:45
>>460
回答ありがとうございます!
>これってcompactになるんじゃないの?
すみません、ストアド資産を流用したかったのでcompactにしてないです(^_^;
パスワードはデータベースに対して設定することができるのでしょうか?
できるのであればとりあえずそれで対処したいのですが…
465:NAME IS NULL
08/09/17 01:09:48
まさか寝てないよな?
書き逃げか?(^.^)
466:NAME IS NULL
08/09/18 21:36:10
GUIDを格納するカラムに、初期値を設定したいのですが、マネージメントスタジオで
何を入力すれば良いのでしょうか?
データ型がuniqueidentifierのカラムの「規定値またはバインド」にどう設定したら、
初期値を00000000-0000-0000-0000-000000000000に出来るのでしょうか?
467:NAME IS NULL
08/09/18 22:42:57
SQLServer2005でCSVファイルをインポートしたいのですが、
エラー発生時にロールバックしないようにするにはどうすればいいのでしょうか?
468:NAME IS NULL
08/09/19 08:30:27
('00000000-0000-0000-0000-000000000000')でした
469:NAME IS NULL
08/09/24 01:09:26
質問させてください。
↓こんなストアド作ったんですけど、ほとんどは正常な値で帰ってくるけど、30回に一回ぐらい
全然違う値で帰ってきます。。。ちなみにデータ量が多いときほど顕著になる気がします。
ストアド①で一時テーブル作って、EXEで別のストアド②呼んで、元のストアド①で作った一時テーブルに処理結果を格納。
格納されたデータをストアド①で加工して結果を返す
毎回間違ったデータが帰ってくればいいんだけどたまに違う結果が出るってどういうことしょうか?
よろしくお願いします。
470:NAME IS NULL
08/09/24 02:00:14
質問の仕方からして駄目だな。
471:469
08/09/24 02:13:46
ストアドの内容がかなり間違っていました。
1.ストアド①で一時テーブルを作ってデータも格納
2.別のストアド②呼んで、元のストアド①で作った一時テーブルに対してカーソルを定義し、データを操作
して結果を①に返す
3.ストアド①に帰ってきたデータを加工して最終的なデータができる
1.で作ったテーブルの件数が少ないとうまくいくようです。
たまに誤った結果が返るってことは領域の問題なんでしょうか?
472:NAME IS NULL
08/09/24 15:34:07
質問の仕方からして駄目だな。
473:NAME IS NULL
08/09/24 16:22:24
再現性のあるミニマムのソースを出すのが早いよ
474:469
08/09/24 21:12:52
質問の仕方が悪かったですね。
今日いろいろ解析して、何とか解決しました。
2.のカーソル操作ではレコードが日時順に並んでいなければいけないのに
1.のテーブル作成で明示的にORDER BYを記述していないため、レコードの並び
順が保障されていなかったのが原因のようです。日時順のデータだったのでその
まま使っても問題ないと思っていたのが間違いのようです。
475:NAME IS NULL
08/09/26 10:15:51 cv9ybFuz
>2.のカーソル操作ではレコードが日時順に並んでいなければいけないのに
使うときにsortしないか?
476:NAME IS NULL
08/09/26 17:43:11
> 1.のテーブル作成で明示的にORDER BYを記述していないため、レコードの並び
> 順が保障されていなかったのが原因のようです。
テーブル作成時にORDER BY指定しても、読み込み時にソート順は保障されないぞ。
※SQL Server 6.5では保障されていたが、SQL Server 7.0以降で保障されなくなった。
477:NAME IS NULL
08/09/27 05:56:49 4wGR4Hje
×テーブル作成
○カーソル定義
478:469
08/09/27 11:38:49
説明が間違えていました!
2のカーソル定義時にソートすることによって解決しました。
479:NAME IS NULL
08/09/29 12:20:52
SQL-Server 2000使ってます。
DBのバックアップのダイアログで、中断のラジオボタンの下二つ、
[トランザクション ログ]と[ファイルとグループ]がDisableになっているんですが、
これはどういった条件でなるんでしょうか?
トランザクション ログのバックアップを取りたいんですけど・・・。
480:NAME IS NULL
08/09/29 12:39:35
完全バックアップは取ったの?
481:NAME IS NULL
08/09/29 12:48:14
SQL Server2000使用です。
row_nunberを使用するSQLを教えていただいたのですが、
当方2000のため、row_numberが使用できませんでした。
以下のSQLを2000で使用したいのですが、方法はありますでしょうか?
状況としては。
各ペットにはペットCDが割り振られています。
この時、各自の持っているペットCDがTOP2で取得したいです。
上記に対して、返答を頂いたSQLです。
SELECT 名前, ペットCD FROM (
SELECT row_number() over (partition by 名前 order by ペットCD)
seq, 名前, ペットCD FROM テーブル名
) x
WHERE (seq <= 2)
482:NAME IS NULL
08/09/29 13:23:48
テンポラリテーブル作ってそこにインクリメントキーのついた列を追加
ってので俺は回避したな
483:NAME IS NULL
08/09/30 01:03:15
>>480
レスありがとうございます。
>完全バックアップは取ったの?
取ってないです。
完全バックアップの実行とラジオボタンのDisableが
関係あるということでしょうか?