Microsoft SQL Server 総合スレ 5

このエントリーをはてなブックマークに追加
941NAME IS NULL:2008/03/21(金) 23:51:52 ID:???
1 無理
2 日本語版がある
942NAME IS NULL:2008/03/22(土) 00:57:01 ID:???
>940
大文字小文字違いのデータを入れたいならその列の照合順を変えろ。
クエリのテーブル名などの大文字小文字が区別されるのはDB自体の照合順の影響。
テーブル名の大文字小文字とかも区別したいならDBの照合順を変えろ。
943NAME IS NULL:2008/03/22(土) 12:04:04 ID:???
大文字/小文字区別はPKにしてると出来なかったんじゃなかった?
944NAME IS NULL:2008/03/22(土) 12:47:31 ID:???
>>943
外部キーとリファレンス先のCOLLATEはあわせたほうがいいかも。
COLLATE Japanese_CS_AS_KS_WSが妥当かな?
945NAME IS NULL:2008/03/22(土) 21:18:43 ID:xRI/qUei
SQL Server 2005のフリー版のやつにプロファイラってついていますか?
946NAME IS NULL:2008/03/22(土) 23:21:53 ID:???
Express版には付いていない。
947NAME IS NULL:2008/03/22(土) 23:39:51 ID:b4GggKf+
音楽のアルバム名を登録したテーブル「アルバムTBL」と
それに収録されている曲名リストを登録したテーブル「トラックTBL」があります。
指定した二つの曲が共に収録されているアルバム名を取得したいのですが、
どんなSQLになりますか?
二つのテーブルは「アルバムID」列で結合可能です。
アルバムTBLでアルバムIDは主キーです。
948NAME IS NULL:2008/03/23(日) 22:14:48 ID:???
>947
SELECT アルバム名 FROM アルバムTBL WHERE
EXISTS (SELECT * FROM トラックTBL WHERE トラックTBL.アルバムID = アルバムTBL.アルバムID AND トラックTBL.曲名 = @曲名1)
AND EXISTS (SELECT * FROM トラックTBL WHERE トラックTBL.アルバムID = アルバムTBL.アルバムID AND トラックTBL.曲名 = @曲名2)
とりあえずパフォーマンスとかどうでもよかったらEXISTSで手抜き。
パフォーマンスが気になるレコード数があるか想定するなら普通の表結合に書き直してね。
949NAME IS NULL:2008/03/24(月) 15:57:21 ID:/VnKEb27
VisualStudio2005インストール後にSQL Server2005をインストールしたんだけど、
ManagementStudioが見つからない(スタートメニューにない)
SQLServerのDVDを入れて追加でインストールしようとしても、
「開発ツールはインストール済みです」みたいなメッセージが出ます。
ManagemetStudioを入れるにはどうすればいいですか?

環境
OS:Windows Vista Ultimate
VS:2005 SP1
SQL:2005 SP2
950NAME IS NULL:2008/03/24(月) 19:19:16 ID:???
ManagementStudioはVisualStudio内の一機能として実装される。
ヘルプ引けば一発
951NAME IS NULL:2008/03/25(火) 04:27:12 ID:???
>>949
スタート+R -> sqlwb -> enter
でいつも起動している。

スタートメニューに出てこないってのはインストール順によって
そういうことになるという書き込みを見たような気がするが、
スタートメニューは使わないのでどうしたらいいかは覚えてないわ。
952NAME IS NULL:2008/03/25(火) 13:59:28 ID:9n2z5qiu
SQLの2005を使っています。
しかし突然SQLに突然つながらなくなりました。
データが壊れたようなんですが、壊れたmdfとldf が残っております。
また1ヶ月ほど前にバックアップを取ったmdfとldfもあります。
なんとか復旧する方法はないでしょうか。
壊れたmdfとldfはアタッチしようとしても
-------------------------------------
タイトル: Microsoft SQL Server Management Studio Express
------------------------------

サーバー 'HIROSHI\ARIADNE' のデータベースのアタッチに失敗しました。 (Microsoft.SqlServer.Express.Smo)

ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=データベースのアタッチ+Server&LinkId=20476 をクリック

------------------------------
ADDITIONAL INFORMATION:

