Microsoft SQL Server 総合スレ 6at DB
Microsoft SQL Server 総合スレ 6 - 暇つぶし2ch300: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が
関係あるということでしょうか?

484:NAME IS NULL
08/09/30 01:36:54
>>483
こことか参考になりませんか?
URLリンク(msdn.microsoft.com)
トランザクションログのバックアップを取る場合は、一旦
フルバックアップをする必要があります。


485:NAME IS NULL
08/09/30 21:37:35 K5B3Tyx1
すいません、質問です。。

SQLSERVER2005のバックアップDBを、2000に復元することは無理ですか?
なんか復元途中にエラーが出るんですが・・・

486:NAME IS NULL
08/09/30 22:06:07
データを移す目的だったらSSISとか使えばー。

487:NAME IS NULL
08/09/30 23:09:52 GcTkZg0G
SQLServer2005 Expressで質問です。
ASP.NETからDB参照するプログラムで使用しているのですが
一定時間DBにクエリが発行されていない状態で
クエリ発行を行うと

イベントID:17401
重要度:10

メッセージ
%d 秒間のアイドル状態の後、サーバーの実行が再開されました。
 サーバーはユーザー操作により起動されました。
 このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。

というログがイベントログに出力され、クエリの結果が返ってこず
エラーになってしまいます。

SQLServerには休むことなく、常に起動して仕事を行ってほしいんですが
なにか設定をすればこの現象は防げるのでしょうか。

【環境】
 ・サーバ
  Windows2003 ServerR2
 ・DB
  SQLServer2005 Express SP2
 ・ASP.NET
  VisualStudio2005で作成したモジュール




488:bcp
08/10/01 00:07:51
日本語読めないのか?

「このメッセージは情報提供だけを目的としています。ユーザー操作は不要です。」って
書いてあるだろ、エラーじゃねーよ。

クエリの結果が返らんのはお前のバグだろ、ちゃんと見直せよ。

489:自動終了=True
08/10/01 01:18:37
>>488
マニュアル嫁!には同意だけど...

490:NAME IS NULL
08/10/01 20:43:07
>>484
レスおくれてすみません。
状況的に直ちに確認することはできなくなってしまったのですが、
参考になりました。試してみます。ありがとうございました。

491:NAME IS NULL
08/10/02 14:13:12
採番テーブルを使った採番処理を SQL Server の中に仕込む必要に迫られました。
支店コード毎に採番したく、利用する側からは、F_採番(支店コード) という風にできるかな?と思い
F_採番()なるストアドファンクションを作ってみましたが、その中ではテーブルのUPDATEは出来ないとのこと。

ストアドプロシージャならば出来るのですが、
   INSERT INTO 伝票(支店コード,伝票番号) SELECT 支店コード,F_採番(支店コード) FROM 元ネタ;
みたいな芸当(一括登録とか)が出来そうにありません。

カーソルこさえて回すしかないのでしょうか。

492:NAME IS NULL
08/10/02 15:04:04
>>491
> ストアドプロシージャならば出来るのですが、
>    INSERT INTO 伝票(支店コード,伝票番号) SELECT 支店コード,F_採番(支店コード) FROM 元ネタ;
> みたいな芸当(一括登録とか)が出来そうにありません。

あれ?それで出来ると思うけど。
何かエラーが出るのならそのエラーメッセージを教えて。


493:492
08/10/02 15:06:11
ごめん理解した。
ストアドファンクション内でUPDATEが出来ないから、連番として扱えないということね。


494:NAME IS NULL
08/10/04 12:18:15 xNZqDkS6
2005ですが、主キーがあるとは限らない2つのテーブル(或いはクエリ)の
データが完全に一致するか調べたいんだが、どうやるのが簡単?
とりあえず思いつくあたりだと、
①各々ソートしてカーソルで一件づつ回して比較。

②全項目でグループ化して、グループ毎のカウントで比較。

DECLARE @A_COUNT AS INT SELECT  @A_COUNT = COUNT(*) FROM A
DECLARE @B_COUNT AS INT SELECT  @B_COUNT = COUNT(*) FROM B
IF @A_COUNT != @B_COUNT RETURN 不一致  

DECLARE @WK_COUNT AS INT
SELECT
    @WK_COUNT = SUM(件数)
FROM
(
SELECT 項目1,項目2,項目3,COUNT(*) AS 件数
FROM A
GROUP BY 項目1,項目2,項目3
INTERSECT ALL
SELECT 項目1,項目2,項目3,COUNT(*) AS 件数
FROM B
GROUP BY 項目1,項目2,項目3
) AS WK

IF @WK_COUNT = @A_COUNT * 2 BEGIN
  RETURN 一致
END ELSE BIGIN
  RETURN 不一致
END

こんな感じか?





495:NAME IS NULL
08/10/04 12:44:49
サイズが小さいテーブルならUNIONしてDISTINCTして同じ件数とかでいけそうな気がする。

496:NAME IS NULL
08/10/04 13:56:33 t3OKmBtk
テキストで書き出してDIFF

497:NAME IS NULL
08/10/04 14:25:30 xNZqDkS6
>495
それだと、
1つのテーブルにまったく同じデータが複数行ある可能性があるので、
上手くいきません…



498:NAME IS NULL
08/10/04 14:47:47 ZuEJHK9A
>>494
except

499:NAME IS NULL
08/10/04 15:41:36 g+VjDE2R
>498
テーブル1
1
1
2
テーブル2
1
2
2
としてどうやればEXCEPTで?

500:NAME IS NULL
08/10/04 19:44:41
ソートしてrow_numberつけて

501:NAME IS NULL
08/10/05 18:37:02
ご存知の方がいたら教えてください。
「MS SQL Server 2005 Express Edition」+「vb.net2005」を使用して、小規模システム構築を考えています。
(端末2、3台のクラサバシステムです)

MSのサイトで、Express Editionのメモリ使用量の制限で1GBとなっているのを見ました。
これは、OSも含めたメモリ使用量になるのでしょうか?
それとも、DB単独でのメモリ使用量になるのでしょうか?

WindowsXPにインストールしようと思っているのですが、
搭載メモリを1GBか2GBどちらにしたほうが良いかと疑問に思いました。


502:NAME IS NULL
08/10/05 19:34:38
制限4GBじゃなかったか?

503:NAME IS NULL
08/10/05 19:37:30
>>501
俺なら2GB乗せる

>>502
よく読め

504:NAME IS NULL
08/10/05 20:15:49
>>503
DB要領と勘違いしてたお^^