既存のデータベースと同じ名前のデータベースをアタッチできません。 (Microsoft.SqlServer.Express.Smo)

ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&LinkId=20476 をクリック

------------------------------
BUTTONS:

OK
------------------------------
このエラーが出てしまって復旧できません。
お願いします。
953NAME IS NULL:2008/03/25(火) 14:04:57 ID:???
今までWinNT + SQL6.5だったのが、
今度からWin2003server + SQL2005にグレードアップすることになりました!
恐らくこのスレにお世話になることと思います〜ウヒ
954NAME IS NULL:2008/03/25(火) 14:06:06 ID:???
MERGE欲しいよう
955NAME IS NULL:2008/03/25(火) 14:06:32 ID:9n2z5qiu
すみません、エラーが間違っていました。
タイトル: Microsoft SQL Server Management Studio Express
------------------------------

サーバー 'HIROSHI\ARIADNE' のデータベースのアタッチに失敗しました。
(Microsoft.SqlServer.Express.Smo)

ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.3042.00&EvtSrc=Microsoft.SqlServer.Management.
Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=データベースのアタッチ+Server&LinkId=20476 をクリック

------------------------------
ADDITIONAL INFORMATION:
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.Express.ConnectionInfo)
------------------------------
データベース 'Ariadne'(ID: 5) のページ (1:1310) で内部操作中に、一貫性が損なわれていることが検出されました。
ご購入元に問い合わせてください。参照番号 3。
データベース 'Ariadne' でログに記録された操作をやり直しているときにエラーが発生しました。
エラーが発生したログ レコード ID は (3124:1484:2) です。
通常、この前に特定のエラーが Windows イベント ログ サービスにログ記録されます。
完全バックアップからデータベースを復元するか、データベースを修復してください。
新しいデータベース 'Ariadne' を開けませんでした。CREATE DATABASE は中止されます。
(Microsoft SQL Server、エラー: 5242)
ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&
EvtSrc=MSSQLServer&EvtID=5242&LinkId=20476 をクリック
------------------------------
BUTTONS:
OK
------------------------------
このエラーでした
956NAME IS NULL:2008/03/25(火) 21:46:19 ID:3ZCn973U
>>954
マジほしい
2005でもないのか?
957NAME IS NULL:2008/03/25(火) 23:54:33 ID:???
時代は2008なんだがw
958NAME IS NULL:2008/03/26(水) 00:47:15 ID:???
>>956
2005じゃ無い。
2008は有る。
959NAME IS NULL:2008/03/26(水) 12:41:31 ID:???
>>949
自分のメモに書いてあったんでコピペしとく。

問題
SQL Server をインストールした後、Management Studio がプログラム メニューにない。

解決方法
Start -> Run -> appwiz.cpl から Microsoft SQL Server 2005 の構成を変更し、
ワークステーション コンポーネントをアンインストールする。その後 Tools\Setup.exe を起動してワークステーション コンポーネントをインストールする。

説明
この問題は次のような時に起きる。
Visual Studio 2005 をインストールするなどして、SQL Server Express がインストールされる。
その後に SQL Server の上位エディションをインストールすると、ワークステーション コンポーネントのインストールがブロックされるため、
Management Studio がインストールされない。
960NAME IS NULL:2008/03/26(水) 12:42:36 ID:???
>>952
一ヶ月ほど前のバックアップをもどす。
SQL Server のサービスを停止する。
壊れた mdf と ldf を上書きする。
SQL Server のサービスを起動する。
DBCC CHECKDB を実行する。
961NAME IS NULL:2008/03/26(水) 17:04:02 ID:???
レスありがとうございます。
----------
一ヶ月ほど前のバックアップをもどす。
SQL Server のサービスを停止する。
壊れた mdf と ldf を上書きする。
SQL Server のサービスを起動する。
---------------
この時点でオブジェクトエクスプローラーでデータベースを確認すると、
(未確認)となってしまっていてDBCC CHECKDBが実行できないのです。
実行できる方法はありますか?
962NAME IS NULL:2008/03/27(木) 00:26:55 ID:???
>壊れた mdf と ldf を上書きする。
デタッチしてから上書き
そんでアタッチ
としてもだめかね?
963NAME IS NULL:2008/03/27(木) 01:43:19 ID:???
デタッチもできないんです。
964NAME IS NULL:2008/03/27(木) 02:05:39 ID:???
>>961
それは激しく壊れているのでバックアップから戻しなさいという意味だね。
非公開の方法だけどその状態でも多少なんとかなる方法はある。
だけどできるかどうかは保障しないし、データの整合性なんかも保障されないよ。

データベース名や ldf のパスは自分の環境に適当に変えて、自分でリスクを負ってやってね。

-- システム テーブルを直接更新できるように設定を変える
USE master
GO
sp_configure 'allow updates',1
GO
RECONFIGURE WITH OVERRIDE
GO
-- データベース ステータスを緊急に変更する
UPDATE master..sysdatabases SET status = 32768 WHERE name = 'Northwind'
GO
-- トランザクション ログ ファイルを再構築する
USE master
GO
DBCC REBUILD_LOG('Northwind', 'C:\Program Files\Microsoft SQL Server\MSSQL$INSTANCE\Data\northwnd.ldf')
GO
-- データベースの整合性をチェックする
USE master
GO
DBCC CHECKDB(Northwind)
GO
-- これで直らない場合は適宜 CHECKDB のオプションを増やしていくか、BCP でデータだけサルベージする

-- データベース ステータスをを緊急からオンラインに戻す
UPDATE master..sysdatabases SET status = 16 WHERE name = 'Northwind'
GO
-- システム テーブルを直接更新できるようにした設定を戻す
sp_configure 'allow updates',0
GO
RECONFIGURE WITH OVERRIDE
GO
-- もう一度データベースの整合性をチェックする
USE master
GO
DBCC CHECKDB(Northwind)
GO
-- データベースのプロパティが変わってないかチェックする
965NAME IS NULL:2008/03/27(木) 10:43:25 ID:???
>>964
ありがとうございます。
やってみます。
966NAME IS NULL:2008/03/27(木) 11:30:01 ID:???
DBCCでの構文エラーが出てしまいます。
もう少しSQLについても調べてみます。
967NAME IS NULL:2008/03/27(木) 14:53:08 ID:???
SQLの質問なんですが、SQL Serverなのでこちらに質問させてください。
SQL Server 2000

(入力)
XX08-001-0AB
XX07-087-7BB
XX07-401-7BB
XX07-500-10CC

(欲しい出力)
XX08-001
XX07-087
XX07-401
XX07-500

二つ目のハイフン以降を切り落としたものが欲しいのですが、
SQLだけで処理できますか?
968NAME IS NULL:2008/03/27(木) 15:59:09 ID:???
SELECT LEFT(項目,8)   とか?
969NAME IS NULL:2008/03/27(木) 17:00:11 ID:???
すいません、例が悪かったです。
それだったら確かに簡単ですよね。

(入力)
XX08-1-0AB
xx07-87-7BB
XX07-500-10CC

(出力)
XX08-1
xx07-87
XX07-500

です。お願いします。
970NAME IS NULL:2008/03/27(木) 20:03:59 ID:???
これでいけるのでは?
substr(項目, 0, instr(項目, '-', -1, 1))
971NAME IS NULL:2008/03/28(金) 08:56:47 ID:???
'instr' は 関数名 として認識されません。

エラー出ました↑
SQL Server2000 にはinstr無いんですね。
代わりにcharindexを使って解決できました。

substring(項目, 0, charindex( '-', 項目, charindex( '-', 項目) +1))

同じ関数がネストして、なんか不格好なのですが・・・
972NAME IS NULL:2008/03/28(金) 16:01:52 ID:???
>>971
ストアドファンクション使えばいいと思うよ。
973NAME IS NULL:2008/03/28(金) 17:39:00 ID:???
2000でインデックスチューニングウイザードを行おうとしたら
ワークロードが必要といわれました。
SQLプロファイラで何かすればいいとどこかに書いてあったのですが
ワークロードはどうやって作ればいいのでしょうか?
974NAME IS NULL:2008/03/30(日) 12:37:50 ID:???
>>973
役に立たないウィザードに頼らず、
自分でインデックス張れ。
ゆとりか?
975NAME IS NULL:2008/03/30(日) 15:38:15 ID:???
>>973
どんな使い方をするかシナリオがないとどうチューニングしていいかわからないだろ。
そのシナリオがワークロード。
内容はそれなりの分量になるからまずBooks Onlineを読もう。
976NAME IS NULL:2008/03/31(月) 17:50:53 ID:???
SQLServerでの文字列ソート順序と.NETでの文字列ソート順序が異なるようなのですが、一致させるためにはどの部分をいじればいいんでしょうか・・・教えてエロイ人(´・ω・`)
977NAME IS NULL:2008/03/31(月) 20:50:28 ID:???
照合順序でググって美奈代
978976:2008/03/31(月) 23:13:40 ID:???
Windows照合順序とかJapanese_90あたりがくさそうですが、よくわからず・・・
明日また調べてみるです。
979NAME IS NULL:2008/04/01(火) 20:36:52 ID:VVV3Eqei
>>911
超遅レスですがありがとうございました。

そこはインデックスしか指定できないと思ってました。
980NAME IS NULL:2008/04/02(水) 07:01:56 ID:???
Windows2000Server Standard + SQLServer2000 Standard(SP4)で動いている
システムがあるのですが、サーバマシンの挙動がおかしくなっているので、
マシンのリプレースを考えています。

SQLServer2000をそのまま使った場合、Windows2003Serverは32Bit版と
64Bit版(WOW64上で動かす)とではどちらが安定性や速度的に優位でしょうか?
981NAME IS NULL:2008/04/02(水) 19:29:51 ID:???
今日、ビューのDDLでサブクエリにWITH(NOLOCK)とかWITH(ROWLOCK,UPDLOCK)
などをつけてるのを発見した。ビューのSELECT文にこんなのつけて何の意味がある
のかさっぱりわからない。ぐぐってもよくわからない。SQL Server 2000です。
982NAME IS NULL:2008/04/02(水) 19:39:46 ID:7rgZDuiK
TEST_TABLEというテーブルの、binary型のb_dataというフィールドのバイナリデータを
image型に変更したい場合、

SELECT CAST(b_data as image) FROM TEST_TABLE

でよろしいでしょうか?
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200508/05080029.txt
に記載されていることを実現したいと思っております。
983NAME IS NULL:2008/04/02(水) 19:41:04 ID:7rgZDuiK
↑すいません、SQLSERVER2005です。
984NAME IS NULL:2008/04/02(水) 20:34:56 ID:???
>>981
Books onlineは検索したのか?
985NAME IS NULL:2008/04/02(水) 21:20:15 ID:lPTIXeR8
>>984
はい、CASTのページを確認しましたが、使用例がよくわかりませんでした。
http://oshiete1.goo.ne.jp/qa1104315.html
こちらの記載となんとなく違うような・・・
986NAME IS NULL:2008/04/02(水) 23:51:26 ID:???
>>985
NOLOCKとかROWLOCKとかはCastじゃなくてテーブルヒント。
BooksOnlineをNOLOCKで検索してFROM句とロックのヒントという項目を読め
987NAME IS NULL:2008/04/03(木) 02:44:34 ID:???
PerlからSQL Serverにつなぎたいのですが、お勧めの
モジュール等ありましたらご教示ください。
988NAME IS NULL:2008/04/03(木) 10:00:10 ID:???
お勧めといっても、選択肢は
1.Win32::OLEを使ってADOアクセス。
2.DBD::ADOドライバを使ってDBIアクセス。
3.DBD::ODBCドライバを使ってDBIアクセス。
の3つしかない。

1.はコード量が多くて汚くなるけど、自由度は一番高いんじゃないかな。
  ActivePerlなら標準でついてくるというメリットもある。
2.はすっきりと書けるけど、バインド処理に不具合(回避可能)あり。
3.はODBCというだけで敬遠して使ったことないけど案外いいかも。

ちょっとしたSELECT程度なら、すぐに始められる1.でいいと思うよ。
989NAME IS NULL:2008/04/03(木) 18:47:58 ID:bavQZfEk
>>986
ありがとうございました。解決いたしました。
結局、最後までBOOKS ONLINEに書かれていることは理解できませんでしたがw
990NAME IS NULL
>>988
非常に有益な情報、有難うございました。
本当に参考になりました。

個人的にはDBIがなれていて好きなので(Postgres等で
使用経験あり)、DBD::ODBCを使用してみようかと思って
おります。

有難うございました。