505:bcp
08/10/05 21:43:01
>>503 の言う通り、2GB 載せるべき。
評価用に Windows 2003 R2 + SQL Server 2005 Express Edition + 4GB
で運用してるけど、SQL Server だけで 1GB 食ってる。

506:501
08/10/07 01:30:01
皆さんありがとうございます。
SQL Server単独で1GB食うなら、OS部などを考えると搭載メモリは2GBがよさそうですね。



507:NAME IS NULL
08/10/07 06:05:10
おれなら4GB載せるけどな。

508:NAME IS NULL
08/10/07 11:26:39 rO9cgVQf
.NET2.0でSQL Server 6.5に接続したいんだが、System.Data.SqlClientって
7.0以降しか対応してないのね...orz

6.5に接続可能なプロバイダってないの?
教えてエ(ry

509:NAME IS NULL
08/10/07 12:09:22
System.Data.Odbc

510:NAME IS NULL
08/10/07 13:45:15
>>509
やっぱODBC経由しかないのかorz

ネイティブに6.5に対応したプロバイダもなさそうなので
ODBCを使うことにしますた。㌧

511:NAME IS NULL
08/10/07 18:08:57
SqlClientでもOdbcでもIDbファミリだから手順は一緒だよ。

512:NAME IS NULL
08/10/07 18:24:26
6.5は古すぎてもう忘れてしまったが、
OleDBプロバイダが使えるようならそっちの方がOdbcより親和性が高いと思う。

513:NAME IS NULL
08/10/07 18:41:49
OleDBプロバイダのサポートは7からだったようです

514:NAME IS NULL
08/10/08 03:33:48
失礼します。
bcpでデータをコピーする際、データベースにログインした状態で実行するのではなく、
普通にコマンドプロンプトで実行するのはなぜでしょうか?
1>bcp .........略.......
2>go
と最初勘違いしてやってしまいました。

515:NAME IS NULL
08/10/08 07:51:55
・バッチ書くとき楽だから。
・DB上でパースしたくないから。

516:514
08/10/08 14:20:57
>515
なるほど。たしかにバッチファイル作るとなると、そっちでないと不便ですね。
ありがとうございます。

517:NAME IS NULL
08/10/08 15:52:27
SQLCMDのT-SQLから使えるコマンドとしては
bluk insert や insert ... select * from openrowset(BULK ..) 
があり、bcpと違いロード専用。
ロードするデータはサーバー、正確にはサーバープロセスから
アクセスできるところに置く必要がある。

518:NAME IS NULL
08/10/08 21:27:40
>>501
XPをDB鯖にするのはライセンス違反だ。

519:NAME IS NULL
08/10/10 00:02:22
シーケンス使えないから糞


520:NAME IS NULL
08/10/10 13:45:19
ちょっとくだらない質問ですがお願いします。
たとえばSQL SERVER 2005で
出来ないとは思うのですが
たとえばVB.NETからSQLを発行するときにテーブルを返すタイプのストアドプロシージャは呼び出せるのでしょうか?

例:
SELECT * FROM 「1テーブルを返すストアド」 WHERE条件

それだったらストアドにパラメータを使えという話になるのですが、ちょっと気になったもので…

521:NAME IS NULL
08/10/10 14:31:39
>>520
関数じゃダメなのか?

522:NAME IS NULL
08/10/10 16:34:51
>>521
あぁっ・・・確かにおっしゃるとおりです orz


523:NAME IS NULL
08/10/10 16:52:07
SQLServer2005の全文検索はつかえないけど
SQLServer2008の全文検索はどうですか?

おとしたらisoでDVDにやけっていわれて試せてない・・・


524:NAME IS NULL
08/10/10 17:23:25
>>523
デーモンツールでも使って入れたら?

525:NAME IS NULL
08/10/10 22:19:08
>>523
2005は何で使えないんですか?え?

526:NAME IS NULL
08/10/11 00:12:01
SQL Server 2008 Express with Advanced Servicesで
ManagmentStudioからフルテキストインデックスって作れる?

なんか、うちの環境だとTransact-SQLからは作れるんだけど、
ManagmentStudioだとデータベースの中に「ストレージ」が無いし、
[フルテキスト インデックス] ダイアログ ボックスでも追加ボタンが押せなくなってる。

527:NAME IS NULL
08/10/11 01:14:17
便所の壁で仕事に関する相談かぁ

随分安っぽい仕事だな。
お客様が知ったらどんな気分だろうな。

528:NAME IS NULL
08/10/11 08:15:27
そういやこの間、この板でウチのヤツっぽい書き込み見たな。
多分、客が知っても「特定される情報がなきゃおk」で終了になるだろうけど。

529:NAME IS NULL
08/10/11 10:49:01 QblW9WIu
金もださず、時間もかけず、自ら調べようともしないで、

便所の壁に書いとけば、名無しのさんがベストな答えを出してくれるから仕事も楽々

こんな奴らに仕事を発注した会社が真っ当な賃金支払う筈ないよな

自分達の価値を貶めてる馬鹿の集いですね

530:NAME IS NULL
08/10/11 20:37:55
Windows2003 Small Business Server でSQL Server 2000 EnterPriseEditionがインストールできないのはなぜでせう

531:NAME IS NULL
08/10/11 22:20:10
>>530

1.福田のせい

2.小泉のせい

3.竹中のせい

ですね。

532:NAME IS NULL
08/10/11 23:11:37
>>531
違うよ

・麻生のせい

だよ。

533:NAME IS NULL
08/10/11 23:39:03
>>532
チッ

534:NAME IS NULL
08/10/12 02:46:22
あっそぅ

535:NAME IS NULL
08/10/12 19:14:49
>>518
501ではないが
どどどど、どのライセンスに抵触しますか?(滝汗

SQL Server 2005 Expressのライセンス条項で明示的に禁止されてる中にはOSの制限はなかった。
とはいえ、許可されてる範囲がいまいち明示されてないので断言できず、、


536:NAME IS NULL
08/10/12 19:29:22
SQL Server 2005 Expressには制限はないがOSに制限される。
XPはサーバーとして使用してはいけないが、ピア接続など一時的なものはかまわない。
その2~3台のクライアントがあるシステムがどちらに含まれるかという部分にかかっている。
定常的にクラサバとして使用するならピア接続の範囲を超えている可能性がある。

537:535
08/10/12 20:08:23
>>536
なるほどこれか
URLリンク(itpro.nikkeibp.co.jp)

なお、マイクロソフトOS別利用許諾契約まとめ(っぽいもの)↓
URLリンク(www.geocities.jp)

538:NAME IS NULL
08/10/13 03:17:04
確かバックエンドとして使っても駄目なんだよな、.NetのWebアプリから使われるとかも。
でも当然DB鯖自体は外に出ないので内部通報者でもいない限りばれっこない。
ライセンスが馬鹿げてるんだからしょうがない。

539:NAME IS NULL
08/10/13 04:01:31
>>538
> 確かバックエンドとして使っても駄目なんだよな、.NetのWebアプリから使われるとかも。
Xpの制限、接続の種類別本数制限だから、バックエンドとしては問題ない。

ただ必要ライセンス数は減じない。


540:NAME IS NULL
08/10/13 05:13:33
アパッチェとかじゃ.NETサーバーできんの?

541:NAME IS NULL
08/10/13 05:55:06
>>540
 遊びなら
URLリンク(sourceforge.net)
URLリンク(anmar.eu.org)
このあたりから調べれば

実用ならわからん


542:NAME IS NULL
08/10/13 07:06:18
英語だけどなんとか調べてみるわ

543:NAME IS NULL
08/10/14 16:39:33
.net framework 2.0 + winアプリ + sql server 2005 Enterprise
の環境で実現したいことは
データベースの該当3テーブルに悲観的なロックをかけて他からのアクセスを完全に防いだうえで処理したいと考えています。

恐らくトランザクションの開始時に
BegginTransaction(分離レベル:恐らくSerializable?)
というようにしてロックレベルを指定するような気がするのですが、確信が持てないのと
このままで普通に処理していくと指定したテーブルのみロックをかけるような事が出来ないような気がします。

何らかの情報等あれば頂けないでしょうか?
説明不足の部分や、自分自身 トランザクションとロックの使い分けと違いが微妙な部分があるのですがよろしくお願いします。


544:NAME IS NULL
08/10/15 01:13:15
カラム名を英語で作成しているのですが、
カラム名と日本語カラム名の対応テーブルを
使用して上手く表示させるにはどうすればよろしいでしょうか?

545:NAME IS NULL
08/10/15 02:06:29
シノニムのことかい?

SELECT tbl.ENGLISH_NAME 日本語名 FROM tbl

546:NAME IS NULL
08/10/15 04:48:35
SQL Serverで行ってみようはまだ買えるんかい

547:NAME IS NULL
08/10/15 14:16:36
>>403
URLリンク(sqlserverbuilds.blogspot.com)

548:544
08/10/15 23:08:13
>>545
すみません。説明が分かりづらいと言うか、テーブル構造が悪いのですけど

TableA
ID|列A|列B
---------------
1|10 |20


TableB
列名|名前
---------------
AAA|あああ

とあった場合、ID=1で抽出すると

AAA|10
BBB|20

の結果を得たいのですが可能でしょうか?

549:NAME IS NULL
08/10/15 23:26:01
>543
トランザクションを開始した後にまず
WITH(XLOCK, TBLLOCK)
とでもしたクエリを流せ。

550:NAME IS NULL
08/10/16 00:25:44
>>548
SQLの前に説明の仕方を勉強汁

551:NAME IS NULL
08/10/16 01:19:28
>>548
inner joint を使えばいいと思うけど、得たい結果のテーブルの説明が無いので何とも言えない。

どっちかって言うとこっち向き。

SQL質疑応答スレ 7問目
スレリンク(db板)

552:NAME IS NULL
08/10/16 01:21:39
>>548
以前のプロジェクトで同じようなケースあったが
…スマン忘れたww

553:NAME IS NULL
08/10/16 01:36:27
>>548
無理だろ、、、どこにも紐付いてないだろ、、、

554:492
08/10/16 17:12:50
>>548
ちょっと待て、
> BBB|20
はどっから出てきた。
というか、TableBにID列はないのか?

>>544>>548の関連も不明だし。

あと、TableAは正規化する余地があると思うぞ。


555:NAME IS NULL
08/10/16 17:31:44
いかん、名前欄を消し忘れた(笑)。

まあTableAに関しては、面倒だからVIEWにしたけど、unionでTableAの列Aと列Bを
(見かけ上)別レコードにすることが出来るんで、あとはTableBと作成したView1を
結合すればいいと思うぞ。

create view View1 as
 select ID, 列A as 列 from TableA
 union select ID, 列B as 列 from TableA
go

-- TableBにID列があると仮定
select 列名, 名前
 from View1 inner join TableB on View1.ID = TableB.ID
 where ID = 1


TableBにID列が無かったり、OUTER結合したいのかがはっきりしないからなんとも言えないが、
OUTER結合したい場合はinner joinではなくleft outer joinとでもすれば結果は出ると思う。

ただ、ID列がないなら、結合するためのキーがないからどうしようもない。


556:NAME IS NULL
08/10/16 21:06:23
>>555
お前さんがちょっと面倒見がよくてよく回答してる奴だってことはわかった

557:NAME IS NULL
08/10/16 21:54:47
わざと、聞いてるんじゃないの、答えられない馬鹿を釣る為に。



558:NAME IS NULL
08/10/17 01:38:51
疑いだしたら匿名掲示板はNO RECORDです

559:544
08/10/17 10:28:08
すみません、訂正して再質問させてください。
釣りでは無く本当に困っているのでどうか助けてください。

<TableA>
ID |列A|列B
---------------
 1|10 |20
 2|30 |40

<TableB>
ID |列名|テーブル名
-----------------------
101|列A |TableA
102|列B |TableA
103|列G |TableC
104|列C |TableD

<やりたいこと>
①<TableB>の全て取得したい。
②各テーブルは最新のIDの行を取得したい。

今は、<TableB>をカーソルを使って回してsp_executesqlで
 SELECT 列A
 FROM TableA
 WHERE ID = (SELECT MAX(ID) FROM TableA)
のような文を作って取得していますが、異常に遅い状態です。

理想を言えば、TableB.テーブル名 = 'TableA' を指定すれば↓のような結果が欲しいです。
列名|値
---------------
列A |10
列B |20

sys.tables、sys.columnsを使用して何とかできないものでしょうか?
よろしくお願いします。

560:544
08/10/17 10:32:11
>>555
Viewを使っての(見かけ上)別レコードにする方法試してみます。
ただ、TableAが200列とかあるので遅くなりそうな・・・。
構造は変えられないので正規化できないですし。

連投すみません。

561:NAME IS NULL
08/10/17 13:36:10
CLRってマルチスレッド使える?

562:NAME IS NULL
08/10/17 14:54:34
先物一回死んで・・

563:NAME IS NULL
08/10/17 14:55:27
誤爆

564:NAME IS NULL
08/10/17 20:21:41 YYMduugc

どなたか分かる方がいましたら教えてください。

SQL Server 2005 EnterpriseEditionを使用しています。
ManagementStudioで作成したデータベースのプロパティを開きました。
そのダイアログ内に
・「ANSI 警告有効」
・「算術アボート有効」
・「ANSI NULL 有効」
などTRUE/FALSEで設定できる項目があるのですが、
どう設定を変えても設定が反映されていないように思います。

何かご存知でしたらお願いします。


565:NAME IS NULL
08/10/17 22:12:12 YYMduugc

追記です。

>どう設定を変えても設定が反映されていないように思います。

GUI上では値は変わっているのですが、
その後、Javaでクエリを発行しても、
その設定が有効になっていないような結果になってしまう
ということです。


566:NAME IS NULL
08/10/17 22:51:42
SQL Serverへの接続時オプション?

567:NAME IS NULL
08/10/17 22:54:17
>>565
SQLCMDではどうですか?
OLEDB/JDBC/ODBCなどの場合は接続時に
自動的にSET ANSI_NULL ON などのコマンドが発行されて特定の状態に上書きされるはず。


568:NAME IS NULL
08/10/17 23:52:36 nUyHAdFv

>>566
返信ありがとうございます。
SQL Server全体の設定(サーバのプロパティ)ではなくて、
データベースの設定(データベースのプロパティ)だったと思います。

>>567
返信ありがとうございます。
なるほど~。
やはりGUI(ManagementStudio)だけではできないですか。


569:bcp
08/10/18 09:24:25
>>568
> なるほど~。

何がなるほどなんだか。

>>568 は、Management Studio の事なんか書いてないだろ。

Java でできないのは、JDBC とかの影響だから、直接 SQLCMDで試してみろって
言うだけのことだよ。

別に、Management Studio からクエリ発行して試すのでもいいと思うけど、
よくわからんのならまずは「言われた通り」やってみなよ。

570:NAME IS NULL
08/10/18 20:41:44
以下の手順で、SQLサーバを丸ごと移行できるのか確認したくて質問しました。

ある、SQL Server 2000 Developer Edition が動いているマシンにて、
SQLサーバを止めて、以下のデータのコピーをとる。
C:\Program Files\Microsoft SQL Server\MSSQL\Data
次に別のマシンに、SQL Server 2000 Standard Edition をインストールする。
そして、SQLサーバを止めて、同様の場所にあるDataフォルダの中身を
ごっそりと入れ替える。そしてSQLサーバを起動する。

これ以外に、何か設定ファイルを保存しておき、移す必要はあるのでしょうか?
私の方で行っている範囲では、この作業で問題無く動いてはいますが、
見落としがありそうな気がしていて、不安です。
非常に初歩的な質問ですが、よろしくお願いします。

571:NAME IS NULL
08/10/18 21:57:41
>570
普通はデタッチしてアタッチし直す。

572:NAME IS NULL
08/10/18 23:23:37 1KkMfcNq
>>569

職場でしかManagementStudioを使えないので、
月曜にやろうと思います。
家にあればいいんですけどね。



573:NAME IS NULL
08/10/19 00:13:01
Webでよくある、複数条件での検索指定の場合のセオリーってあります?
単純に条件 IN(@条件文字列)だと効率悪いですかね

574:NAME IS NULL
08/10/19 00:14:19
補足です。

複数条件 と言うのは、 Googleの検索条件でスペース区切りで指定する場合などです

575:NAME IS NULL
08/10/19 01:12:53
>>573
SQLでのINはパフォーマンスに大きく作用する。多用すべきではないと言われている。

ぶっちゃけパフォーマンスを気にしなければ行けないのは、全レコード(行数)が1万のオーダーを超えてから。

576:NAME IS NULL
08/10/19 01:37:12
>>546
2008年3月初版の本がもう手に入らんのか、、


577:NAME IS NULL
08/10/19 02:03:10
>>574
>複数条件 と言うのは、 Googleの検索条件でスペース区切りで指定する場合などです
言わんとすることがいまいちわかんね。
 SELECT * FROM table1 WHERE x IN ('Hello', 'World', 'This', 'is', 'a', 'pen')
は、
 SELECT * FROM table2 WHERE x='Hello' OR x='World' OR x='This' OR x='is' OR x='a' x='pen'
と同じなわけだがそこらへん大丈夫?(Googleのスペース区切りはORでなくAND)
あと、IN(@条件文字列) というパラメータ置換は何でやろうとしてる?
ADO.NETだと @条件文字列="A B C D" の場合、IN('A B C D') とエスケープされてしまうわけだが。
(ADO.NETでWHERE句を本気で実行時に動的に書き換えたいなら、データアダプタをサブクラス化でもする他ない。)

>>575
>INはパフォーマンスに大きく作用する。多用すべきではないと言われている。
ではINのより効率的な置き換えとは何ですか(・∀・)?
ちなみに、SQL Server 2005 Expressでは↑の2つのSQL文にパフォーマンス上の差異はない(実行計画が同じになる)。


578:NAME IS NULL
08/10/19 02:15:26
exists

579:NAME IS NULL
08/10/19 02:21:45
>exists
mjk


580:NAME IS NULL
08/10/19 03:42:11
>exists
IN(サブクエリ)なら、EXISTS(サブクエリ')に置き換えられる。
 例:下記は等価。
  (1) SELECT * FROM foo WHERE x NOT IN (SELECT y FROM bar)
  (2) SELECT * FROM foo WHERE EXISTS (SELECT * FROM bar WHERE foo.x = bar.y)

だが、EXISTS(サブクエリ')の書き換えで常に高速になるわけではない
(結果的にテーブルfooの殆どのレコードがSELECTされる場合、(2)より(1)の方が早い。反対だと反対。)
みんな知ってるね


581:580
08/10/19 03:46:03
訂正:
誤: (1) SELECT * FROM foo WHERE x NOT IN (SELECT y FROM bar)
正: (1) SELECT * FROM foo WHERE x IN (SELECT y FROM bar)

582:NAME IS NULL
08/10/19 09:42:59
>>571
ありがとうございます。調べてみます。

583:NAME IS NULL
08/10/19 12:15:41
すいません、質問です。

SQL Server では「管理」のところでシステムのログを見たり、現在どのユーザが
接続しているかを確認する機能はありますが、どのマシンがどんなSQLコードを
実行したかを見る機能はあるのでしょうか。
もしそれが無いとすると、その履歴を吸い出すためのツールはあるのでしょうか。
保守的な意味合いで、実際にテーブルを開いてチェックする以外の方法で、
具体的にどのテーブルのどのデータが操作されているのかを随時チェックしたいのです。

584:NAME IS NULL
08/10/19 12:34:13
>>583
なんとかってツールがデフォで入ってるだろ
スマンが名前は度忘れした…

585:NAME IS NULL
08/10/19 12:37:35
>>584
Enterprise Manager、クエリアナライザ、このあたりでしょうか?

586:NAME IS NULL
08/10/19 12:47:03
SQL Server Profiler

587:NAME IS NULL
08/10/19 12:48:03
つか2000かよ。知らね。

588:NAME IS NULL
08/10/19 17:42:40
>>586
それだ!

589:NAME IS NULL
08/10/19 18:58:13
2000でもプロファイラはありました。英語がカタカナ表記になっているだけのようです。
調べてみると、どうやらそのツールを使うようです。
TSQL の SQL:BatchCompleted をトレースするイベントクラスとして設定していると、
DBにアクセスしてきたSELECT文が拾えるところまで確認出来ました。
ツールをある程度使ってみての質問なのですが、トレースした後、その結果に
フィルターをかけて「TextData」が「SELECT ~」のみを表示とか出来なさそうですが、
ユーザDBに対してのSQL文のSELECTやUPDATE文のみを抽出する良い
方法ってないのでしょうか。

590:NAME IS NULL
08/10/19 19:37:12
トレースプロパティのフィルタにて、ApplicationName の項目を工夫するくらいしかないのかなぁ。
あと、このトレース結果を保存する際、トレースファイルとしては保存出来るが、CSV形式ファイルに
出力とか一発で出来ないみたいだね。
一度データベースに保存してそれからCSV変換となりそうだぎゃ。
解析するまでの過程が面倒だ。

591:577
08/10/19 20:13:01
>(ADO.NETでWHERE句を本気で実行時に動的に書き換えたいなら、データアダプタをサブクラス化でもする他ない。)
スマヌ、知ったかこいた。もはや573が知りたがってることとは遊離してるのは明らかかもしれんが訂正する。
正解はデータアダプタの改造でもサブクラス化でもなくて、↓これ(テーブルアダプタの拡張)。
URLリンク(www.atmarkit.co.jp)

もちろん上記方法によらず自力で平にSQLを書いてSqlCommand.CommandTextにセットして実行する手はいつでも使えるわけだが、
その場合データのバインドやパラメータのエスケープを自作ルーチンで賄うことになり、
個人的には特に後者がセキュリティー上のリスクを高めるので問題だと思う。


592:NAME IS NULL
08/10/19 20:31:54
> ADO.NETだと @条件文字列="A B C D" の場合、IN('A B C D') とエスケープされてしまうわけだが。
パラメータの中のシングルコーテーションをクエリの一部として解釈されるならパラメータにする意味が全くないだろ。
スペースで区切った文字列でもあくまでスペースが含まれている文字列でしかない。
CommandTextをパラメータの数に応じて動的に作るだけだよ。渡すパラメータも動的に追加する。
死ぬほどパラメータが多いときやパラメータ数が予測できないときはお勧めしない。
パラメータ数の上限に引っかかる。2100個だけど上限なしに指定出来るようなときは引っかかる。
INでクエリ以外で固定のパラメータをたくさん入れると
時々とんでもない実行プランになることがあるので動作速度も予測できない。

パラメータとして渡したいものを一時テーブルに突っ込んでそれをサブクエリにするとかが堅いけどちょっと面倒。
一時テーブルに突っ込む過程でパラメータ数が多いと工夫しないとそれなりに時間がかかってしまうという欠点もある。

あと、文字列をそのままパラメータ以外で突っ込むのは論外。
Unicodeとかいろんな文字コード経由とかもあってどんなに頑張っても気づかない穴が発生する。
ちゃんとパラメータで渡せるようになんとすること。

593:577
08/10/19 20:32:01
>パラメータのエスケープを自作ルーチンで賄うことになり、
>個人的には特に後者がセキュリティー上のリスクを高めるので問題だと思う。
重ねてスマン、良く考えたら573に書いてあるような "IN (@検索条件)" みたいなWhere句の論理構造自体を書き換える場合でも、
パラメータのエスケープを自作ルーチンで賄わずに済む方法はあるな。これはテーブルアダプタの拡張とは独立の話だった;
語りたがりな初心者の戯言として忘れてくだされorz


594:577
08/10/19 21:10:18
>>592
パラメータ数上限やパフォーマンスは別途考慮対策するとして、
>ちゃんとパラメータで渡せるようになんとすること。
この一点のみについて言えば次のようにAddWithValue()なり使ってパラメータ渡しすればおkってことでいいんですよね?
[C#]
string[] searchTargets = new string[] { "A", "B", "C", "D" }; // 検索対象文字列(仮に4個)
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM [foo] WHERE foo.x IN (@p1, @p2, @p3, @p4)";
cmd.Parameters.AddWithValue("@p1", searchTargets[0]);
cmd.Parameters.AddWithValue("@p2", searchTargets[1]);
cmd.Parameters.AddWithValue("@p3", searchTargets[2]);
cmd.Parameters.AddWithValue("@p4", searchTargets[3]);
こうすれば、仮に検索対象文字列に [']とか[--]とかその他どんな文字が含まれていようとも、
(フレームワークにバグがない限り)フレームワークが適切にエスケープしてくれるので
(フレームワークにバグがない限り)上記クエリ発行でSQLインジェクションは*絶対に*起き得ない。
あとはこれにアレンジを効かせれば(パラメータを動的に増減させるとかすれば)、>573的にもよさげ?


595:NAME IS NULL
08/10/19 21:25:12
>594
パラメータで渡すってのはそもそもエスケープとかするのとは関係ない、
パラメータ部分はあくまで変数でクエリの意味には影響しない部分。
シングルコーテーションやいろいろ記号を入れようが文字コード外の値を入れようが
あくまでそういう値の文字列変数とフィールドの値を比較といった感じで扱うだけ。
これはいろいろエスケープするのでは絶対に越えられない壁。

そんな感じのクエリを動的にパラメータの数だけ増やせるように作ればいいよ。
パラメータの数が多くなければそんなに問題が起きるようなこともないし。

596:NAME IS NULL
08/10/19 21:59:43
パラメータを利用したSQL文ではSQLインジェクションは発生しないとされる(URLリンク(www.atmarkit.co.jp))。
これが可能であるためには、例えば
 cmd.CommandText = "SELECT * FROM foo WHERE x IN (@p1)";
 cmd.Parameters.Add("@p1", "Hello; EXEC sp_catalogs 'bar'");
としたときに、パラメータ展開結果が
 SELECT * FROM foo WHERE x IN ('Hello; EXEC_sp_catalogs ''bar''')
となって、@p1部分全体がエスケープされるのではなくて?

SQL Server Profiler持ってる人だれか調べれ

597:NAME IS NULL
08/10/19 22:09:25
答えとしては、これか。
URLリンク(itpro.nikkeibp.co.jp)
パラメータはSQL本体とは別に送られるのであって、エスケープでしのいでるんではない。
ていうか、文字列途中の[']を勝手に['']にエスケープしたらイカン。検索が致命的に働かなくなる。


598:570
08/10/20 11:14:38
>>571のアドバイスを元に調べてみて、やってみました。
今まで、移行が出来なかったDBもアタッチを使うことで出来ました。
ありがとうございます。

念のため確認したいのが、デタッチしてファイルのコピーをするのと、
SQL Server を停止してファイルのコピーをするのは同じことですよね?
デタッチそのものに何か特殊な処理があるのでしょうか?

599:570
08/10/20 13:32:54
調べてみたところ、サービスを停止してのコピーは、良くないようですね。
以下のページの一番下に書いてありました。
URLリンク(www.sqlpassj.org)
> データベースサービスの停止は、原則的には、クリーンシャットダウン扱いではない。
自己解決しました。

600:NAME IS NULL
08/10/20 17:49:31 Fvc0cWYg
質問です。

・本社にSQL Server 2005
・本社と支店をVPNで接続
・支店クライクライアントPCはサーバPC名の名前解決済み

という環境で、支店から本社サーバPCのデータベースAAAに、
ODBC接続を設定しようとすると、規定のデータベースを変更するのところが、
masterとかNorthwindなどの初期のものしか表示されません。
本社ネットワークからODBC接続を作成しようとAAAが表示されています。

何が原因でしょうか?
よろしくお願いします。


601:NAME IS NULL
08/10/20 19:16:26
>>600
真っ先に思い浮かぶのは、AAAへのログインが成功しているかどうかでしょ。
何か特別にパスワードなどを設定しているかどうか。

602:NAME IS NULL
08/10/20 19:58:39
すみません、質問です。

あるベンダさんがSQL Server 2kでシステムを入れたのですが、それには
データベースを毎日深夜に自動的にDATにバックアップするツールが
ついてました。ベンダさんは、「これで時間設定すると便利ですよ」と
紹介をしていたのですが、これって、そういうツールをいれなくても
EnterpriseManagerで出来ますよね。
どうしてツールを入れる必要があったのかが疑問で聞いてみたくなりました。
(ベンダさんは、内部仕様についてはなかなか教えてくれません。設計仕様だとか
これがサポートの形だとかそういうぼかす言い方しかしませんので)

バックアップツールの機能は、指定した時間にDATやHDDなど指定したところに
データベースの完全バックアップを行うのみです。

603:NAME IS NULL
08/10/20 20:24:34
>>603
正直、NTBACKUP.EXEは使いたくない(笑)

多分、バックアップするツールってArcServeとかBackupExeとかだと思うけど、
テープへのバックアップだったら、そっちを使ったほうが良い。

昔、自分もWindows標準のバックアップツールを使っていたけど、
バージョンによって仕様(コマンドラインのオプションとか)が変わるんで、
自分のところもテープを使う場合にはツールを使ってバックアップするようにした。
※Windows Server 2008になって、またバックアップのコマンドが変わったし。



604:bcp
08/10/20 21:02:31
※ そもそも素の 2008 では、テープへのバックアップはできなくなったよ。

605:NAME IS NULL
08/10/20 21:23:26
標準ツールを使うバッチファイルをタスクスケジューラに登録しただけなんでないかな

606:NAME IS NULL
08/10/21 03:21:48
>>602
できれば、そのツールが何か教えてもらえませんか?
(JP1だったら日立確定。まあ、JP1ではテープに出力昨日は無いけど)


607:NAME IS NULL
08/10/21 09:18:21 N1IgYAGM
>>601
レスありがとうございます。
パスワードとかは特に設定はしていないですね。
でも、SQL Serverの設定でしょうね。
もう少し調べてみます。
ありがとうございました。

608:NAME IS NULL
08/10/21 09:49:09 N94vUEPB
ここにいらっしゃるみなさんの環境についての質問です。

SQL Server でデータベースを作る際、ビューやストアドプロシージャを
全く作らずにテーブルの作成のみで、後はクライアントのアプリの方で
直接テーブルのデータを操作するという設計をすることは普通に
あるのでしょうか?
これはその設計方針次第といってしまえばそうなるのでしょうが、
製品自体が頻繁に仕様変更のバージョンアップがあり、それによって
旧バージョンとの互換性が無くなる部分が多いとか、他のデータベースへの
移植の可能性があるなどの状況を考えると、多少パフォーマンスを
悪くしても、そういうテーブルのみといった作り方の方が良いのでは
と思います。

パッケージにおいて、サーバは PostgreSQL か SQL Server かを選べるタイプのを
見ると、これは SQL Server はテーブルのみじゃないのかなと思えてしまいますが。

609:NAME IS NULL
08/10/21 12:36:23
>>608
小規模な開発以外はありえない。
それに最近の開発はビジネスロジックは分離する思考になってるし。

610:NAME IS NULL
08/10/21 12:38:04 zImtCADo
>>608
零細企業だけどうちは普通にあるなぁ…
特に頭の固い連中がいうのは

1.ビューはインデックスがうんたらかんたら・・・
 別に最近ではいけてると思うんだけど・・・・

2.ストアドにしてアプリとは別にPG組んでもどうせ設計が変わったら両方修正が・・・
 これに関しては否定はしないが、速度面では集計とかはストアドに任せたいんだけどなぁ…
 マスタ管理レベルはいらないと思うけど

3.移植が・・・・
 データベースとアプリのちょっとした設定程度だけの移行で済むのならSQLの方言程度だと思っているのであんま考えないかな

でも、システムの要件とか含めて結局総合的に考える必要があるから一概にこれが答えとは言えないけど
うちは1,2,3含めてパフォーマンスが少々気になっても>>608と同じような感じになってる
ハードの質でも吸収できる部分もあるし

PS.俺的にはパフォーマンスをやっぱり重視したいところが多いけど

611:NAME IS NULL
08/10/21 14:13:06
SQLServer2005 32bitをつかっています
パフォーマンスモニタを見ているとピーク時にはCPU100%になって
下がってきません
その割にはメモリはほとんど使っていません
4Gの壁云々の前にメモリをフルにつかってCPU負荷を下げたいのですが


612:NAME IS NULL
08/10/21 15:02:39
>>611
メモリをあまり使わない必死処理が入ってんじゃないの

613:602
08/10/21 19:51:57
みなさん、レスありがとうございます。

仕様や動作確認などが関係してたんですね。納得しました。

>>606
このツールは、「バックアップツール」とだけ書いてあるのですよ。
起動した画面もメニューは上の方に無く、ボタンだけの構成で、
誰かがVB6で作ったっぽいの感じの雰囲気のものです。
このツールを使えば、テープに記録は出来ますし、テープから、
データベースへの復旧もボタンをクリックするだけで出来ます。
(復旧はそういう場面がなかったのでまだやったことがないけれど)

614:NAME IS NULL
08/10/21 21:24:23 Fio76aGW
すみません、初歩的な質問ですがお願いします。

SQL Server 2000 をインストールした後、リモート接続が出来る様に
するにはどのようにしたらよろしいのでしょうか。2005などの場合は
ドキュメントがすぐに見つかるのですが、2000とはメニューなどが
変わっているため、その操作が出来ませんでした。
ヒントとなる言葉でも結構ですのでお願い致します。
URLリンク(support.microsoft.com)

615:NAME IS NULL
08/10/22 00:18:34
SQLServer2005でテーブルに入っているレコードでInsert文を作りたいのですが、
何かいい方法ありますか?


616:NAME IS NULL
08/10/22 00:31:17
>611
プロファイラ見てDurationが長くてCPUが妙にでかい数字たたき出してるものをピックアップして重いクエリから順に直す。
インデックスが効いてないとかそういうのはメモリをひたすらキャッシュに使う方向になるので
メモリ使用量がぎりぎりまで増える傾向があるのでもっとろくでもない処理でもやってるんじゃないかな。

617:NAME IS NULL
08/10/22 00:33:10
>614
2000はデフォルトで接続可能だったはず。
デフォルトの接続設定が厳しくなったのは2005からだよ。

618:NAME IS NULL
08/10/22 01:22:49
>>617
別のPCから接続出来ました。アドバイスありがとうございます。

最初、エラーで接続出来なかったので、SQL Server側の設定の問題かと思い、
いろいろと調べていて、それでも分からなくて質問をしたのですが、
ご回答を元に、OSレベルの接続の部分を見直してみると、うまくいきました。
ありがとうございました。

619:NAME IS NULL
08/10/22 01:23:27
営業所コード , 営業所 , 規模
100 , aaa , 5
101 , bbb , 7
101 , cccc , 6


620:NAME IS NULL
08/10/22 04:01:15
>>615
insert ~ select ~

621:608
08/10/22 09:18:05
>>609
確かに、ビジネスロジックは分離した方が整理しやすくなりますよね。


>>610
テーブル数はどのくらいですか?
私は、1つのデータベースにおいてテーブル数が100を超えるのに、ビューや
ストアドを作ってないのを見たことがあるのですよ。

622:NAME IS NULL
08/10/22 10:14:48
すいません、質問です。

現在SQL server 2005 Express Editionを使っているのですが
Windows Internal Databaseをアンインストールすると
SQL server 2005 Express Editionも削除されてしまうのでしょうか?




623:NAME IS NULL
08/10/22 11:25:22
2005 スタンダードです。

以下の文の場合、全レコードが返ってきますが、コードが重複しないように
パターンの文字数の大きいものを優先して返してほしいですが、どのように書けばいいでしょうか??

SELECT * FROM テーブル名 WHERE 'C' LIKE パターン

コード、パターン、値
-----------
A01、%、 10
A01、C%、20
B01、%、 30

624:NAME IS NULL
08/10/22 14:58:49
ORDER BY LEN(パターン) DESC
でいいんじゃね?

625:NAME IS NULL
08/10/22 15:07:52
test

626:NAME IS NULL
08/10/22 15:14:55
XP HomeにインストールしたSQL Serverにリモートのmanegement studioからログインすると
ログイン名がGuestになるんですがこれって仕様なんでしょうか testしてごめんなさい

627:NAME IS NULL
08/10/22 15:28:31
>>617
2008はデフォルトでリモート接続可だった。
デフォルトでダメなのは2005だけか?

628:NAME IS NULL
08/10/22 16:32:14
>>626
もう少し状況を詳しくw

こっちではXPHome使ってるけれど、プロファイラでトレースしてると
LoginNameの欄は
ネットワーク上のコンピュータ名\WindowsXPのログイン名
が表示されるよ。

629:NAME IS NULL
08/10/22 16:35:58
では、逆にSQL Server 2000 でリモート接続を切るにはどうしたらよいのでしょうか?
メニューが無い為そういうこと自体が無理?

630:NAME IS NULL
08/10/22 16:58:03
>>628

レスありがとですw

ネットワーク:workgroup
クライアント: windows2000 advanced
サーバー: xp home
SQL server: express edition

いままでずっとクライアントからサーバーのSQLServerに接続しようとしたところ以下のエラーが発生して接続できませんでした。

サーバー名\sqlexpressに接続できません
Additional information
ユーザー 'サーバー名\Guest'はログインできませんでした。(Microsoft SQL Server, Error:18456)

そしてサーバーのSQL ServerにGuestログインを作成したらすんなり接続できたのですが、ログイン名が
サーバー名\Guestに・・・ xp home のファイル共有は常にGuestアカウント経由になることと関係がある
んでしょうか


631:NAME IS NULL
08/10/22 19:01:23
623です。

>>624
コードが重複しないように取りたいのですが。
これだとA01の行が2行返ってきてしまうので・・・

632:NAME IS NULL
08/10/22 19:19:03
>>621
テーブルが多いからビューを作らなければならない訳ではない事ぐらい分かるよね
ストアドも同様。

633:NAME IS NULL
08/10/22 19:29:05
ビューを作るのとストアド作るのは別問題っしょ

634:NAME IS NULL
08/10/22 20:28:34
質問

ネットワークを通じてMS-Accessを使ってSQL Serverに接続する際、
SQL Server認証は成功しますが、これをWindows認証にすると
失敗してしまいます。

SQL Serverが入っているPCにて、SQL Serverに接続する際は、
SQL Server認証もWindows認証も成功します。

通常、こういうことが起きることは無いと思っていたので、
不思議でたまりません。これは、どのあたりの設定を
見直すとよろしいのでしょうか。

635:NAME IS NULL
08/10/22 20:55:45 tDMckeFO
すみません、質問です。
本番sql server からバックアップしたデータベースを
ローカルのsql serverで復元したいです。

本番と復元先はデータベース名が同じです。
バックアップファイルが最新のものなので
現在ローカルにある同名のデータベースに上書きと言う形で復元したいです。
バックアップは、データベースを右クリックして
タスクからバックアップという形で行いました。
現在の状況としては、復元しようとすると「セッションが使用中なので
復元出来ない。managerの使用をお勧め」とでます。
色々調べたのですが、既存のデータベースを変えればいいとは載っていても
実際どうやればいいのかが分からない状態です。
復元のオプションでmdbとldf?ファイルが設定されていましたが
その復元先がDドラに指定されていました。
Dドラは使用していないのに何でなのでしょうか。そこが原因?
明日会社で出来ないと困るのでどなたか教えて下さい。
初心者の質問で申し訳ないのですが、よろしくお願いします。




636:NAME IS NULL
08/10/22 21:06:00
>>634
今までは正常にログインできていたのが、急にできなくなったのですか?

あと、サーバーとクライアントはドメイン(Active Directory)に参加していますか?
それともワークグループで運用していますか?

確認方法としては、SQL Server Management Studioで[セキュリティ]-[ログイン]に
Windows認証でログインするユーザー/グループが登録されていないとか?

あとはログに失敗時のログ残っているかでしょうか。


637:NAME IS NULL
08/10/22 21:12:16
>>634
ネットワークを通じてAccess使わずにWindows認証で接続できるか確認。
それで原因の切り分けできる。

638:NAME IS NULL
08/10/22 21:33:29
>>635
> 現在の状況としては、復元しようとすると「セッションが使用中なので
> 復元出来ない。managerの使用をお勧め」とでます。

復元先のデータベースに誰かログインしていたと思われ。


> 復元のオプションでmdbとldf?ファイルが設定されていましたが
> その復元先がDドラに指定されていました。
> Dドラは使用していないのに何でなのでしょうか。そこが原因?

バックアップファイルの設定がそこに表示されているからで、
元のデータファイル(*.mdf)とログファイル(*.ldf)がDドライブだったからと思われ。

リストア方法だけど、[タスク]-[データの復元]までは判っているって考え良いんだよね?
それだったら、以下の手順でリストアできるはず。

0.復元先データベースを、自分自身も含めて誰も使っていないことを確認。

1.[データベースの復元]-[全般]で[復元先データベース]を選択。

2.[復元元のソース]で[デバイスから]をチェックして隣にある[…]ボタンをクリック、
  [バックアップの指定]ウィンドウが開くんで、[追加]ボタンをクリックしてバックアップファイルを選択。
  [OK]ボタンをクリックして[データベースの復元]ウィドウまで戻る。

3.左の[オプション]をクリック、[次のデータベースファイルに復元]の[復元先]をリストアするPCに
  存在するドライブ/フォルダ名に変更。
  (データファイル、ログファイルとも)

4.すでに存在するデータベースに復元するのであれば、[既存のデータベースを上書きする]をチェック。

これで[OK]ボタンをクリックすれば、復元できるはず。

# GUIの操作の説明は面倒だなー。
# T-SQLだったら、
# RESTORE FILELISTONLY FROM DISK='バックアップファイル名'
# 表示された内容でを元に、
# RESTORE DATABASE FROM DISK='バックアップファイル名'
# WITH MOVE 'mdfファイル名' TO 'MDFファイルの保存先'
#     ,MOVE 'ldfファイル名' TO 'LDFファイルの保存先'
#     ,REPLACE
で済むんだけど。


639:NAME IS NULL
08/10/22 21:50:46
>>635
この前も言っただろ。

640:NAME IS NULL
08/10/22 22:08:30
>>638
めっちゃくちゃ助かりました!
こんな細かく丁寧に書いてくれる神がいたとは。
本当にありがとうございました!!これで安心して寝られます。

>>639
この前?何日のレス?
俺が書き込んだのは初めてだけど
参考にしたいんでレス番教えてくれると嬉しいです。

641:NAME IS NULL
08/10/22 22:16:57
640だけど、すみません、もう一つ質問が。

復元する時って復元先の(ローカル)sql serverに接続して
行うんですよね?
AというバックアップファイルをローカルのAというデータベースに
上書きしたいとしたら、ローカルに接続して、ローカルのAというデータベースを右クリックして
>>638に書いてくれたことを実行するってことでOKでしょうか?
それともODBCとかの接続の関係?これは全然関係無い?



642:NAME IS NULL
08/10/22 23:22:25
>>641
ローカルに接続して、「ローカルのAというデータベース」以外で、T-SQLを実行


643:NAME IS NULL
08/10/22 23:27:18
>>641
ODBCとか関係ない。
SQL Management Studioでログイン(当然sysadmin権限があるユーザーで)して、操作すればOK。

> 上書きしたいとしたら
それが[既存のデータベースを上書きする]をチェックする理由。
(まあ、実際はトランザクションログが残っている状態だと上書きできないからだけど)

あと、一応データベースのプロパティを確認して、データ/ログファイルの保存先を確認して
復元先を合わせたほうがいいと思う。


644:NAME IS NULL
08/10/22 23:55:19
>>631
SELECT TOP 1 なんちゃらかんちゃら ORDER BY >>624

645:NAME IS NULL
08/10/23 00:06:20
>>629
SQL Server ネットワークユーティリティで有効になっているプロトコルをぜんぶ削除

646:NAME IS NULL
08/10/23 00:14:02
>629
細かいメニューは忘れたけど普通に接続ライブラリの設定からTCP/IPを削れ。
GUIで設定できるしメニューもあるし設定も普通に出来る。
2000でこの設定をいじることってあんまりないから説明されてないことが多いだけだよ。

>630
homeで使ったことないので勘だけどWindows認証にしてるならファイル共有のアカウントと同じアカウントで認証してると思うよ。
SQLServer認証の方でやれば?

>631
SELECT * FROM テーブル名 A WHERE 'C' LIKE A.パターン AND
NOT EXISTS (SELECT * FROM テーブル名 B WHERE 'C' LIKE B.パターン AND A.コード = B.コード AND LEN(A.パターン) < LEN(B.パターン))
こんな雰囲気で。試してないからちゃんと動くか判らんけど。
長さが同じだと重複する。
長さが同じものの重複を省きたいなら他に優先度のフィールドとか作るかざっくりMAXなどで片方を残すか。

647:NAME IS NULL
08/10/23 00:40:12
>>642
>>643

なるほど。分かりました。ありがとうございます!
明日頑張ります。

648:629
08/10/23 07:56:00
>>645>>646
ありがとうございます。
確かに、スタンドアロンで使う目的でSQL Server 2000 を入れることは
ありませんね。ネットワークを通じての時しか使わない。
パッケージでもたまにありますが、その時は、LANケーブル自体が接続
されていないとかですしね。

しかし、試験サーバでその操作をする必要があったので、設定のアドバイスは
助かりました。今度やってみます。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch