5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Microsoft SQL Server 総合スレ 6

1 :NAME IS NULL:2008/04/05(土) 15:31:54 ID:???
Microsoft SQL Server 総合スレ 6

2 :NAME IS NULL:2008/04/05(土) 15:33:19 ID:???
Microsoft SQL Server (Transact-SQL) の総合スレッドです。

・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/


・過去スレ

Microsoft SQL Server 総合スレ 5
http://pc11.2ch.net/test/read.cgi/db/1175091880/l50

Microsoft SQL Server 総合スレ 4
http://pc11.2ch.net/test/read.cgi/db/1142315583/l50

Microsoft SQL Server 総合スレ3【MS SQL】
http://pc11.2ch.net/test/read.cgi/db/1123981539/l50

MS SQL Server 総合スレ2
http://pc11.2ch.net/test/read.cgi/db/1093012583/l50

3 :NAME IS NULL:2008/04/07(月) 07:59:59 ID:7wzqdvA4
ではさっそく

SANに2台サーバが接続されています
片方のサーバのSQLSERVFRでオープンしているデータファイルをもう片方のサーバのSQLSERVERから読み取り専用で開く事は可能ですか?
バージョンは2005です

4 :NAME IS NULL:2008/04/08(火) 02:32:07 ID:???
できない気がする。

5 :NAME IS NULL:2008/04/08(火) 02:34:12 ID:???
MSDE 2000、Books Online で FETCH を見ると RELATIVE に指定する変数は
smallint でも良いことになっているけど、変数の値が負だと @@FETCH_STATUS が -1 になった。
型を int に変えたら直った。
これで4時間悩んだ。MS頃す

6 :NAME IS NULL:2008/04/08(火) 15:45:11 ID:???
>>3
無理。

7 :NAME IS NULL:2008/04/08(火) 21:13:09 ID:???
データベースAの全テーブルとデータベースBの全テーブルのコンペアってどうやります?
やっぱり全部テキストに落としてから比較?

8 :NAME IS NULL:2008/04/11(金) 09:46:27 ID:l77RsaBa
SQLについて教えてください。

とあるNVARCHAR列に半角が入っているものを検索したいのですが
列 like '%A%' OR 列 like '%a%' || ・・・・・・みたいに
一文字ずつ半角コードと総当りさせるORを書くしかないのでしょうか?
なにかいい方法はありますでしょうか?



9 :NAME IS NULL:2008/04/11(金) 10:53:30 ID:l77RsaBa
事故解決しました。
Access使って

SELECT * FROM ××マスタ
WHERE StrComp(列名,StrConv(列名,4),0) != 0


10 :NAME IS NULL:2008/04/11(金) 16:06:37 ID:???
SQLについて教えてください
DATATIME型として入っている、部分を取得して
GROUP BYでまとめたく以下のようなSQLを作成しました。

SELECT substring(convert(char,U_DATE,111),1,10) as U_DATE,count(*)
FROM tb_ticket
GROUP BY U_DATE

U_DATEが同一のものがまとまってほしいのですが、全レコードが出力されてしまい
countがすべて1となってしまうのです。
datatimeをGROUP BYするにはどうしたらよいのでしょうか

11 :NAME IS NULL:2008/04/11(金) 18:40:38 ID:???
日付のyyyy/mm/ddでカウントしたいなら
GROUP BY の条件も GROUP BY substring(convert(char,U_DATE,111),1,10)

12 :NAME IS NULL:2008/04/14(月) 09:57:59 ID:???
ジョブについて教えてください。

とあるバッチ(hoge.vbs)があります。
これをジョブで起動するのですが。
cscript.exe hoge.vbs

これをhoge.vbsの実行が終わったら1秒空けて(あけなくてもいいかも)
またhoge.vbsを実行したいです。永久に。

このような処理をジョブで可能でしょうか?

よろしくお願いいたします。

13 :NAME IS NULL:2008/04/14(月) 22:22:05 ID:???
>>12
SQL Server エージェントをみてみたら1分間隔までは設定できるみたいだけど、1秒というのはできないっぽい。
(まあ、ジョブを60個作って無理やり動かせば可能だけど)
ただ、SQL Serverエージェントで処理する必要があるの?

例えばhoge.vbs内で無限ループさせるとか、hoge.vbsを呼び出すバッチファイルやスクリプトを作成するとか。

あと、1秒空けるのは、sleepを使えばCPU時間を消費しないで待たせることは可能。

最初の起動としては、スケジュールを作成するときに、スケジュールの種類を"SQL Serverエージェント開始時に
自動的に開始"を設定することでできるし、Windowsタスクの場合でも"システム起動時"に設定すれば起動できるよ。

どんな処理かわからないから、漠然としか回答できないけど、こんな感じでいいかな?


14 :NAME IS NULL:2008/04/14(月) 22:47:09 ID:???
>>11
ありがとうございます。
抽出したい件数がカウントできました!

15 :NAME IS NULL:2008/04/15(火) 06:36:41 ID:???
>>12
pingで1秒waitっぽいことできるでしょ


16 :NAME IS NULL:2008/04/15(火) 14:28:25 ID:???
varcharの列でnullだったり空だったりすると抽出条件が面倒なので、
空で統一したら便利なんじゃないかと考えました。

nullを許容のチェックを外して既定値を '' にしたんですが、
運用していく上でなにか不都合があったりするのでしょうか?

17 :NAME IS NULL:2008/04/15(火) 18:53:02 ID:???
>>16
ビジネスロジック上nullと空を区別する必要ないならいいんじゃないの?

あと最近うんちがRAIDになってしまう
家でずぼっと出て会社で残りをするような


18 :NAME IS NULL:2008/04/15(火) 23:39:15 ID:???
ちょっと質問ですが、今までOracleを使ってたのですが、
少しの間だけ、SQLSERVERを使っているプロジェクトに入ることになりました。
SQLSERVERを使ってる人はだいたいクエリーツールは何を使っているのでしょうか?
クエリーアナライザーを使うのが多いのでしょうか?
職場だとフリーやシェアのソフトを入れても特に問題は無いです。

19 :NAME IS NULL:2008/04/16(水) 00:13:38 ID:???
2000ならクエリアナライザ使ってるだろうな
あとVisualStudio

20 :NAME IS NULL:2008/04/16(水) 00:15:41 ID:???
意外とaccess

21 :NAME IS NULL:2008/04/16(水) 00:26:10 ID:???
Access2003以下のMSSQL2005触らせなさは異常

22 :NAME IS NULL:2008/04/16(水) 01:15:36 ID:???
>18
2005ならManagementStudio、2000ならクエリアナライザがあるが2005のManagementStudioを使った方がいろいろ便利だと思う。
Oracleと違って標準で用意されてるツールで大体十分だと思うよ。

23 :16:2008/04/16(水) 09:14:29 ID:???
>>17
サンクス。区別する必要が無いときはそれでやってみます。


24 :NAME IS NULL:2008/04/17(木) 13:50:03 ID:tnV6pzL3
integration serviceについて教えて下さい。

当方、2003serverとVB6.0を用いて、integration serviceでデータのインポートを呼び出そうとしているのですが、可能でしょうか。
本やネットを調べても、.netやbusiness intelligence development studioの話題しか出てこないのですが……。

25 :NAME IS NULL:2008/04/17(木) 13:50:46 ID:???
上げてしまいました、すみません……。

26 :NAME IS NULL:2008/04/18(金) 10:31:39 ID:???
悩み中…

SQL Server 2000で、約2億件のデータから特定の条件の約2000万件のデータを削除したい
普通に delete from A where B=C とかではあっさりタイムアウトするので分割削除したい
delete top 1000 from A where B=C みたいなことって出来るんでしょうか?

27 :NAME IS NULL:2008/04/18(金) 11:38:05 ID:hKVau2G8
で、それを2万回やるの?

28 :NAME IS NULL:2008/04/18(金) 13:01:03 ID:???
そうw

29 :NAME IS NULL:2008/04/18(金) 13:06:21 ID:nmpP6AcP
他の列使って絞り込みながら少しずつ削除とかできないの?

30 :NAME IS NULL:2008/04/18(金) 13:08:01 ID:???
>>29
やっぱそれですかねぇ…
それやりかけて嫌になって聞いてみたんですが

31 :NAME IS NULL:2008/04/18(金) 13:30:57 ID:???
>26
delete A from A a where exists
(select * from
(select top 1000 * from A) b
where A.key = B.key)
こんな感じ?
レコード数が多いと微妙な気がするけど。
もうちょっと条件入れて少しづつ消した方が確実かなと思う。

32 :NAME IS NULL:2008/04/18(金) 13:32:14 ID:???
>>30
SQL Server 2005はDELETEでTOPの指定はできるけど、SQL Server 2000ではできない。

その辺りの方法については、Pass Jのフォーラムとか川端さんのブログで見た記憶があるけど。



33 :NAME IS NULL:2008/04/18(金) 13:33:34 ID:???
>>26
bcpを使って条件付で抜き出す。
truncat tableでテーブルクリア。
bcp最小ログでデータをロード。

34 :NAME IS NULL:2008/04/18(金) 14:53:09 ID:???
Cumulative update package 7 for SQL Server 2005 Service Pack 2
http://support.microsoft.com/kb/949095/en-us

Service Pack 3 出すとサポート期間延ばさないと逝けないし
Service Pack としては出す気ないんだろうなぁ・・・。

35 :NAME IS NULL:2008/04/18(金) 17:11:34 ID:???
1行ずつ消していけばよい

36 :NAME IS NULL:2008/04/18(金) 19:14:43 ID:???
>>24
SSISを実行するSQL Server Agentのジョブを作成して、
sp_start_jobで作成したジョブを実行すればできると思う。


37 :NAME IS NULL:2008/04/19(土) 01:03:17 ID:???
>>26
deleteのコストは高い。
論理削除ではどう?

38 :NAME IS NULL:2008/04/19(土) 01:10:10 ID:???
2億件のレコード数をいっそう増やすのか

39 :NAME IS NULL:2008/04/19(土) 09:23:22 ID:???
インデックスを付けるとどうかな?
10分の1まで絞れるなら少しは効果が出そうだけど。

40 :sage:2008/04/23(水) 17:17:00 ID:YvQLSJqa

VB2005
SQL Server 2005 Express Edition
サーバOS:Windows 2000 Server
クライアントOS:Windows XP

ADOでSQLサーバtestに

' 接続文字列を生成する
Dim stConnectionString As String = String.Empty
stConnectionString &= "Data Source = test;"
stConnectionString &= "Initial Catalog = testdb;"
stConnectionString &= "Integrated Security = SSPI;"

' SqlConnection の新しいインスタンスを生成する (接続文字列を指定)
Dim hConnection As New System.Data.SqlClient.SqlConnection(stConnectionString)

' データベース接続を開く
hConnection.Open()

' 接続に成功した旨を表示する
MessageBox.Show("Microsoft SQL Server に接続されました")

' データベース接続を閉じる (正しくは オブジェクトの破棄を保証する を参照)
hConnection.Close()
hConnection.Dispose()

として接続しようとすると

サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときに
このエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server
への接続を開けませんでした)

というエラーメッセージが出て
hConnection.Open()
のところで中断します。


サーバのリモート接続は
ローカル接続およびリモート接続−TCP/IPおよび名前月パイプを使用する
に設定しているのですが…何がいけないのでしょうか?


41 :NAME IS NULL:2008/04/23(水) 17:44:41 ID:???
>>40
express edtionの場合デフォルトのサーバー名がインスタンス名付きになってるから
それが足りないのでは。
Data Source=test\sqlexpress
Data Source=.\sqlexpress


42 :40:2008/04/23(水) 17:59:30 ID:???
Data Source=test\sqlexpress
にしたところ、

このログインで要求されたデータベース "testdb" を開けません。ログインに失敗しました。
ユーザー '(ドメイン名)\(ユーザー名)' はログインできませんでした。

というエラーメッセージに変わりました。
少しだけ進展したような気がしますがどう対応していいかわかりません。
ご存知の方いましたら教えてください。

あと、sage間違いすいません。

43 :NAME IS NULL:2008/04/23(水) 18:46:30 ID:???
>>42
DBにアクセスするプログラムをVSのウイザードで自動生成して出来たものを調べるのが近道。
接続文字列は*.exe.configにあるはず。

44 :42:2008/04/23(水) 19:04:10 ID:???
すいません、自動生成の仕方を教えてください;

45 :NAME IS NULL:2008/04/23(水) 21:07:51 ID:???
>>44
ネットワークでつかえるように設定しなきゃダメよ。
localならいけるんでしょ?

46 :NAME IS NULL:2008/04/23(水) 21:32:43 ID:???
暇だから、SQL Server 2008 新機能紹介 全国弾丸ツアー 2008 とやらに行こうと
思ったら、既に東京会場は満員だった orz

とりあえず追加開催に期待するか。

47 :NAME IS NULL:2008/04/24(木) 09:28:38 ID:TQpLkKjm
>>40 >>42
データベースにユーザ追加してないんじゃないの。
Windows 認証でも Windows Server にユーザ追加しているからって
データベースにユーザ追加していなかったら接続できない。

使い始めの頃それでずいぶん悩んじゃったなぁ。

48 :NAME IS NULL:2008/04/24(木) 14:10:18 ID:???
テーブルにインデックスを貼ったらSelect文の速度が
早くなったんですが、一部のSQLで逆に遅くなる現象がでました。
インデックスを貼って遅くなる原因は何が考えられるのでしょうか?

49 :44:2008/04/24(木) 16:28:55 ID:???
>>45>>47
指摘された点を見直したら出来ました!
ありがとうございました。

50 :NAME IS NULL:2008/04/24(木) 18:13:59 ID:???
>48
一部のSQLってのがUPDATEとかINSERTなら
インデックスも更新してるから遅くなることがあるかも

51 :NAME IS NULL:2008/04/24(木) 19:44:51 ID:???
>>48
INDEXが効果を発揮するのって、最低でも100件以上の行があるイメージがある。

INDEXを付けたせいで遅くなる操作もいくつかあるよ。

52 :NAME IS NULL:2008/04/24(木) 23:39:52 ID:???
>48
実行プランがどうなってるかチェックしたら?
使ってほしいインデックスと違うインデックスが使われたりとかね。

53 :NAME IS NULL:2008/04/24(木) 23:58:15 ID:???
取得件数が全レコード数の半分とかなら
フルスキャンの方が速い

54 :NAME IS NULL:2008/04/25(金) 01:22:54 ID:???
今月から仕事でSQLserverさわってるんですが
それ関連の資格を取るなら何がおすすめですか?

55 :NAME IS NULL:2008/04/25(金) 07:03:35 ID:???
>>54
普通免許


56 :NAME IS NULL:2008/04/25(金) 11:46:32 ID:???
トラブル時に客先へ急行するためですねw

57 :NAME IS NULL:2008/04/25(金) 12:40:03 ID:???
的確だなw

58 :NAME IS NULL:2008/04/26(土) 13:04:20 ID:2E/8ALfP
サーバ側
OS:Windows Vista Home Premium
DB:SQL Server 2005 Express Edition

クライアント側
OS:Windows XP Pro


クライアント側からADO接続でVistaのSQL Serverに接続出来ません。
なんか解放する必要があるのでしょうか?

サーバー側がXPのときは接続されるけど・・・


なぜ?? ご教示を (m__m)


59 :NAME IS NULL:2008/04/26(土) 15:21:55 ID:???
鯖側でADOが使えるならネットワークの設定。
デフォルトはポートが閉じられている。
XPの方は誰かが開けたんだろう。

60 :NAME IS NULL:2008/04/26(土) 19:36:39 ID:55VyVdYl
SQL Server 2005 Enterprise Edition 180日間 限定評価版のセットアップに関する質問です。

Setup.exeを実行するとログを確認するようポップアップメッセージが表示されセットアップが中断されるのですが、
ログには特にエラーメッセージ等が出力されません。
空きハードディスク容量、必要システムのメモリとOSを確認しましたが条件を満たしていました。
どうすればインストールできるでしょうか?また、他になにか出力されるログ等ないでしょうか?


実行、エラー発生、ログ確認までの操作手順

1.SQLEVAL_JPN.EXEをダウンロード。
2.SQLEVAL_JPN.EXEを実行。解凍先に既存の c:\sql を指定。
3. C:\sql\servers を実行。
4.下記のメッセージがポップアップ表示。
---------------------------
Microsoft SQL Server 2005 セットアップ
---------------------------
SQL Server セットアップで予期しないエラーが発生しました。
詳細については、%ProgramFiles%\Microsoft SQL Server\90\Setup Bootstrap\LOG にある
セットアップの概要ログ ファイル (Summary.txt) を確認してください。

---------------------------
OK
---------------------------

5. C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Summary.txt に下記のログを出力。

Microsoft SQL Server 2005 9.00.1399.06
==============================
OS Version : Microsoft Windows 2000 Professional Service Pack 4 (Build 2195)
Time : Sat Apr 26 19:23:53 2008

以上、よろしくお願いいたします。

61 :NAME IS NULL:2008/04/26(土) 20:46:48 ID:Ra21+QYi
Windows 2000/XP Professional にインストールできるのは
Express/Developer だけのはずですが。

62 :NAME IS NULL:2008/04/26(土) 20:50:51 ID:Ra21+QYi
と思ったが調べてみたら
Windows 2000 Professional Edition SP4 も動作対象に入ってるのな。
間違って記載されてるんじゃないのか、これ

63 :NAME IS NULL:2008/04/27(日) 06:37:37 ID:???
WindowsInstallerを最新にしてみるとか。
Enterprise Editionをクライアント系のOSに導入するとライセンス上の制約で
いろいろ出来ないことがあるから、パンフレベルでは動作リストに載ってないことが多い。

64 :NAME IS NULL:2008/04/27(日) 10:11:52 ID:0RcOeyfW
製品版のシステム用件にはクライアントOSははいってないんだけどね、
なぜか評価版では入ってるんだよね。

65 :NAME IS NULL:2008/04/27(日) 23:04:09 ID:???
declare @rc int
select @rc = 10000
exec_next:
delete from t1 where c1 = 'a'
if @@rowcount > 0 goto exec_next
select @rc = 0
ちょっとづつ消すとか


66 :NAME IS NULL:2008/04/29(火) 06:48:18 ID:hY5+XXEW
SQL鯖2005でイースターエッグが発見されたようです。
ビルゲイツ→ビ・泣Qイツ

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=44601&forum=26


67 :NAME IS NULL:2008/04/29(火) 12:01:10 ID:???
>>66
文字化けした場所は違うけど再現した
9.0.3159


68 :NAME IS NULL:2008/04/29(火) 12:38:18 ID:???
マジで?

連休明けに会社のマシンで試してみよう。

69 :NAME IS NULL:2008/04/29(火) 13:51:49 ID:???
>66
text型をレプリケーションすると
4000バイトごとに2バイト文字が境界に来ると半分\0に置き換わる現象を思い出した。

70 :NAME IS NULL:2008/05/02(金) 21:18:36 ID:???
初心者ですがSQL serverはXPにインストールできますか?

71 :NAME IS NULL:2008/05/02(金) 21:32:00 ID:???
無料のなら出来る

72 :NAME IS NULL:2008/05/02(金) 21:51:22 ID:???
永遠無料版?それとも試用版かな?
レスサンクスです

73 :NAME IS NULL:2008/05/02(金) 22:16:18 ID:???
システム用件ぐらい自分で確認しなよ。
http://www.microsoft.com/japan/sql/prodinfo/sysreqs/default.mspx

XP って言ったって、HOME と Professional (etc...) じゃ違うんだし。

74 :NAME IS NULL:2008/05/03(土) 04:09:36 ID:???
HOMEにインストールできなかったのか

75 :NAME IS NULL:2008/05/03(土) 12:03:10 ID:???
Express Edition ならできるだろ?

それ以外の Edition を HOME にインストールしたがる奴はかなり珍しいと思うが。

76 :NAME IS NULL:2008/05/03(土) 18:01:15 ID:???
EEなんかで満足できるかよ

77 :NAME IS NULL:2008/05/03(土) 18:15:07 ID:???
さすがにその餌じゃつれないと思うな。

78 :NAME IS NULL:2008/05/06(火) 18:08:34 ID:???
the FILESTREAM Attributeについての情報は?(日本語で)

79 :NAME IS NULL:2008/05/09(金) 11:52:45 ID:pp+XZC4e
ム板とどっちで聞こうか迷ったんですけど・・・

VB6+ADO2.8って、データベースミラーリングのフェールオーバーってサポートしていますか?
SQLServerにデータベースミラーリングを設定して、↓の接続文字列で接続してみたのですが、
切り替わりませんでした

Provider=SQLOLEDB;Data Source=sql-principa;Failover Partner=sql-mirror;Initial Catalog=mirror_test;User ID=sa;Password=test;


80 :NAME IS NULL:2008/05/09(金) 13:02:22 ID:???
>>79
ProviderとしてSQL Native Client(SQLNCLI)を指定すれば大丈夫なはず。

あと注意点としてConnectionTimeoutとCommandTimeoutがデフォルトのままだと
フェールオーバーする前にタイムアウトしたりする。


81 :ビ・泣Qイツ :2008/05/09(金) 21:05:07 ID:???
>>66
はァ?
何か問題でもあるのか?

俺は半角文字さえちゃんと扱えれば何も困らんよ


82 :NAME IS NULL:2008/05/09(金) 21:30:24 ID:qZP+UMRS
>>81
ジャアハンカクデカキコメヨ?


83 :ビ・泣Qイツ:2008/05/10(土) 01:28:19 ID:???
マイクロソフト製品は勘定系でSQL鯖を使ってしまうような
命知らずな日本人デバッガー(奴隷)により支えられています。

84 :NAME IS NULL:2008/05/11(日) 00:43:04 ID:LC/4+jXW
質問です。
今、SQLSERVER2005の入門書を読んで、VBでデータベースを扱う簡単なアプリを
試作しています。スタンドアローン環境です。
一つのデータベースに複数のテーブルを作ったのですが、これらはファイルとしては
どこに保存されているのでしょうか?
将来別のPCに移植する場合、アプリだけでなくこのDBファイルも移動したいのですが、
実体がどこにあるのかわからず不安です。
お願いします。

85 :NAME IS NULL:2008/05/11(日) 01:07:17 ID:???
c:\program files\microsoft\sql server\..\data

こんなかんじだった



86 :79:2008/05/11(日) 10:57:20 ID:???
>>80
うまく動きました。
どうもありがとうございました。

87 :NAME IS NULL:2008/05/11(日) 10:57:26 ID:???
>>84
> 一つのデータベースに複数のテーブルを作ったのですが、これらはファイルとしては
> どこに保存されているのでしょうか?

SSMS (SQL Server Management Studio) 使ってるなら、データベースのプロパティの
どっかで見れたと思う。

SSMS 使ってないなら、

select * from sys.master_files

とか

select * sys.database_files

で見れるかも。(手元に実機がないので試せない。)

参考: http://msdn.microsoft.com/ja-jp/library/ms174397.aspx
   http://msdn.microsoft.com/ja-jp/library/ms186782.aspx

あとデータファイル移動するなら、アタッチ/デタッチについて調べておくと幸せになれ
るかも。

参考: http://msdn.microsoft.com/ja-jp/library/ms190794.aspx

88 :NAME IS NULL:2008/05/11(日) 12:05:24 ID:???
>>85>>87
ありがとうございました。
とっても役にたちます!

89 :NAME IS NULL:2008/05/12(月) 18:27:03 ID:???
>>66-67
MSSQL2000 に付いてきたクエリアナライザで実行したら問題なかった。
Management Studio の不具合な気がする


90 :NAME IS NULL:2008/05/13(火) 16:56:43 ID:esOdpdnX
asp.net で表示させても問題ないから
Management Studio のバグやね。

91 :NAME IS NULL:2008/05/13(火) 18:44:55 ID:???
Management Studioの日本語対応は糞すぎ

92 :NAME IS NULL:2008/05/15(木) 16:58:56 ID:DjfxOw0v
今動いているSQLServer2005のCAL数を調べるには
どこを見ればいいですか?
CDROMメディアしかないので箱や紙ではわかりません。

93 :NAME IS NULL:2008/05/16(金) 01:55:02 ID:fed44/a3
Reporting Servicesの構成ツールで名前付インスタンスの場合、
仮想ディレクトリを、[ホスト名$別名]で作成できません。
どうしたらいいでしょうか。。。


94 :NAME IS NULL:2008/05/18(日) 00:26:11 ID:rZA4K5Y5
2000同士でリンクサーバしてるんですけど
リンク先のテーブルにロック掛けようとしたら
「リモート データ ソースのインデックスまたはロッキング ヒントを指定できません。」
なんてエラーが出ます
ロッキングヒントを指定できません・・・・
と言うことは、リンクサーバ経由でのテーブルロック・・・どころかロック自体無理と言うことですか?

トランザクションの中に入れちゃってるから他のパスでロックするわけに行かないし・・・
めんどくさいトランザクションのかけ方をやっと見つけ出したのに

95 :NAME IS NULL:2008/05/18(日) 17:56:57 ID:0NqsCSCu
分散トランザクションなんて
マイクロソフトに作れるわけないじゃん。

96 :NAME IS NULL:2008/05/21(水) 17:18:18 ID:???
Oracleで日付型のデータを文字列yyyymmddで取り出したい場合
select to_char(dt, 'yyyymmdd') from tt;

などとしますがSQL Serverの場合はどのようにしたらよいでしょうか?


97 :NAME IS NULL:2008/05/21(水) 20:02:11 ID:???
>>96
CONVERT

98 :NAME IS NULL:2008/05/21(水) 21:58:42 ID:???
しかしこの CONVERT のスタイルを数値で指定すると言う前近代的な仕様は
何とかならんもんかな。

せめて Excel 互換にするとかしろよ。


99 :NAME IS NULL:2008/05/21(水) 22:16:24 ID:???
教えてください
javaプログラムからインサート文でデータを追加しているんですけど
追加したデータがテーブルの一番最後の行じゃなと思っていた動きができません
今のところ偶然そうなってるので問題なく気にしてなかったんですけど
というか、最後に追加されものだと疑問を抱かなかったんですけど
今日カタカナの前にアルファベットかなにかをいれると
カタカナの行の前に挿入されました
どの列のせいか分かりませんが
なにか挿入される優先順位があるのでしょうか?

100 :NAME IS NULL:2008/05/21(水) 22:37:34 ID:???
>>99
やべー

101 :NAME IS NULL:2008/05/21(水) 23:18:32 ID:???
>Excel 互換
ここ、笑っていいんだよね。

102 :NAME IS NULL:2008/05/21(水) 23:20:07 ID:???
>>99
INSERTによる行の順番は忘れろ。
欲しい行の順番は ORDER BY 等でなんとかするのがSQL、
挿入の順番などを考えていたら、運用でつまずく。

103 :NAME IS NULL:2008/05/22(木) 00:16:21 ID:???
>>102
マジですか?
ORDER BYっていうのはjavaでも使えるんですか?
そのままSQL文をjavaプログラムに書いても使えないですよね、スレ違いすみません

詳しく説明させて下さい
今オークションチックなものを作っていて
決まりははいんですけど、ID列&PS列は全部バーチャルで半角英数で登録しています
他に手動でインクリメントしていくnamber列があります
インサート時テーブルの行数を取得して、行数+1をnamber列に入れるといったものです

他に入札金額を入れるmoney列

それとインサートした時間をString型で入れる列があります
(でもこの時間はちょっと変更する可能性があります)

どの列が利いているのか分かりませんが
money列が一番金額の高い人が最後の行になるようにして入札テーブルは問題なく動いてます

でも今日他の会員登録テーブルにカタカナを入て
その後他の会員をインサートしたら、最後から2行目に挿入されました
それでインサート文は最後の行に挿入されるんじゃないことに初めて気付かされました

今まで不具合なく動いていたオークションテーブルにも
不具合が生じるじゃないかと心配になって質問しました
数字が大きい順とか何か単純な決まりはないのでしょうか?

104 :NAME IS NULL:2008/05/22(木) 00:23:55 ID:???
>>103
SQLとかの前にDBっていうものを勉強したほうがいい。
ファイルじゃないんだから順序なんて存在しない。


105 :NAME IS NULL:2008/05/22(木) 00:28:14 ID:???
>>103
ついでに言うなら、あなたの懸念している通り、今うまく動いているのはただ単なる偶然です。錯覚です。
不具合はおそらく出ます。心配する暇はないです。
すぐに改修したほうがいい。仕事でしてるのならね。
順序つけるのは>>102さんの言うとおりORDER BY を使えばいい。
多分それで全てが解決はできないけどね。


106 :NAME IS NULL:2008/05/22(木) 00:52:32 ID:???
>>101
>> Excel 互換
> ここ、笑っていいんだよね。

実際 Excel は無茶苦茶高機能だから、完全互換は無理だと思うが
'YYYY/MM/DD' 関連ぐらいは、サポートしてくれ。

'YYYY/MM/DD' なら、まだなんとなくわかるけど、111 だとヘルプ
見ないとさっぱりわからん。

>>103
> 他に手動でインクリメントしていくnamber列があります
> インサート時テーブルの行数を取得して、行数+1をnamber列に入れるといったものです

DB なに使ってるのか知らんけど、たいがいの DB に連番を入れる機能があるからそれ使っ
たほうがいい。その列を何に使ってるのかわからんけど、複数人がほぼ同時に入札したら
同じ番号がつくかもしれないよ。

>>104
> SQLとかの前にDBっていうものを勉強したほうがいい。

激しく同意。

107 :NAME IS NULL:2008/05/22(木) 00:57:17 ID:???
まーねー、「INSERT順でデータがあるじゃん」という考え方は分かるんだけどね〜

108 :NAME IS NULL:2008/05/22(木) 01:02:42 ID:???
仕事じゃないことを祈る

109 :NAME IS NULL:2008/05/22(木) 01:06:46 ID:???
その時わたしは気づいたのです。
この列名が、業務のPRIMARY KEYであることに…

第1部・完

110 :NAME IS NULL:2008/05/22(木) 01:25:14 ID:???
いくら待っても第二部は来ませんでした。 来ませんでした。

111 :NAME IS NULL:2008/05/22(木) 02:16:08 ID:???
>>105
このレベルだと外注した方がマシだろ

それと、突っ込み所満載すぎてスルーされてるがnamberってなんだよ


112 :NAME IS NULL:2008/05/22(木) 07:52:25 ID:???
103
皆さん詳しく教えていただきありがとうございました
今学校でjavaとweb3構築の勉強をしていて課題でホームページを一つ提出するのですが
そうだったんですが、偶然だったんですね
かなり落ちこみますた、勉強しますね
でも皆も妖しげなホームページなので、いや止めたほうがいいですね
提出して動かなかったら嫌ですもんね

113 :NAME IS NULL:2008/05/22(木) 08:58:46 ID:???
お前、その課題は本当にDB必要なのか?w

114 :NAME IS NULL:2008/05/22(木) 10:21:08 ID:???
javaでsqlserverってのもねー
mysqlとかじゃないの?

115 :NAME IS NULL:2008/05/22(木) 10:47:40 ID:???
行の順番について上にあったけど、
DB作る上で列の順番はしっかり考えておいた方がいい。

一度作ってからどんどん項目を増やしていくと、
関係のある列項目が飛び飛びだったり、まぎらわしい列項目ばかりが並ぶことになる。

たぶん「正規化」で教わることだと思うけど、
今現在そういうシステムに直面して、嫌になってきた。

116 :NAME IS NULL:2008/05/22(木) 10:56:22 ID:???
列の順番なんて後でいくらでも変えられるじゃん

117 :NAME IS NULL:2008/05/22(木) 11:40:56 ID:???
仕様書で決まってるから、自分1人では変えられない…

118 :NAME IS NULL:2008/05/22(木) 16:29:00 ID:???
久しぶりにSQL Serverをやるんだけど、もうすっかりわすれてる・・

DATENAMEで、mm出すと0埋めの二桁で、dd出すと1桁の時0埋めされない文字が
でてくるのって前からの仕様だっけ?

たとえば1月だと01のようにゼロ埋めされるけど、
1日だと1のようにゼロ埋めされない文字が帰ってくる。

119 :NAME IS NULL:2008/05/22(木) 17:10:57 ID:???
103
皆さん、感謝感激雨霰です、マジ涙出そう
order by成功しました
まだテスト用プログラムでしか試してないんですけど
金額が高い順に手動で連番ふってるので使えると思います
今日一日気分悪かったけど、やっと晴れました
中間は変な並びでも、最後の入札履歴だけはちゃんと並んでる状態にできそうです
ありがとうございました

120 :NAME IS NULL:2008/05/22(木) 17:30:58 ID:???
>>119
もうちょっとやり方があると思うぞ?

まず、そのテーブルでのユニークな数字は、IDENTITY属性で指定できる
わざわざ行数+1なんて入れてたら同じ数が入らないとも限らない
順序の項目を参照→http://www.sqlpassj.org/dbe/keyword/01_01.aspx

金額が高い順に連番をふるんじゃなくて、入札(?)テーブルに
金額とユニークな商品IDを登録して、WHERE 商品ID = @商品ID ORDER BY 金額 DESCすれば
金額順に表示される。

基本的には、どのテーブルにもIDENTITY属性のID列、行が挿入されたときのInsertDateTime列、
行が更新されたときのUpdateDateTime列、行が削除されたことを表すIsDelete列を作っておけば
後にいろいろ対応できる。

とマジレスしてみる。



121 :NAME IS NULL:2008/05/22(木) 17:42:56 ID:???
>>120
お遊びなんがからマジレスするな

122 :NAME IS NULL:2008/05/22(木) 21:32:20 ID:???
>>120
論理削除は色々と意見はありそう。
InsertとUpdateの更新日付をわける意味は?

123 :NAME IS NULL:2008/05/22(木) 21:40:15 ID:???
>>122
論理削除は、マスタ関連なんかで参照される可能性があるけど
表示時間が長くなるから一覧には表示したくないとか、
後からわがままな要望がでてくる可能性を考慮。

Updateは同時実行制御なんかに必要で、
Insertは入力補助のために過去何日間に入力されたものの一覧を出せとか、
ある特定日に入力したものだけ一覧で出せとかを考慮して。

124 :NAME IS NULL:2008/05/22(木) 23:16:27 ID:???
ああ 楽観的ロックね。


125 :NAME IS NULL:2008/05/23(金) 00:10:45 ID:???
バーボン、ロックで。

126 :NAME IS NULL:2008/05/23(金) 00:13:18 ID:???
113
121さんの言うとおり仕事でもないのにすみませんでした
120さんもマジレス感謝です、要らない列は省きます
ここの人達は皆親切ですね

127 :NAME IS NULL:2008/05/23(金) 17:55:44 ID:???
考えることで自分の知識を整理・強化してるんだよ

128 :NAME IS NULL:2008/05/23(金) 23:20:17 ID:???
ストアドプロシジャの中で変数に値を代入するのに 2つの方法があるよね
1. set を使う
2. fromやwhereのない select を使う

俺はいつも 1. で、2. を使う理由が思いつかないんだけど、2. の利点って何かある?

129 :NAME IS NULL:2008/05/23(金) 23:40:51 ID:???
↑代入文の右辺に、演算子や関数のほかは定数と@変数しか出てこない場合です

130 :NAME IS NULL:2008/05/24(土) 02:12:13 ID:???
>>128
表が変わっても、正しそうな値を拾ってこれる。

131 :NAME IS NULL:2008/05/24(土) 03:38:36 ID:???
SQL CLRを利用すれば、そんな問題からすべて解放されるぉ

132 :NAME IS NULL:2008/05/24(土) 13:13:30 ID:???
その代わり違う問題をいっぱい抱えそうだけど。

133 :NAME IS NULL:2008/05/24(土) 16:23:11 ID:???
なんか不具合とかある?
SQLでもいいんだけど、.NET使えれば使えたで便利だから
ストアドでSQL CLRを使おうと思ってたんだけどさ

134 :NAME IS NULL:2008/05/24(土) 17:33:40 ID:???
いや別にチャレンジングゥ〜な君を止める気はさらさらないから。

人柱よろしく。

135 :128:2008/05/24(土) 18:20:27 ID:???
>>130 レスサンクス&解説お願いしていいですか?
表が登場しない、set でもできるし select でもできる代入を、
あえて select でやることの利点があれば知りたいです。

136 :NAME IS NULL:2008/05/24(土) 19:00:26 ID:???
>>134
こういう保守的な技術者が日本の技術を悪化させてると思う

137 :NAME IS NULL:2008/05/24(土) 20:01:25 ID:???
枯れた技術を使うのは基幹システムの基本
新技術をいきがって使うのは社会的に重要でないシステムにしろよ

138 :NAME IS NULL:2008/05/24(土) 20:17:33 ID:???
関数でSQL CLR使ってるよ

正規表現をどうしても使いたい場合
ファイルの削除や存在チェックをする場合
WMI APIを使いたい場合

ところでSQL Server2008正式版って今年中にはでそうなの?


139 :130:2008/05/24(土) 20:39:24 ID:???
>>135
SQL Serverは触ったことないので、単なる勘です。
Oracleのストアドプロシージャで散々な目にあったので、RDBMSで共通のSQLで表現できればそちらを採用するってだけです。

参考にならなくてごめんなさい。

140 :NAME IS NULL:2008/05/24(土) 21:06:29 ID:???
Oracleはなんであんなにバグだらけなんだろう。

141 :NAME IS NULL:2008/05/24(土) 21:38:05 ID:???
>>136
MS の言う新技術に何度となく裏切られてるから、導入を躊躇するのは当たり前。

いきがって導入するのは、学習能力のない奴だろ。

安定したら、検討するよ。

142 :NAME IS NULL:2008/05/25(日) 00:33:47 ID:???
枯れた技術とかいいながらSQL Serverを使用している137、141は矛盾

なんでISAMとかBtrieveとか使わないの?池沼?

143 :NAME IS NULL:2008/05/25(日) 00:40:09 ID:???
>>139
サンクス、了解しますた
さーて、MSDE 2000 でまた遊ぶか

144 :NAME IS NULL:2008/05/25(日) 00:45:10 ID:???
>>142
技術者ってのは面倒を避けるために、適当な理由をつけて、問題を回避する傾向が強いからね
んで枯れた技術とか、最新の技術は・・とか理由をつけて言い張ってるだけだから気にすんな

145 :NAME IS NULL:2008/05/25(日) 00:47:53 ID:???
でもOracleのANSI SQL対応がバグだらけなのを見ると
枯れるのを待つのはありな気もする。


146 :NAME IS NULL:2008/05/25(日) 04:04:25 ID:???
ならば訊こう。枯れたの定義は?

147 :NAME IS NULL:2008/05/25(日) 04:49:35 ID:???
枯れた枯れてないの定義なんて、使用する側の自己満足に過ぎないでしょ
枯れる枯れてないに関わらず、どうせ問題が発生したらメーカのせいにして責任は負わないんだから

責任を追う必要がないのに、新しい技術を導入しないのは、単にそれを導入したくないというだけの話
導入したくない理由は? それを理解していないから=技術者曰く「枯れていないから」

148 :NAME IS NULL:2008/05/25(日) 09:57:13 ID:???
2chでもう枯れてるよねーという話題になったとき枯れてる。
あれこれバグ報告があるうちはやめたほうがいいね。
でもOracleはバグの回避策を掲示板等へ書き込むことすら
禁止してるからとんでもない糞


149 :NAME IS NULL:2008/05/25(日) 10:18:00 ID:???
同業他社製品との比較は別スレでどうぞ。

150 :NAME IS NULL:2008/05/25(日) 12:50:12 ID:???
>>142
> なんでISAMとかBtrieveとか使わないの?池沼?

枯れてりゃなんでもいいわけじゃない、必要な機能があることが前提なんだが
そんなこともいちいち説明しないのいけないのか?

まっ、反論したかっただけなんだろうけど。

>>146
枯れたかどうかなんて、自分の経験と周りの評判だよ。>>147 みたいに責任取
らなくて済むなら、そんなの気にせずにばんばん導入するのもありだろうけど。

>>148
サポート費用稼ぎたいんだろうけどな。

サポート費用も高いし、一旦やめてから再度サポート契約しようとすると、
やめた期間の費用+α 払えとか、ほとんどヤ○ザ同然。

151 :NAME IS NULL:2008/05/25(日) 12:52:03 ID:???
何この多重問い合わせ

152 :NAME IS NULL:2008/05/25(日) 16:57:32 ID:???
>>144
技術者だって仕事でやってんだから金にならん仕事は手間をかけずに片付けたいのは当然だろ。

153 :NAME IS NULL:2008/05/25(日) 20:32:17 ID:DMMLfmVY
>>138
悪いが、2008って2005と何が違うか
俺に五七五で教えてくれ

154 :NAME IS NULL:2008/05/26(月) 10:24:31 ID:???
2008の売りはXML対応と、MS Officeとの親和性だったかな。
ソフトウェア開発環境展で、新バージョンの利点を説明してた。

155 :NAME IS NULL:2008/05/26(月) 12:08:16 ID:???
マージ使えるってのは?

156 :NAME IS NULL:2008/05/26(月) 19:47:52 ID:???
まじ


157 :NAME IS NULL:2008/05/26(月) 20:00:19 ID:???
あとは圧縮バックアップとか

158 :NAME IS NULL:2008/05/26(月) 22:14:38 ID:???
今日すげー嫌な汗かいたんだが、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:2008/05/26(月) 22:26:51 ID:???
>158
別にそんなことおきてないよ。
SP3だけど普通に繋がってるよ。

160 :NAME IS NULL:2008/05/28(水) 13:31:10 ID:???
>>158
Express = 名前つきインスタンスという意味なら、Windows のファイアウォール設定は
sqlservr.exe に対して外部からのアクセスを許可しないと通らないよ。ポートは動的にアサインされるから。
ついでに UDP 1433 もあけないとだめ。SQLBrowser にアクセスして SQL Server が何番ポートで listen してるか
問い合わせるから。
それでも駄目なら netstat -ano してちゃんと listen してるか確認するのが次のステップだな。

161 :NAME IS NULL:2008/05/28(水) 20:51:15 ID:???
>>159
えんやこらやってServer認証は通るものの、Windows認証は未だ
通らず。
去年の末頃は同様の構成でつながってたのにわけからん。

ドメイン管理のない環境でWindows認証使うなという神様の言う
とおりか?
ODBCにファイルDSN使ってるシステムが動かんのも偶然であって
ほしい。

>>160
いやいや、当然そのあたりは全部確認済みですよ。
Firewall切っても動かないぐらいです。

162 :NAME IS NULL:2008/05/28(水) 22:32:50 ID:???
>>161
HOSTSファイルは?

163 :NAME IS NULL:2008/05/28(水) 22:46:00 ID:???
>>128
複数の変数に同時に代入できる


164 :NAME IS NULL:2008/05/28(水) 23:04:33 ID:???
>161
Windows認証は試してなかった、後で試してみるよ。

165 :NAME IS NULL:2008/05/29(木) 00:25:29 ID:On8Unush
最近T-SQLに興味を持ち出したのですが、
帳票出力等のプログラムからSQLでデータを取得する場合、
テーブル値関数使うという判断はいかがなものでしょうか?

割と便利な気がしたのですが、実用した人の経験談とかも聞いてみたいなと。
自分の選択肢だと
1.ストアドでワークテーブルに加工してInsert⇒レポート側でベタSELECT
2.Viewをいくらか作ってそれを元に帳票向けに加工したSQLで取得
3.レポート側のプログラムで複数テーブル参照しまくりの力技。
4.テーブル値関数(最近知った)でそのままSELECT(xxx,xxx,xx) FROM 関数名

ほかにも方法はあると思いますが、少なくともVIEWよりはテーブル値関数のが
管理的に便利な気がして・・・
ただ、障害発生や拡張とか考えたとき、解析・コーディングに負担あったりするとか
いろいろ気になります。

気持ち的にはやってみたい気がするのですが、前例やその他経験者の少なさから
興味だけで終わりそうな予感。。。



166 :NAME IS NULL:2008/05/29(木) 21:04:25 ID:???
>>163
あ、明快ですね。気がつかない俺がバカだった、サンクス

167 :NAME IS NULL:2008/05/31(土) 00:39:24 ID:???
おまえら弾丸ツアーいく?

168 :NAME IS NULL:2008/05/31(土) 00:55:34 ID:???
行くよ〜。

半分は息抜きだけどね。(w

169 :NAME IS NULL:2008/05/31(土) 09:24:19 ID:???
このページの内容は役に立ちましたか?

       1 2 3 4 5
非常に低い    非常に高い


170 :NAME IS NULL:2008/06/01(日) 00:47:25 ID: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:2008/06/02(月) 01:20:57 ID:???
SQLServer2008CPT2月版さわってるんだがManagementStudioでSQL書いたらインテリセンスが利いて驚いたぜ。


172 :NAME IS NULL:2008/06/02(月) 16:17:24 ID:gBCGUa8J
>>171
T-SQLのデバッグできるようになった?>ManagementStudio
自分は当分インストできねーーー

173 :NAME IS NULL:2008/06/02(月) 20:52:27 ID:???
>>172
どういうこと?


174 :NAME IS NULL:2008/06/03(火) 00:05:48 ID:???
ブレークポイント設定したり1行ずつ実行したり変数に何が入ってるか確認できたりってことでは

175 :NAME IS NULL:2008/06/03(火) 01:56:45 ID:???
ストアド?

176 :NAME IS NULL:2008/06/03(火) 22:36:01 ID:???
あと再帰なんかも途中の結果を見たい時がある。

弾丸ツアーで聞いてみようかな。

177 :165:2008/06/03(火) 23:13:34 ID: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:2008/06/04(水) 01:16:27 ID:U14zGNqi
JavaからPreparedStatementを使用してSQLを実行した時、
バインド変数を使うと使わない時と比べて圧倒的に
処理速度が低下します。(0.1秒→180秒くらいの差が出る)

この現象の原因としては何が考えられるでしょうか?
また、バインド変数の有無で処理速度が変わる所までは
突き止めましたが、これ以上の原因の切り分け方が有れば
教えてもらえないでしょうか。
よろしくお願いします。

179 :NAME IS NULL:2008/06/04(水) 09:44:41 ID:???
>>178
そんなに差が出るものかな?特別なケースの特別な現象かもしれないよ。
回答が欲しいなら、JDBC、OS、DBMSの種類とバージョン、
それから検証が出来るくらいのプログラムソースは示すものだ。

180 :NAME IS NULL:2008/06/04(水) 12:17:26 ID:pUXBCNvj
SQL-Server2005Express + IISの場合って、ライセンス要るの?


181 :NAME IS NULL:2008/06/04(水) 14:37:53 ID:???
>>180
CAL関連の話は複雑なので代理店に確認して欲しい。
SQLServer Express自体の接続に制限はないがOSのライセンスに制限される。
IISはOSにバンドルされているのでこれもOSのライセンスに制限される。
Client OSの場合ピアツーピアに限られるので定型的なアプリとしては使用できない。
Server OSの場合、IIS上のアプリが匿名ではなく認証を使用する場合
CALやプロセッサライセンスが必要になる。
Server OSで匿名接続の場合はOSの価格だけで構築可能。

182 :NAME IS NULL:2008/06/04(水) 14:45:15 ID:pUXBCNvj
>181 サンクス
Server OSで匿名接続の場合はOSの価格だけで構築可能。
です。


183 :NAME IS NULL:2008/06/06(金) 22:03:02 ID:oUKZsqUS
SP3はまだか?
2005今だにバグだらけで使い物にならないんだけど…

184 :NAME IS NULL:2008/06/10(火) 23:14:08 ID:???
>>178
俺は同じ現象の経験あるな。
とりあえずSQL晒せ。

185 :NAME IS NULL:2008/06/11(水) 00:01:24 ID:???
>178
むやみにインデックスを付けていてバインド変数を使ったときのクエリに対する実行プランが
使って欲しくないインデックスを使った実行プランになったりという感じかなと思う。
特にバインド変数を使うとクエリが同じだから悪い実行プランが使い回されて何度やっても同じ状態という感じになるかと。
スペースの有無くらいの違いで違うクエリ扱いされて違う実行プランが使われると突然応答が良くなったりすることもある。
sp_updatestatsを実行して様子を見てみたり、
WITH(INDEX())とかしてインデックスを指定したりOPTION FORCE ORDERとかやってみれば収まるかもしれない。
それにわざと違うインデックスとか指定してみて同じくらいの応答時間になるインデックスを探してみたりとかしてみたりするよ。
プロファイラで見ると使って欲しいインデックスを使って検索していたときに比べてReadの数が妙に多かったりする。

186 :178:2008/06/12(木) 00:19:28 ID: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:2008/06/12(木) 00:43:59 ID:???
Distinctと*をやめれ

188 :NAME IS NULL:2008/06/12(木) 00:45:43 ID:???
あとはparent2 >= '1000000000' AND parent2 <= '2000000000'をBetweenにかえろ。


189 :NAME IS NULL:2008/06/12(木) 01:50:58 ID:???
>186
同じクエリをManagementStudioで実行プランを表示で実行してみろよ。
バインド変数を使った方のクエリはプロファイラに表示されたクエリをそのままコピって
ManagementStudioで実行して同じように長時間かかる場合が再現すると状況を確認できるよ。
大抵素直に再現してくれるよ。
多分違う実行プランが表示される気がする。

>188
BETWEENは>=と<=に展開されて実行されているんだよ……
多分差がでることはないよ。

190 :NAME IS NULL:2008/06/12(木) 02:03:23 ID:???
1. parent2にクラスタ化インデックスを作る
2. (child1,child2)でハッシュインデックスを作る
3. 結合方法をJoin句に変える
というのはどうなのでしょう?

191 :NAME IS NULL:2008/06/12(木) 09:28:36 ID:???
parent1, 2をクォーテーションで囲んでいるということは、まさかvarchar系じゃないだろうな。
numericじゃなければそうした方がいいと思う(そんなはずはないと思うが)。
と、心にもないことを言ってみるテスト。

>>189-190
betweenで速度改善が望めるらしいソースはここにあるけど、もしかして古すぎる情報かな。
ベンダ依存なのかもしれないけど・・・
ttp://www.geocities.jp/mickindex/database/db_optimize.html#LocalLink2

192 :NAME IS NULL:2008/06/12(木) 13:08:17 ID:???
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:2008/06/12(木) 14:53:30 ID:???
>>186
これは実行プランを比べてみないとわからないね。
ポイントになりそうところは
parent2 >= '1000000000' AND parent2 <= '2000000000'
がおおよそどのくらいヒットするかという点。案外件数が少なくない?
parent2 >= ? AND parent2 <= ? としてしまうとオプティマイザは
どのくらいヒットしそうか予測できないので最適化の判断を誤る可能性がある。

194 :NAME IS NULL:2008/06/12(木) 14:58:08 ID:???
仮にネストしたループにプランされてしまっていたら大幅に遅くなるよね。
つまり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:2008/06/13(金) 01:19:43 ID:???
>191
SQLServerだとBETWEENは展開されるから変わらない。
INが大量のORに展開されてたりもするね。
一般的な話ではBETWEENの方が効率がよくなるのを期待していいはずなのでその情報は間違ってないと思うよ。

196 :NAME IS NULL:2008/06/13(金) 09:47:16 ID:???
20年前ならいざ知らず、最近のSQLパーサーは賢いから
小細工せずに素直に書いたSQLのほうが最適化されやすいよね

197 :NAME IS NULL:2008/06/13(金) 10:44:32 ID:???
まあね。

198 :NAME IS NULL:2008/06/13(金) 10:47:09 ID:???
最後は結局実行プランとにらめっこすることになるね。
プランが不安定になるのはテーブルや制約索引の設計がいい加減なケースが多い。
安易にヒントに逃げないでその辺を見直すのが先決。
上のお題では child2単独の索引をやめてchild2, child1 (順番大事)の複合で索引を作る。
もしTBL1にプライマリーキーがなければ適切なものをつける。
この2つでだいぶ改善するはず。


199 :NAME IS NULL:2008/06/13(金) 11:15:25 ID:???
カバードインデックスにする手もある。
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:2008/06/13(金) 11:44:24 ID:???
はじめのパターンのプラン
|--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:2008/06/13(金) 20:29:00 ID:???
質問しっぱなしで逃げるとかどういう神経してんだ

202 :NAME IS NULL:2008/06/14(土) 00:26:10 ID:???
>>192
テーブル変数か一時表で呼び元に返してやればいいんでないか

203 :NAME IS NULL:2008/06/14(土) 01:48:48 ID:19RmXNyg
2000 STD なのですが質問させてください。
最初のインストール時にはCAL10人分で始めたのですが、ユーザー数が増えたため
追加購入した場合どのように10人から10プラスアルファに変更できるのでしょうか

再インストールしなくてもエンタープライズマネージャから変更可能だと思いますが
解決法が見つかりませんでした。

よろしくお願いいたします。

204 :NAME IS NULL:2008/06/14(土) 07:37:53 ID:???
なんでライセンスを購入したところに聞かないの?

205 :NAME IS NULL:2008/06/14(土) 16:39:39 ID:???
>>201
死ぬほど忙しくなってインターネットをやる時間すらなくなってしまったんじゃないかな?


206 :NAME IS NULL:2008/06/15(日) 22:32:42 ID:???
ストアドプロシージャで、xml型のパラメータ受け取ってsp_xml_preparedocumentで
展開してから一括でINSERTしてましたが、存在チェックしてからINSERTする必要が
出てきたので、展開されたテーブルの1レコード毎にチェックしたいのですが、
どのようにすべきでしょうか?

207 :NAME IS NULL:2008/06/15(日) 23:59:04 ID:???
>>206
何の存在をチェック?
NOT INじゃダメなのか?

208 :NAME IS NULL:2008/06/16(月) 00:24:11 ID:???
一意制約違反を起こしたらrollbackすればいい

209 :206:2008/06/16(月) 08:54:16 ID:YabEVWOQ
やりたいのは一意制約違反の無い行のみ追加したいのですが、
ロールバックすると全てキャンセルしちゃうから1行ごとに
チェックするしかないのかなぁと…

210 :206:2008/06/16(月) 10:24:40 ID:YabEVWOQ
カーソルを使って思った処理が出来そうです。
失礼しました。

211 :178:2008/06/19(木) 00:44:01 ID:VBzYbTdU
多くの回答を頂いたにも関わらず御礼も言えないままで申し訳ないです。
実行プランを出してみましたが、ご指摘の通りバインド変数の
有無で大きく内容が異なりました。
バインド変数有りの場合、無しと比べて実行プランの長さが倍ほどになり、
IndexScanという処理が2回程現れます。(無しでは1回も現れません)

頂いたアドバイスを一つ一つ試したいのですが、週末からプロジェクトの
方が慌しくなり、あまり手が付けられていません。
落ち着いたらまた経過を報告させて頂きたいと思います。
ご回答頂いた皆様、どうもありがとうございました。



212 :NAME IS NULL:2008/06/21(土) 20:03:15 ID:xziLRgkp
MERGE早く使いたい!! (2008から入るらしいが・・・)

SQLServer2005上で↓を効率よく実現する方法教えて!
 ※参考(ttp://www.shift-the-oracle.com/sql/merge.html)


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:2008/06/23(月) 21:10:32 ID:???
このソフトを熟知している方が多そうなので、
こちらにて質問させて下さい。駆け出しのネットワーク管理者をやっております。

パケットをキャプチャしているとICMP及びTCP接続パケットを大量に他NWに
投げている端末がありまして、確認するとsqlblowser.exeがTCP接続の原因の様なのです。

SQLServerを使用した事が無いのですが、
このアプリはICMPを投げた後にTCP接続するような動作をデフォルトで行うのでしょうか?



214 :NAME IS NULL:2008/06/23(月) 21:11:08 ID:AOnhapfM
すんません。あげておきます…

215 :NAME IS NULL:2008/06/24(火) 13:53:50 ID:BT1PbFhk
>>213
SQL Server 構成マネージャ > SQL Server 2005 のサービス
で SQL Server Browser 立ち上がってない?
#多分それでは無いかと・・・

216 :NAME IS NULL:2008/06/24(火) 17:08:58 ID:???
>>213
SQL Server Browserは、ご近所のSQL Serverを探して一覧を作成するのが
お仕事なので、可能性はあるが、キャプチャまでしたことない。
止め方は>>215のところで止めれば良いので、一度やってみては。

217 :213:2008/06/24(火) 21:57:30 ID:BwCyEnPQ
>>215,216
お二方共、有力な情報ありがとう御座います。
さっそく明日に該当サービスを停止しても業務に支障が無いか確認致します。

ありがとう御座いました。


218 :NAME IS NULL:2008/06/25(水) 00:14:30 ID:???
>>217

SQL Server Browser ってクライアントからのアクセスを
受け付ける役割もあるので、問題の端末がサーバ用途の場合、
サービスは止められないかもです。

パケットを投げるのがまずいのであれば、サービスを止める代わりに
アウトバウンド通信をブロックするとかどうですか?


219 :NAME IS NULL:2008/06/25(水) 00:32:00 ID:???
>>218
Oracleのリスナーと違ってアクセスを受け取る役割はないような。
可変ポートにしてない限りはいらない。

220 :NAME IS NULL:2008/06/25(水) 00:35:02 ID:???
IA64で性能でねぇ。。。

221 :218:2008/06/25(水) 08:32:16 ID:???
>>219

ずっと勘違いしてましたorz
ありがと。



222 :NAME IS NULL:2008/06/25(水) 09:34:24 ID:D8c5ROxn
>>219
クライアント:ポート:1434へアクセス(UDP)
SQLSV:->TCP/IP ポートまたは名前付きパイプを返す
クライアント:->返された、TCP/IP ポートまたは名前付きパイプでアクセス ですか
#まぁHelpを嫁ということですね
#このあたりは2008で変わるような記述をどこかで見たような

#>Oracleのリスナー
#昔だとfork() だろうけど、今は何だろう?


223 :NAME IS NULL:2008/06/25(水) 18:51:50 ID:JWkEO9dM
sql server2000でトランザクションログから更新sql全文を取得することはできますか?
oracleだとlogminerのような機能があるけど

224 :NAME IS NULL:2008/06/25(水) 18:57:56 ID:???
海外のサードパーティ系ツールであるそうだが標準ではないっす。
ログは物理操作だけで論理操作を記録しないこともあるから、
全部は取れないのではないかと思う。

225 :NAME IS NULL:2008/06/26(木) 20:01:18 ID:SvFJj1W/
>>224
ありがとです
サードパーティ系ツール名がわかれば教えてタモレ

226 :NAME IS NULL:2008/06/27(金) 00:44:29 ID:???
どういう用途に使いたいのか次第だろうけど、
プロファイラでクエリを全部取得するのじゃ駄目なんでしょうか?
一気に大量に来ると溢れるけどね。

227 :NAME IS NULL:2008/06/27(金) 09:17:22 ID:???
>>225
ググれよ!それくらい

つ ttp://www.vivouac.co.jp/sarasa/index.html


228 :NAME IS NULL:2008/06/27(金) 11:02:05 ID:???
>>225
自分が知っている範囲では、Log ExplorerとかSQL Log Rescueとかかな。



229 :NAME IS NULL:2008/07/02(水) 10:15:03 ID:h4L3xO4O
NOLOCKヒントってUPDATEの更新前行と更新後行を
両方同時に読んじゃうの?
これが本当ならダーティーリードするだけとか
そんなレベルの話じゃすまないんだけど…
http://oshiete1.watch.impress.co.jp/qa3820750.html


230 :NAME IS NULL:2008/07/02(水) 12:54:01 ID:???
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:2008/07/02(水) 18:08:21 ID:???
>>230は無かったことに。。。

232 :NAME IS NULL:2008/07/02(水) 21:45:19 ID:???
>>229
ダーティリードというのはそういうもので、知らぬ奴が馬鹿だ。
リンク先のような事例ではMSSQL2005以降のSNAPSHOT分離レベルを使えということになる。


233 :NAME IS NULL:2008/07/02(水) 22:35:01 ID:???
NOLOCKヒントがREAD UNCOMIITTEDと同じダーティリードとわかってない人は多そうだな。
つまり自身もロックをかけないし他のトランザクションのかけたロックも無視する。
コミット前のデータは見えるし、削除してコミットしてないデータは既になくなってるように見える。
インテントロックもかからないから、UPDATEやDELETE/INSERTでレコード物理位置が動いた場合は
両方見えることも両方見えないこともありえる。
NOLOCKヒントをはずせば解決だよん。

234 :NAME IS NULL:2008/07/02(水) 23:25:06 ID:faA08Ceq
>>223
個別にDELETE/INSERTした場合はともかく、
「UPDATEでレコード物理位置が動いた場合に
両方見えることも両方見えないこともありえる。」
本当にこれがダーティリードの正しい実装ですか?
他のDBMSでも同様の実装がなされているのでしょうか?


235 :NAME IS NULL:2008/07/02(水) 23:31:49 ID:???
>>234
> 本当にこれがダーティリードの正しい実装ですか?
ダーティリードだからね


236 :NAME IS NULL:2008/07/02(水) 23:35:47 ID:???
そこは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:2008/07/02(水) 23:41:20 ID:???
ところでダーティリードの規格ってあるのかな?
ANSIで決まってたりしてないよな。

238 :NAME IS NULL:2008/07/02(水) 23:43:09 ID:???
viewにする意味もnolockにする意味もわからない

239 :NAME IS NULL:2008/07/02(水) 23:47:36 ID:???
COMMIT前のデータが見えるという仕様のみで、
実装方式により予期せぬ結果が返ってくるかどうかまでは
既定されてなさそうですね。


240 :NAME IS NULL:2008/07/02(水) 23:51:40 ID:???
実表をdualにした場合にダミーデータを消したり2件以上にしたりしたときのダメージが大きい。
sys.objectsを使うのはsqlseverに必ずある表で必ず1件以上データが存在し
常に参照されているためキャッシュされている確立が高い。
nolockを使うのは単に共有ロックのオーバーヘッドさえ避けたいため。
とにかく1件取れればよい。

241 :NAME IS NULL:2008/07/04(金) 00:04:35 ID:HGacSGIp
2008のRC0が出たばかりですがRC1ってのが次に出るの?

242 :NAME IS NULL:2008/07/04(金) 00:55:47 ID:???
>>240
どうしてもviewにしたいなら
create view dbo.dual as
select 'x' as x
でいいじゃん。
クライアントの仕様はともかくddl文にもfrom句必須って訳じゃあるまい

243 :NAME IS NULL:2008/07/04(金) 18:55:18 ID:???
>>242
それもやったのよ(笑
クライアントソフトは何やってたのだろうね。それもエラーになってた。

244 :NAME IS NULL:2008/07/16(水) 20:20:43 ID:???
SP2以降に見つかったバグが既に500件以上あるんだって
早くSP3出しとくれ。

245 :NAME IS NULL:2008/07/16(水) 22:44:22 ID:???
以下の条件文@(あるSQLの一部分)を、
A〜Bの何れかに代えてクエリアナライザ等で実行した場合、
Cの場合のみ応答時間が低下する現象が発生しておりますが、
どのような原因が考えられるでしょうか?
アドバイス等ありましたらお願いします。

@ where pk1 = '11111'
A where pk1 = cast('11111' as char)
B where pk1 = cast('11111' as varchar)
C where pk1 = cast('11111' as varchar(8000))

なぜ varchar(8000)にキャストするかというと、
JDBCのPreparedStatement#setStringにてバインド変数を使用した場合に、
JDBCドライバの内部的には上記Cに近いSQLに展開されるためです。
バインド変数の使用によって性能低下が発生したことがきっかけで、
その後に切り分けを実施した結果、上記Cでの性能低下に行き着いた
次第です。

pk1は、主キーの第一項目で char(5)です。
実行プランは@〜Cで完全に同一です。

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:2008/07/17(木) 00:12:36 ID:???
>245
似たようなことだが、C#で空文字をパラメータで渡すとvarchar(8000)に展開されて仰け反ったけど、
別に遅くなってる様子がなかったので気にしてなかったよ。

247 :NAME IS NULL:2008/07/19(土) 17:19:16 ID: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:2008/07/19(土) 18:24:36 ID:???
>>247
実際のところは実行プランを見ないとわからないが、
普通はその辺の書き方でプランに差は出ない。

どちらかのテーブルのCCCに索引があればどちらのSQLでもほぼ一定のプランになるはず。
両方のCCCに索引がない場合はSQLの書き方や統計情報にプランが
影響されやすくなるので差が出るかもしれない。


249 :NAME IS NULL:2008/07/19(土) 21:22:53 ID:???
て言うか、わざわざ書き換えるほど下の方がわかりやすいとは思えない。

1人でやってるなら、好きに書けばいいけど、その SQL を他の人がメンテ
する可能性があるなら、一般的な書き方をするべきだと思うよ。

250 :NAME IS NULL:2008/07/19(土) 21:45:53 ID:???
>>247
SQLに限らないが特殊なコーディング規約に慣れすぎるのは、
一般的や規約のコードに対する読解力が相対的に低下する
ことになるのでは?
きっと他のプロジェクトメンバは迷惑してるよ。
俺のプロジェクトでやるやつがいたら書き直しだな。
1つのSQLがあたりまえに数千行規模の場合、
期待しない実行プランになるリスクも高くなりそう。



251 :NAME IS NULL:2008/07/19(土) 22:44:11 ID:???
数千行規模のクエリとかどれだけ予想外な実行プランが走るか怖くて見たくないぞ。

252 :NAME IS NULL:2008/07/19(土) 22:45:38 ID:???
> 1つのSQLがあたりまえに数千行規模の場合、

ネタかバカのどっちかだろ。

253 :247:2008/07/19(土) 23:34:54 ID:???
みなさんご意見ありがとうございました。
ちなみに実際のコーディングでは下のような感じで書いてます。
こうするとクエリアナライザで個々の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:2008/07/19(土) 23:37:04 ID:???
前スペースって消えてしまうんですね。もう一回貼ります。
(スレ汚してスマン。。。)


>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:2008/07/20(日) 04:10:22 ID:???
>>251
実業務のSQLが長くなるのは理由がある。
レコードあたりのフィールドの数がやたら多い。
select のフィールドのリストは縦に書くことが多い。select * は原則禁止。
(ここまでは仕方ない)
プログラム側にキャッシュできるような変更のない小さなマスターまで結合したがる。
(リザルトセットを直接利用するコントロールや帳票ツールのせいというのもある。)
外部キー関係がいい加減でやたら外部結合が必要。気が付くとcoalesceやdistinctを使いまくり。
サブクエリーにまでselect * は禁止!を守ってしまうアホがいる。

これを守れば一千行に手が届くようなSQLが出来上がる。

256 :NAME IS NULL:2008/07/20(日) 10:38:32 ID:???
× ネタかバカのどっちかだろ。

○ ネタかバカかアホのどれかだろ。

257 :NAME IS NULL:2008/07/20(日) 15:11:05 ID:???
>>255
概ねその通りだが外部結合のところがよくわかりません。
外部キー使うと外部結合が不要になるの?

258 :NAME IS NULL:2008/07/20(日) 16:20:57 ID:???
抜けのあるキーと結合するとなると内部結合ではデータが欠ける。
重複のあるキーと結合するとデータがだぶる。
参照整合性でその問題は発生しなくなる。
実際に物理的な制約をかけるかどうかは別にしてシステムとして
その辺の整合性を保障をしないと結合なんて使えませんがな。

259 :NAME IS NULL:2008/07/20(日) 17:12:27 ID:???
抜けのあるキーは別にして、キーがダブるって...
どんなレベルの奴が設計してるんだよ。

260 :NAME IS NULL:2008/07/20(日) 18:53:08 ID:???
既に大量のデータが存在するテーブルにクラスタ化インデックスを付けた場合、
インデックスの作成やデータの並べ替えなどが行われるのはCREATE CLUSTERED INDEX文を
実行した時ですか?それとも実行自体はすぐに終わってバッググラウンドで処理が継続されてる
んですかね?
(DROP_EXISTINGオプションが関係してくるのかな?)

261 :NAME IS NULL:2008/07/21(月) 13:34:06 ID:???
完了するまで戻ってこない。
他のプログラムからいじってもテーブルロックがかかって操作できないはず。
クラスタ索引の再編や付け直しはメインリーフページを再配置するから時間がかかる。
ケースによってはクラスタ索引なしという選択も悪くない。

262 :NAME IS NULL:2008/07/21(月) 14:01:05 ID:???
新しい職場で2005のMSDN版みたいな奴を初めていじったんだが
インストール手順書にメモリのチューニングがあった
みんなこれいじってる?

263 :NAME IS NULL:2008/07/21(月) 14:02:18 ID:???
訂正
MSDN→MSDE

264 :NAME IS NULL:2008/07/21(月) 14:31:56 ID:???
2Gや4Gの壁なら突破してるけど

メモリのチューニングってどれのことだよ

265 :NAME IS NULL:2008/07/21(月) 16:31:20 ID:???
>>261
レスありがとうございます。
ところで下記URLのページによると一度作ったインデックスはDBCC INDEXDEFRAGや
DBCC DBREINDEXで定期的に作りかえるよう勧められているのですが、>>261さんは
そういったことをされていたりしますか?(質問ばかりですみません。。。)


http://www.microsoft.com/japan/msdn/sqlserver/columns/sysbuild/sysbuild1.aspx
第 1 回 「インデックスアーキテクチャとデータアクセス方法を理解する」

266 :NAME IS NULL:2008/07/22(火) 00:37:14 ID:???
>>264
どこいじったのかよくわからんが
キャッシュの設定があった


267 :NAME IS NULL:2008/07/22(火) 15:39:26 ID:???
フルテキストインデックスなんですが
Like '%AAA%' と contains(カラム,'*AAA*') とでは
取得件数に大きな違いがあります
Like '%AAA%' と contains(カラム,'*AAA*') は
同じではないのですかね?

Like検索が遅いので、初めて全文検索を使ってみましたがよくわかりません orz

268 :NAME IS NULL:2008/07/22(火) 15:40:37 ID:???
SELECT * FROM HOGE WHERE HOGE1 > 100 AND HOGE2 < 200

といったSQLで引かれるテーブルがある場合
インデックスは
HOGE1とHOGE2別々につけたほうがいいですか?
ひとつのインデックスとしてHOGE1, HOGE2でいいですか?

269 :NAME IS NULL:2008/07/22(火) 15:48:50 ID:???
>>267
フルテキストはあらかじめ文章を単語に分解してそれを検索するイメージなので、
通常そこでは区切らないだろうような辞書にない単語や普通じゃない固有名詞などは
ヒットしない可能性が高い。
DBに登録してからフルテキスト検索にヒットするようになるまでタイムラグがある。
Linkと一致しないといってクライアントや上司(たよりにならね〜)がバグだと言い出すので、
開発や導入前にどういうものかよく説明しておく必要がある。
SQLサーバーのは単語や類似語の登録が出来なかったように思うので、
企業内システムには割りと使いにくい。
(このへんは余り自信がない、出来るのかもしれない)

270 :NAME IS NULL:2008/07/22(火) 15:51:08 ID:???
>>268
別々につけても片方しか使われない。
複合キーした場合は2つ目は索引としては使われないが、
カバードインデックスとしての効果は出る。

271 :NAME IS NULL:2008/07/22(火) 23:00:53 ID:???
SQL server 2005 Service Pack2のセキュリティ更新プログラム(KB948109)だけ
何度再実行してもインストールされません。コード2B08ってのが出て、
問題のトラブルシューティングとかいうのも見てみたのですが、原因が全くわかりま
せんでした。種類が重要になってるので凄く気になります。どうすればいいんでしょうか?

OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
半角英数字のものにしましたがやっぱりダメでした・・・

272 :NAME IS NULL:2008/07/23(水) 05:30:52 ID:???
>>271
> OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
> にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
> 半角英数字のものにしましたがやっぱりダメでした・・・

ユーザーアカウントだけ?
コンピュータ名はどうなっているかな?
あと、コンピュータ名を半角の大文字で入力した方がいいはず。
(今回の件とは直接関係ないけど、念のため)



273 :NAME IS NULL:2008/07/24(木) 22:19:22 ID:???
昨日からExpress Editionで使い始めました。質問させてください。
テーブルにデータを入れるときは全て手動なんでしょうか?
csvファイルとかから読み込んで入れたいんですけど、そういう機能はないのでしょうか。
調べてもわかりませんでした。お願いします。

274 :NAME IS NULL:2008/07/24(木) 22:31:06 ID:???
>>273
DB右クリック>ウィザードで行けたような気
でも、型の推測がバカなので注意。

275 :bcp:2008/07/24(木) 22:33:43 ID:???
どうせ調べてないんだろ。

ググッた単語書いてみなよ。

276 :NAME IS NULL:2008/07/24(木) 23:13:43 ID:???
ツンデレな>>275に萌えw
(ヒント:名前欄)


277 :NAME IS NULL:2008/07/25(金) 00:18:52 ID:???
>>275
273です。
ありがとうございます。
しかし、Error = [Microsoft][SQL Native Client]サーバーへの接続確立時にエラーが発生しまし
た。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート
接続を許可していないことが原因である可能性があります。
というエラーが出て結局ダメでした。
ここを見てこの通りにやってもみたけどダメでした。
http://support.microsoft.com/kb/914277/ja

残念です。

>>274
Express Edition2008では「ウィザード」っていうコマンドが見当たりませんでした。
がんばって探したのですが。

278 :NAME IS NULL:2008/07/25(金) 20:51:05 ID:???
なにしろウィザードだからな

279 :NAME IS NULL:2008/07/25(金) 20:59:22 ID:zcVwMyen
>>277
ネタ? ちゃんと読んで、書いてある手順通りやんないと駄目だよ
#ちゃんとsql server 再起動してるよね?

>>Express Edition
には接続ウィザードないよ。
tool->データエースへの接続で mdf 直接指定じゃ無かったかな
ちゃんと調べなさい(もしくは書籍の立ち読み)
#Express ずいぶん使ってないから 覚えてないw

csvファイルの取り込みは DTSWizard.exe で探してクレイ
#なんかのバージョンで入っているらしい
#自分は、dev版使ってるからどれを入れればいいかわかんね>express

初めてさわるんなら、まず情報収集しなよ

280 :NAME IS NULL:2008/07/25(金) 21:07:42 ID:???
どうでもいいテストデータを少量入れる時、
Excelで作ってコピー>テーブルを開いてペーストとかやるな。
とんでもなく時間かかるからアレだがw100件未満推奨。

281 :NAME IS NULL:2008/07/26(土) 02:58:17 ID:???
なんか情報が錯綜しているんで、ちょっとまとめてみる。

> 昨日から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をダウンロードしてインストールした方がいいよ。
ttp://www.microsoft.com/downloads/details.aspx?familyid=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796&displaylang=ja


282 :NAME IS NULL:2008/07/28(月) 10:27:56 ID:???
Express Editionでいちばん使い勝手がいいのはIBM DB2だよ。
あれは全部そろってる上に、そのまま業務に使える。

283 :NAME IS NULL:2008/07/28(月) 19:48:11 ID:???
Express EditionなんてDB2に無いぞ

284 :NAME IS NULL:2008/07/28(月) 21:19:48 ID:???
DB2 Express-C がそれです。

285 :bcp:2008/07/28(月) 21:35:32 ID:???
>>282
使い勝手などは人に依存する部分も多いので、一番とか根拠の
無いことを言う奴は宣伝と思っていいかな?

286 :NAME IS NULL:2008/07/28(月) 21:39:43 ID:???
いいですよ。私は”青い”血が流れているので

287 :NAME IS NULL:2008/07/29(火) 12:06:06 ID:???
ここで聞いて良いのかわからんのだが
VS2008のDVDでVSインストールしたら
一緒にSQLSERVER2005EXPRESSもインストールされたんだが
Microsoft SQL Server Management Studioがインストールされなかった
これは個別にインストールしろってことなのか?

288 :NAME IS NULL:2008/07/29(火) 18:06:53 ID:???
>287
ExpressEditionを使うなら別に入れる。
DeveloperEditionとか使うならVisualStudioのインストールオプションから削って最初から入れないでおく。

289 :NAME IS NULL:2008/07/30(水) 14:28:40 ID:???
>>288
トンクス
VS2008Pro版だったんだが
初めてのインストールなので戸惑った


290 :287:2008/08/01(金) 13:25:01 ID:???
本体からSQLEXPRESSを削除して
MSDNのSQL2005を入れたら
全部入ってくれたわ

いつの間にかXPでもSQLSERVERが動くようになったのね

291 :NAME IS NULL:2008/08/01(金) 14:10:46 ID:???
はじめからExpressとDeveloperEditionはXPでの動作は保証されている。
正規版はXPで動作するがライセンス上ほぼスタンドアロンでしか使用できない。
期間限定のお試し版はサーバー限定でXPはインストールできない。
確かこんなだったはず。MSDNのってDeveloer版じゃない?


292 :NAME IS NULL:2008/08/01(金) 14:40:48 ID:+ktCTmOk
>MSDNのってDeveloer版じゃない?
たぶん そのはず

293 :291:2008/08/01(金) 17:52:04 ID:???
確かにDev版でしたわ

ところで諸兄に質問
郵便局が発行してる郵便番号データのKEN_ALLってやつを
SQL2005のマネージメントスタジオでSQL2005にインポートすると失敗する

SQL2000のエンタープライズマネージャでMSDE2000相手にインポートだと成功するんだけど
これはうちだけなのかな?



294 :NAME IS NULL:2008/08/04(月) 10:30:08 ID:???
直前のSQLで更新された行の数を知る方法はないでしょうか?
MySQLのmysql_affected_rows()のようなものです。
http://dev.mysql.com/doc/refman/4.1/ja/mysql-affected-rows.html

295 :NAME IS NULL:2008/08/04(月) 13:02:40 ID:???
初心者丸出しの質問で申し訳ないのですが・・・

SQL Server 2005 EXPRESS が入っているサーバー間で
ミラーリングができないものかと思案中なんだけど

ググってもEXPRESSはミラーリングやフェイル・オーバー・クラスタ
とか構築できないという情報だけなんだが

やはり、EXPRESSエディション同士のサーバー間で
ミラーリングを構築することは不可能なのだろうか???

実際にExpress同士でミラーリングができる環境の構築に
成功している人がいたらアドバイスをお願いしたいのです・・・

296 :NAME IS NULL:2008/08/04(月) 13:21:24 ID:???
>>294
@@ROWCOUNT

297 :NAME IS NULL:2008/08/04(月) 13:53:37 ID:3h5OcO5t
>>295
MSDNに無いって書いてあるから、だめなんじゃない?

298 :294:2008/08/04(月) 14:26:15 ID:???
>>296 ありがとうございます。

299 :bcp:2008/08/04(月) 23:28:26 ID:???
>>295
不可能に決まってるだろ。

まじめな話し、エンジン部分の大きな違いはミラーリング/クラスタと
サイズ (プロセサの個数とかも含む) の制限だけなんだから、Express
でミラーリングなんかサポートしたらバカ高い Standard や Enterprise
Edition なんかを買う奴がかなり減るだろ。

300 :NAME IS NULL:2008/08/05(火) 00:22:26 ID:???
>>272
亀レスで申し訳ありません。インストール出来ました!!!
本当にありがとうございます。コンピューター名を半角の大文字にしたら
あっさりとインストール出来ちゃいました・・・本当に不思議ですね。

301 :295:2008/08/05(火) 14:21:24 ID:???
>297
>299
そのようですね^^;

とりあえず今回はトリガを用いて
DB(A)のテーブルの変化をDB(B)と同期させるように
するつもりです。

トリガ作るのがものっそい面倒なんで
ミラーリングができねーかなーなんて思ったのがきっかけでした。

ありがとうございました。

302 :bcp:2008/08/06(水) 00:26:56 ID:???
何でそんなことしたいのか知らんけど、仕事なら普通に
Standard Edition 買うのを勧める。

趣味なら、心置きなく楽しんでくれ。

303 :NAME IS NULL:2008/08/06(水) 22:22:03 ID:???
データ同期がしたいならログ配布っぽい仕組みにチャレンジした方がまだ現実的かも。
リアルタイムは無理だけどさ。

304 :NAME IS NULL:2008/08/07(木) 00:35:39 ID:???
トリガ使ってのミラーリングはやってる。
安定動作するまですごく大変だったよ。間違いなくお勧めしない。

305 :NAME IS NULL:2008/08/07(木) 00:52:50 ID:???
ミラーリングって一見簡単設定っぽいけど、一歩間違うと復旧させるの大変だろ?
ちょっとSQLかじった程度じゃ、トラぶった時、手に負えなくなるのが関の山。

306 :bcp:2008/08/07(木) 22:47:38 ID:???
そりゃミラーリング (=運用) と SQL (=開発) じゃあ、求められるスキルは違うだろうよ。

307 :NAME IS NULL:2008/08/08(金) 02:43:48 ID:???
Aというテーブルにデータが追加されたらBにも追加するというトリガ(after)があるとする。
Aでエラーが起きたらトリガは起動しない。
Bでエラーが起きたらAの追加もロールバックされる。

後者のBでエラーが起きてもAにはデータを入れておきたい場合はどのような手段がありますか?

308 :NAME IS NULL:2008/08/08(金) 10:22:42 ID:???
Bにエラーをさせないようによく言い聞かせておく

309 :307:2008/08/08(金) 11:59:06 ID:???
>>308
解決しました。ありがとうございました。

310 :NAME IS NULL:2008/08/08(金) 12:36:20 ID:???
ワラタ

311 :NAME IS NULL:2008/08/09(土) 02:25:48 ID:???
Oracle→SQL Serverに移行するんだけど
MSから出てるツールはどうなの?
データに完全に差分が出ないのなら使いたい
あと、複数のDBがあって、全TBLをまとめて同時に移行できる?




312 :NAME IS NULL:2008/08/11(月) 22:09:31 ID:???
>>311
自分でゴリゴリバッチ書けばいいじゃん


313 :NAME IS NULL:2008/08/12(火) 04:18:53 ID:ejoHNrE8
CREATE LOGIN したときの
DEFAULT_DATABASE は
どうやったら確認できますかね?


314 :NAME IS NULL:2008/08/12(火) 21:04:24 ID:???
SQL Server 2000で、datetime型の列の規定値を
データのupdate時の日時に設定することは出来ますか?

MySQLでいうところの
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
みたいなことをしたいのです。

列の規定値の定義方法をご教示いただきたく。

315 :NAME IS NULL:2008/08/12(火) 22:16:39 ID:???
GETDATE()をデフォルトに指定しろ。

316 :NAME IS NULL:2008/08/12(火) 22:49:53 ID:???
ユーザーが勝手にDBに接続してくる・・・。Windows認証だと防げない・・・。

317 :NAME IS NULL:2008/08/13(水) 00:32:31 ID:???
>>316
ユーザーが勝手にDBに接続しなきゃ、データ見れないだろw

318 :NAME IS NULL:2008/08/13(水) 05:05:32 ID:9W/6/zwG
SQL Server 2005のデータベースのデータ型の設定で
nvarchar(255)にしていADO.net経由で書き込みすると、文字列データまたはバイナリ データが切り捨てられます。
というエラーが返ってくるのは何故でしょう?

書き込むデータは半角やら全角やら混ぜたものなんですが・・・。

319 :NAME IS NULL:2008/08/13(水) 06:02:31 ID:???
>>315
d
INSERT時のデフォルトはそれで良さそうなんですが、
UPDATE時に変更はされないですよね?

>>318
エラーメッセージを正確に記載するのが良いとオモ。
つかADO.NETのスレの方が良くない?


320 :NAME IS NULL:2008/08/13(水) 08:20:28 ID:4+Qu872F
>>318
書き込むデータの長さは?

321 :NAME IS NULL:2008/08/13(水) 10:25:32 ID:???
>>317
うんまあそうなんだけどユーザーが無許可で作ったアプリケーションかスクリプトで
接続してくるのを防げないかな。

322 :NAME IS NULL:2008/08/13(水) 14:25:06 ID:???
>>318
SqlParameterのサイズかデータタイプが間違っている可能性もあるな。
その部分をさらせ。

323 :NAME IS NULL:2008/08/13(水) 16:30:41 ID:???
>>321
Windows認証なんて使うからだろ


324 :NAME IS NULL:2008/08/14(木) 01:08:19 ID:m4R6Ogem
>>319
>>320
>>322
遅くなりました。
あれからテーブルやDataSetを作りなおしたり、
色々試していたらちゃんと登録されるようになりました。
結局、根本の原因がわかっていないので
少し怖いのですがとりあえず解決ってことで・・。

325 :NAME IS NULL:2008/08/14(木) 07:39:13 ID:1s/mhNXs
Expressのダウンロードページは入り口のバナーだけ2008になっているけど、
なかにはいると2005のままだな。


326 :NAME IS NULL:2008/08/14(木) 09:22:07 ID:???
>>323
SQL認証の方が危ないだろ。

>>321
SQL Server Management Studioで、[セキュリティ]−[ログイン]で当該ユーザーに対して、
適切なアクセス権を設定すればいいと思うけど。


327 :NAME IS NULL:2008/08/14(木) 11:47:02 ID:???
>>326
>>322

328 :NAME IS NULL:2008/08/14(木) 11:47:59 ID:???
>>326
>>321

まちがえた。

329 :NAME IS NULL:2008/08/14(木) 12:01:16 ID:???
>>326
同一のクライアント端末で、あるプログラムからの接続は許可し、それ以外のプログラム
からの接続は拒否する。これをWindows認証でどういうアクセス権を設定すれば
実現できるの?


330 :NAME IS NULL:2008/08/14(木) 12:46:04 ID:???
そもそも、Aというプログラムで見せるのはよくて、Bというプログラムで見せるのはダメというのが間違いなんじゃない?
というか、元発言者の意味が不明。
接続と一言で言っても、SQLの管理権限なのかデータベース単位の書き込み権限なのかテーブルの読み取り権限なのかさっぱりわからないじゃないか。
前提がわからなきゃ、Windows認証もSQL Server認証もへったくれもない。

331 :NAME IS NULL:2008/08/14(木) 13:18:25 ID:???
326だけど、「無許可で作ったプロシジャ」と勘違いしていた。
>>326は無かったことに。 m(_ _)m ペコリ



332 :NAME IS NULL:2008/08/14(木) 14:20:15 ID:???
>>330
各ユーザーにAdministrator権限が設定されていて、
SQL Serverに接続できてしまうというオチだったりして。


333 :326:2008/08/14(木) 14:31:46 ID:???
 悔しかったんで、>>321への対応策を考えてみた。

 SQL Server 2005 SP2以降からログオントリガが設定できるようになったんで、
ログオントリガ中でAPP_NAME()が返す内容を調べ、許可されたアプリ以外だったら
ログオンを拒否する事で対策は可能。

 ただ、変にこんな仕組みを組み込んじゃうとトラブルの元になるから
オススメはしない。


ログオントリガについては、以下を参照。
http://msdn.microsoft.com/ja-jp/library/bb326598.aspx


334 :NAME IS NULL:2008/08/14(木) 15:02:29 ID:???
>>329
アプリケーションロールで解決できないかい?
http://msdn.microsoft.com/ja-jp/library/ms190998.aspx

335 :NAME IS NULL:2008/08/14(木) 15:41:41 ID:???
>>330
2層システムでのDB単位の読み書き削除権限だと思うが。
ていうかAは自分で書いたもので、Bは悪意を持った内部の
ユーザーが書いたものと言えば理解できるのか?

336 :NAME IS NULL:2008/08/14(木) 15:49:31 ID:???
>>334
なんかこれが正解っぽいけど、ADO.NETで自動コード生成できなくね?
ていうか別にこれならSQL Server認証でも同じじゃね?

337 :NAME IS NULL:2008/08/14(木) 20:00:19 ID:???
質問です。かなり困ってます。携帯からなので改行変だったらすいません。
SQL SERVER 2005 を使ってローカルサーバーのデータベースに接続してるんだけど
データベースの名前を変更してしまったので
SQL SERVER自体にログインできなくなりました。
コマンドプロンプト上で元の名前に戻すことは可能でしょうか。
コマンドプロンプト上じゃなくても何でもいいです。
3時間調べたのにサッパリわかりません。
誰か助けて下さい。お願いします。

338 :NAME IS NULL:2008/08/14(木) 21:00:00 ID:???
>>329
つアプリケーション巻

339 :初心者:2008/08/14(木) 21:00:35 ID:vu4PdX5p
すみません。SQLサーバーの本をよみはじめてものなんですが
ストアドで、AS まえ(ヘッダー)に変数を定義するものと、AS以降の中で
変数を定義するものの使い方の違いはなにがあるか教えてください


340 :NAME IS NULL:2008/08/14(木) 22:36:50 ID:???
>333
接続元のアプリから接続文字列のアプリ名を入れちゃえば好きなようにアプリ名を設定できるわけだが。
既存のアプリと同じアプリ名を名乗られてアウトになると思うよ。

341 :NAME IS NULL:2008/08/14(木) 22:53:58 ID:???
>>337
 コマンドプロンプトからだったら、osqlコマンドがあるからシステム管理者でログインして
ALTER DATABASEでデータベース名変更。
 あと、デタッチして新しいデータベース名でアタッチする方法もあるか。
 というより、Management Studioでシステム管理者として接続してGUIで変更した方が早いけど。

 システム管理者の権限があれば(データベースの名前を変えても)SQL Serverに接続できると
思うけど、何をどうしたの?



342 :NAME IS NULL:2008/08/14(木) 23:01:44 ID:???
windows認証にこだわる理由が分からんな

343 :NAME IS NULL:2008/08/14(木) 23:15:07 ID:???
>>342
Active Directoryと統合できるじゃん。(=パスワードポリシー等も統合できる)

 あと、SQL Server 2005では改善されたけど、SQL Server 2000まではアカウントポリシーも
設定できなかったし。
 余程、レガシーなアプリケーションを使っていない限り、Windows認証を使うべきだと思うけど。



344 :NAME IS NULL:2008/08/14(木) 23:35:37 ID:???
管理面倒だからWindows認証使わせてないけど

345 :NAME IS NULL:2008/08/14(木) 23:41:06 ID:???
>>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:2008/08/14(木) 23:48:47 ID:???
>>345
Management Studioにシステム管理者の権限(sa、もしくはAdministrator権限)を持ったユーザーで接続して、
[データベース]ツリーを展開して、当該のデータベースで右クリックして[名前の変更]を
実行するだけだけど。

 あと、名前を変更した後、[セキュリティ]−[ログイン]のプロパティで[規定のデータベース]の
変更するのを忘れないようにね。


347 :NAME IS NULL:2008/08/14(木) 23:53:32 ID:???
ちなみにクエリーでの変更方法は以下の通り。

alter database 旧データベース名 modify name = 新データベース名


348 :NAME IS NULL:2008/08/15(金) 00:09:25 ID:???
>>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:2008/08/15(金) 09:20:19 ID:???
348ですがマネージメントスタジオでデータベースを変えていました。。どうしよう。

350 :NAME IS NULL:2008/08/15(金) 10:12:50 ID:XhgDq30d
>>349
何をどう変えたのか 落ち着いて書かないと、だれも反応出来ないぞ

351 :NAME IS NULL:2008/08/15(金) 15:37:07 ID:???
>>343
マイクロソフトの宣伝文句そのままやんけ

352 :NAME IS NULL:2008/08/16(土) 04:42:24 ID:tVj6/05A
http://nobumatsu.cocolog-nifty.com/blog/2008/08/sql_server_2008.html
より
-----------------------------------------------------
ちなみに、SQL Server 2005はバグフィックスが全くなかった
信頼性の高い製品だということはご存じの方も多いと思いますが、
-----------------------------------------------------

このblog捏造にも程があるだろ!バグだらけじゃねーかよ。
明らかに前バージョン(2000)より酷い。


353 :bcp:2008/08/16(土) 07:33:06 ID:???
まあ、SP2 + その後の修正モジュールまで出てるのに、
バグフィックス "0" はないわな。

ただ、2000 より酷いか?
おれは、2000 の方が相当酷かったと思うが。

354 :NAME IS NULL:2008/08/16(土) 07:39:22 ID:???
ACCESSのMDBにエクスポート、インポートでエラー出まくりという時点で2000以下。


355 :NAME IS NULL:2008/08/16(土) 11:08:23 ID:tVj6/05A
>354
それのせいでACCESSほとんど使わなくなったなぁ。


356 :NAME IS NULL:2008/08/16(土) 15:28:41 ID:???
>354
やっぱあれって2005の不具合だったんだ…

357 :NAME IS NULL:2008/08/16(土) 22:12:07 ID:???
使用メモリ増えたら普通に落ちるしな

358 :NAME IS NULL:2008/08/17(日) 19:45:03 ID:SfEuPb5O
SQL SERVER 7.0 を使用してテープバックアップとファイルバックを
行っていたのですが、テープドライブを交換した後にオンラインバックアップが
機能せずにDBの応答が止まるようになりました。
テープでのバックアップはもちろん、ファイルでのバックアップの時でさえ
DBへアクセスできなくなります。バックアップが終了するとDBへアクセスできます。

所謂、アクティブオンラインバックアップが機能していないと思われますが、
設定で元に戻すことは可能でしょうか?

何か改善する良い方法はありませんでしょうか?

359 :NAME IS NULL:2008/08/19(火) 16:18:13 ID:???
2005から2008にバージョンアップする際の、機能の比較表等は
Microsoftから出されてたりするでしょうか。

バージョンアップの際のチェックリストを作成するにあたって、
比較対象となる資料を探していますがなかなか出てこないので…

2005からのマイナーチェンジ版という位置づけであれば、
単に移行した中身の確認で済みそうですが…何か注意するポイントはありますか?

長分で申し訳ありませんがご教授ください。

360 :NAME IS NULL:2008/08/19(火) 17:41:56 ID:???
ここで聞くより、MSのホームパージ行った方が早いし情報が多いし正確。
日程が許せばセミナーに参加することもできるし。

ttp://www.microsoft.com/japan/sqlserver/2008/default.mspx

361 :NAME IS NULL:2008/08/21(木) 20:18:08 ID:???
初心者の質問ですが、もしも知っている方がいたら教えてください。
sql server 2005 developer edition って、テストか運用かという概念的な制限が
あるだけで、物理的な制限はまったくないのでしょうか?
たとえば「○人以上がアクセスしに行くと読めなくなる」とか。

362 :NAME IS NULL:2008/08/21(木) 22:30:19 ID:???
ないよ。EEと同じ。

363 :NAME IS NULL:2008/08/21(木) 23:08:45 ID:???
テーブル定義書をさっくり出力してくれるツールってないもんかのお。
できればカラムの備考なんかも出力してくれるとうれしいんだが

364 :NAME IS NULL:2008/08/21(木) 23:23:14 ID:???
>>361
じゃあ、社内や身内で使うシステムなんかだと、こっそり
Developer使っている所もありそうだな。
あと弱小レンタルサーバ業者とか。


365 :NAME IS NULL:2008/08/21(木) 23:49:27 ID:???
ねえよ。

366 :NAME IS NULL:2008/08/22(金) 00:02:53 ID:???
>363
Visioでテーブル定義を管理してそこからマクロで出力できたりしないかと
頑張ってみたけどマクロから取得できない部分が結構あったり
設定がちょっと変わったりするといろいろデフォルト値とか飛んだりして細かい融通が利かなくて中途半端で使えなかった。
結局直接DBを読み込んで好みのフォーマットのxlsに出力できるツールを自前で作って使ってる。

367 :NAME IS NULL:2008/08/22(金) 07:12:35 ID:???
>>363
ObjectBrowser ER4ってそんな機能なかったっけ?


368 :NAME IS NULL:2008/08/22(金) 11:21:29 ID:???
>>364
実装評価中ですと言えば使えるなw>Dev

369 :NAME IS NULL:2008/08/22(金) 18:53:46 ID:???
>>361
通報しますた

370 :NAME IS NULL:2008/08/22(金) 19:24:51 ID:???
>>366
あれ? Visioでデータベースのリバースエンジニアリングでできなかった?


371 :NAME IS NULL:2008/08/22(金) 22:10:53 ID:???
>>366
なるほどのお。俺も結局自分で書くことにした。
とりあえず必要なデータを取得するとこまでできた。
まあがんばってみるわ。さんくす

372 :bcp:2008/08/22(金) 22:51:02 ID:???
>>370
できるお。

ただ、各カラムの備考まででたっけ?

373 :366:2008/08/23(土) 00:24:34 ID:???
>370
出来るんだけどマクロで備考とか外部キーとか取り出せなかったと思うよ。あまりにも中途半端だった。
これを元にテーブルに対応したクラスのソースを自動生成とかしたかったのに。
てっきり全部取り出せるものかと思って少ないサンプルをいろいろ試したけど時間の無駄だった。

374 :NAME IS NULL:2008/08/25(月) 11:28:42 ID:???
ストアドの結果をカーソルで取得することって
できるでしょうか?

イメージ的には下記なのですが・・・

DECLARE curHoge CURSOR FOR
EXEC sp_hoge



375 :NAME IS NULL:2008/08/25(月) 21:38:47 ID:???
>>374
INSERT INTO hoge EXEC sp_hoge
みたいに、ストアドプロシージャの結果を既存のテーブルにINSERTした後で
カーソルを使って読み込むってのはどう?


376 :NAME IS NULL:2008/08/26(火) 02:27:12 ID:???
SQL Server 2008 Express Edition って 4GB 制限なくなったの?
http://msdn.microsoft.com/ja-jp/library/cc645993.aspx
特に記載がないのだけれど

377 :NAME IS NULL:2008/08/26(火) 15:11:07 ID:???
DBから定義書出すなら
CSEって言うツール(ベクターとかにある)を使うと良いかも
ちょっと古くておもにOracle用に作ってあるんだが
SQLSERVERにもODBC接続できる

EXCELに定義書が出力されて
肩とかがちょっと違う名前で出されるんだけどその辺は手作業で修正

378 :NAME IS NULL:2008/08/26(火) 20:06:53 ID:???
>>376
http://www.microsoft.com/express/sql/download/
ここみたら4GB制限あるみたいだよ

379 :NAME IS NULL:2008/08/26(火) 20:34:28 ID:???
>>378
ありがと!

有償のパッケージソフトでExpressを使ってるのが多いんだけど、
例えば Search Server とかだと4GBってすぐいっちゃうんだよね。

毎度CPUライセンス買うのも何だし、CALはもっと高いし…。

380 :NAME IS NULL:2008/08/26(火) 23:19:07 ID:WgF1x9pf
Microsoft SQL Server 2008 Express with Advanced Services
http://www.microsoft.com/downloads/details.aspx?familyid=B5D1B8C3-FDA5-4508-B0D0-1311D670E336&displaylang=ja

このwithAdvanceServiceだけ、
ファイル名 : SQLEXPRADV_x64_JPN.exe
と64ビット版のファイル?しかダウソできない
(無印ExpressとWithToolは32版と64版がある)んだが、
これは32ビット用も含まれてるの?

もうインスコした人いる?

381 :NAME IS NULL:2008/08/26(火) 23:56:37 ID:???
2008入れたらうまく動かなくてアンインストールしたらVSとの連携が破壊された
って聞いてからびびって人柱の報告待ちでつ

382 :NAME IS NULL:2008/08/27(水) 00:13:35 ID:???
>>380
試したけど、含んでいなかったよ

383 :NAME IS NULL:2008/08/27(水) 00:23:20 ID:???
>>382
サンクス

てか他の言語だとx86とx64に別れてるな・・・
なにやってんだMSJapan

384 :NAME IS NULL:2008/08/27(水) 03:20:17 ID:???
>>383
直リン探してみたらあった。ちょっと怖いがので、Virtual PC に入れてみることにする。
http://download.microsoft.com/download/5/5/5/55596bc0-7fed-4d23-a373-75dab5d42de0/SQLEXPRADV_x86_JPN.exe

385 :NAME IS NULL:2008/08/27(水) 19:24:05 ID:???
セーフモードで起動しているときにSQL Serverのフォルダ名を変えてしまい、
通常起動したら接続できなくなってしまいました。
後でフォルダ名を元に戻したのですがそれでも接続できず・・。
こういう場合修復する方法はあるでしょうか?

386 :NAME IS NULL:2008/08/27(水) 21:58:23 ID:???
サービスは上がってんのか?

387 :NAME IS NULL:2008/08/27(水) 22:03:58 ID:???
>>385
SQL Serverが起動できていないのなら、イベントビューアのシステムログに記録されているはず。
>>386にも書かれているけど、まずSQL Serverのサービスが起動しているか確認すべき。

SQL Serverが起動しているかしていないかで、今後の対応が変わってくるから、
とりあえずは、その辺りを確認してみて。




388 :NAME IS NULL:2008/08/28(木) 09:41:38 ID:qu30JBOu
2008 Express インストした人に質問
Management Studio Express からもストアドのdebugできるようになった?
#クライアントの部分入れ替えようかな・・・と
#いま テスト環境作れなくって 

389 :385:2008/08/28(木) 12:07:34 ID:???
イベントビューアを見てみたら、サービス固有エラー 17058で停止してました。
「サービスとアプリケーション」から起動させて見ましたがやはり同じエラーで
とまってしまいました。
MSのHPには"ログ ファイル '%s' を開けませんでした。"という意味みたいですが
・・・再インストールしたほうがいいのかなぁ。

390 :NAME IS NULL:2008/08/28(木) 19:51:18 ID:???
>>389
どのログファイルが開けないの?
これだと、システムデータベースのログかユーザーデータベースのログか判らないから。

SQL Serverのエラーログは、
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG
にエラーログが記録されていると思うから参照してみて。
SQL Serverの起動オプションでなんとかなる場合もあるから。

もし再インストールするのなら、ユーザーデータベースの*.mdfと*.ldfだけはコピーしておいてね。
後でアタッチすれば戻るはずだから。(ただ、ログファイルが開けませんでした、というメッセージが気になるけど)



391 :NAME IS NULL:2008/08/28(木) 23:53:49 ID: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:2008/08/29(金) 05:13:24 ID:???
>>391
ファイアウォールの構成は?
SQL Server Browser を使うなら UDP 1434 を空けて、
名前付きインスタンスの sqlservr.exe をプログラムの例外に追加する必要があるよ。
http://support.microsoft.com/kb/914277/ja
http://msdn.microsoft.com/ja-jp/library/cc646023.aspx

SQL Server Browser を使わない場合は、
名前付きインスタンスを動的ポートから固定ポートに変更して、そのポートを空ける。
http://www.atmarkit.co.jp/fdotnet/dotnettips/545sqlsvrnet/sqlsvrnet.html
接続には「tcp:<コンピュータ名>\<インスタンス名>, <ポート番号>」の接続文字列を使うこと。

393 :385:2008/08/29(金) 18:09:34 ID:???
>>390
ありがとう。そのあたりを調べてみます。

394 :NAME IS NULL:2008/09/01(月) 09:48:48 ID:???
自分はUDP1434決め打ちじゃなくて sqlbrowser.exe を例外に追加してる

395 :NAME IS NULL:2008/09/02(火) 19:46:26 ID:???
2008には前みたいな専用の管理ツールついてないのかな。
Express入れたはいいけど管理ツールがついてなくて弄れない。
VS2008からまあ触れるんだけど、ManagementStudioの2008版ってExpressにはないのかな?

396 :NAME IS NULL:2008/09/02(火) 21:32:22 ID:???
これじゃダメ?

SQL Server 2008 Express with Tools
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7522a683-4cb2-454e-b908-e805e9bd4e28

397 :NAME IS NULL:2008/09/02(火) 22:08:30 ID:???
http://www.microsoft.com/japan/sqlserver/2008/seminar/te08.mspx
の北川さんのセミナーどうだった。
この人は日本オラクルのデータベースの製品責任者だったよな。

398 :NAME IS NULL:2008/09/03(水) 10:05:39 ID:???
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:2008/09/03(水) 10:30:52 ID:???
>>398
実行計画って両方同じか?


400 :NAME IS NULL:2008/09/03(水) 11:08:39 ID:???
>>398
それ以前に'%aaa%'みたいな書き方だとインデックスが効かないからね。
前回に実行したレコードの結果がキャッシュにあったからとか。


401 :NAME IS NULL:2008/09/03(水) 13:15:35 ID:???
Like検索は遅いよね
フルテキストインデックスもいまいち使えないし
ナマズ検索とか入れてみようかな?

402 :NAME IS NULL:2008/09/03(水) 15:00:03 ID:???
>>401
前方一致ならインデックスが効くから速いんだけどね。
後方一致でも、REVERSE関数でインデックスを効かせるという裏技もあるんだけど、
中間一致はインデックスが効かないから。

TechEDでPassJのBoFに参加したんだけど、SQL Server 2008のフルテキストインデックスは
なんとか使い物になるらしいけど、どうなんだろ?



403 :NAME IS NULL:2008/09/03(水) 23:34:07 ID:rUAiPbPY
SP2の累積更新パッケージってもう10までいってるんだな。
どんだけバグってるんだよ。SP2以降のバグまとめサイトとかないのか?

404 :NAME IS NULL:2008/09/04(木) 10:03:38 ID:???
>>403
いっそのこと2008にしてしまうっていうのはどうだ?
累積バグはほぼ解決されているだろうし。


405 :NAME IS NULL:2008/09/04(木) 20:47:02 ID:???
SQL Server 2005 Compact Edition って、リモートPCからアクセスできますか?


406 :NAME IS NULL:2008/09/04(木) 21:38:19 ID:m0oEq6NU
>404
新規機能以外は安定動作すると信じたいが、
2008はジャーバージョンUPなんだからSP1が出るまでは様子見だろ



407 :NAME IS NULL:2008/09/05(金) 01:16:46 ID:???
>>406
そんな事言ってたらいつまでたっても使えないorz

408 :NAME IS NULL:2008/09/06(土) 09:20:57 ID:???
>>406
つか、実際にはマイナーバージョンアップみたいなもんだから大丈夫じゃね?




新機能以外は。


409 :bcp:2008/09/06(土) 17:12:24 ID:???
>>405
なんで Compact Edition なの?

410 :名無しさん@ゴーゴーゴーゴー!:2008/09/06(土) 18:23:38 ID:???
どなたか、WindowsVistaで無料で使えるSQLServerを教えてください(MS)
EnterpriseManagerがあるもので><

SQL2005のあたりでしょうけど

411 :NAME IS NULL:2008/09/06(土) 20:55:29 ID:TEM3Zsb9
ExpressEditionは? SQL Server Management Studio しかないけどね
2000までじゃないのかな?>EnterpriseManager

412 :NAME IS NULL:2008/09/06(土) 21:57:48 ID:izhmgg+/
あ、レスありがとうございます

ExpressEdition SP2と
SSMSEE SP2とで、なんとかEnterpriseManagerの代用はできるみたいです

SP2=Vistaでも使える

今から、データーベースなどを入れて動くかどうか試します(*´ω`)



413 :NAME IS NULL:2008/09/06(土) 22:39:27 ID:???
2008でもある

414 :NAME IS NULL:2008/09/07(日) 00:13:58 ID:8QjXdBnk
SQLServer Management Studioには
Server2000の無償版のような、SQLServer エージェントの機能はないんでしょうか?

別の方法でエージェント機能が使えるならそちらでもいいのですが;;

415 :NAME IS NULL:2008/09/07(日) 00:31:26 ID:???
何から何までここで聞く気か?

416 :NAME IS NULL:2008/09/07(日) 01:36:13 ID:8QjXdBnk
すみません
なにやらVistaでSQLServer2000が動くと言っている人がいるのですが
実際、動かすことできるんでしょうか?
私の経験ではできなかった気がするのですが・・・(´・ω・`)

417 :NAME IS NULL:2008/09/07(日) 02:04:00 ID:???
その話が>>414 の質問とどう繋がるんだよ。
私の経験とか言うな

418 :NAME IS NULL:2008/09/07(日) 03:06:30 ID:8QjXdBnk
>>417
?|ω・`) 落ち着いて下さい

皆様助言ありがとうございます。無事アプリケーションを動かす事ができました

私が414でいったことは
SQLServer2005/2008 ExpressEditionにはSQLServer Agenは付属しておらず
別途、この機能をあくまでも無料の範囲で実現できるものかとお伺いした所存でございます

Developerを買えと煽られればそれまでの所でございますが
無償版で、詰まるところお金を使わずにどこまでいけるものなのかという話でした
結局、5000円程度払えばすむ話だったのもありますが
SQLServer2000を入れることで解決しました(Vistaでも強制的に入れれる模様)
これから、同じ事を考える人のために一応お書きしました

尚、SQLServer2000は やはりセキュリティー面で脆弱な為
不安な方は2008 Developer版をお勧めします。

皆様ありがとうございました

419 :NAME IS NULL:2008/09/07(日) 08:48:02 ID:???
落ち着いてくださいにわろた

420 :NAME IS NULL:2008/09/07(日) 09:31:57 ID:qU/73or3
EX版は機能制限が多いからしょうがないね
仕事で使うなら、後々のこと考えると2005/2008で評価しとかないと と思う
#大きなお世話w

421 :NAME IS NULL:2008/09/07(日) 10:24:30 ID:???
そもそもエージェントの機能って使うかや?

422 :NAME IS NULL:2008/09/07(日) 10:39:45 ID:???
自動メンテとか、ミラーリングの監視とか。
ほとんどOSのタスクスケジューラで代用できるから、
そのためだけに2000を使うとか馬(ry

423 :NAME IS NULL:2008/09/07(日) 20:15:16 ID:s+5Pmz84
SQL Server2000をPCに入れたいんですが、どうしたらよいでしょうか?
あるソフトを起動させたいのですが、そのソフトはNET Framework1.1とSQL Serverを入れないといけないらしいです。
どなたか解説してくれる人はいませんでしょうか??
すいません初心者なんで

424 :NAME IS NULL:2008/09/07(日) 20:19:52 ID:???
ソフト名伏せてちゃどんな設定で入れたいのかわかんねえよ。
そのソフトの導入手順書読めよ。

425 :NAME IS NULL:2008/09/07(日) 20:26:50 ID:s+5Pmz84
すいません
AISっていうソフトです。
そのソフトの導入手順書には
SQL Server2000(ver8.00.760以上)をインストールしてくださいとしか書いてありません


426 :NAME IS NULL:2008/09/07(日) 20:48:18 ID:???
DBとAISは別のPCに入れるの?
持ってるSQL ServerはStandard?
AISって何するソフト?
もしふつうのパッケージソフトでなければ当然誰もわからんからベンダに
聞くか、お仕事だったら情報システム部にでも聞いたほうがいいよ。

SQL Server入れるだけならインストーラ動かすだけなので特に難しい
ところはない。つまるとすればサービスアカウントと認証モードのあたり
だが、こればっかりは手順書に指定がないのならAISとやらを作った
ベンダにしかわからない。

427 :bcp:2008/09/07(日) 22:41:19 ID:???
> ver8.00.760以上

SQL-Server 2000 入れて、SP3 以上 (最新は SP4 かな?) を当てればいい。

つーか、>>426 も書いてる通りその導入手順書書いた所に問い合わせた方がいい。

428 :NAME IS NULL:2008/09/08(月) 22:45:12 ID:???
エンプラ2000とMSDE2000で
スケジュールバックアップやってたんだけど
同じ機能って2005にもある?

スタジオじゃそれらしい項目見あたらなかったんだが

429 :NAME IS NULL:2008/09/09(火) 00:22:21 ID:???
オレオレ略語でまくしたてる人ってきもいな。


430 :NAME IS NULL:2008/09/09(火) 09:35:26 ID:/zqMJM+Y
>>428
機能比較表くらいは嫁よぉ

431 :NAME IS NULL:2008/09/09(火) 10:52:18 ID:???
SQLエージェントがなければWindowsタスクを使えばいいじゃないか。



ところで、日立って何でもかんでもJP1を勧めてくるの?
必要な人には必要なんだろうけど、SQL Serverのエージェントで十分だと思うんだが。


432 :NAME IS NULL:2008/09/10(水) 00:31:04 ID:???
JP1は監視中のログファイルをつかみっぱなしにするので
ログファイルを一定サイズとかでリネームしたりして
切り替えていくことが出来なくて困った記憶が。
今でもログは肥大化し続けているというか…

433 :NAME IS NULL:2008/09/11(木) 00:34:04 ID:???
すまん、教えてくれ。
おまえらエージェントって何に使ってんだ?

434 :NAME IS NULL:2008/09/11(木) 10:15:31 ID:P/HcnLlc
時間指定でバッチを流す場合じゃない?
#使ったことないけどw

435 :NAME IS NULL:2008/09/11(木) 14:23:47 ID:???
ストアドで質問です。

動的にテーブルを作成する。
ストアドが作りたいのですが、できません。
仕様はあるファイルからテーブルの列、型、文字数を取得して、
ストアドにパラメータを渡して自動的にテーブルを作成するプログラムです。

問題は列の数は(1〜n)で可変です。
ストアドに渡すパラメータは可変にすることは出来るのでしょうか?


EXEC CreateTable ’項目(配列)’ ’文字数(配列)’ ’型名(配列)’

見たいにできませんか?

436 :NAME IS NULL:2008/09/11(木) 17:21:38 ID:???
>>435
CURSOR使えば出来んじゃね?

437 :NAME IS NULL:2008/09/12(金) 13:53:37 ID:???
>>396
返事遅くなって申し訳ない。
IP制限で全然入れなくて・・・

それで早速それを入れてみたんだけど、管理ツールらしきもののインストールが見つからなかった。
レプリケーションとかに関してや、ヘルプがどうとかはあったんだけど。
インストール関係の専用ウィンドウがでるけど
その左ペインにあるインストールの項目を選んでも、本体のインストールかレプリケーション自体しか項目がなかった。
一体どれが管理ツールなのかな・・・

438 :NAME IS NULL:2008/09/12(金) 13:58:50 ID:???
>>437
Management Studioというのは見つからなかったかい?


439 :NAME IS NULL:2008/09/12(金) 14:36:42 ID:???
このSQL Serverを自宅のパソコンで少し勉強してみたいのですが、
XPで無償版をインストールして勉強だけはできるのでしょうか?


440 :NAME IS NULL:2008/09/12(金) 21:00:01 ID:???
勉強できるかどうか勉強しろ

441 :bcp:2008/09/12(金) 21:30:15 ID:???
無償なんだから入れてみればいいのに...。

上にも誰か書いてたように認証モードとか辺りでつまづくかもしれない
けど、それも勉強のうちだ。

どうしてもわからんならやったことと結果をきちんとこのスレに書けば、
誰かが助けてくれる... かも知れない。

442 :NAME IS NULL:2008/09/13(土) 14:58:12 ID:PTrJ4U+T
普通に使う分にはいいんじゃ無い
後は赤本かビギナーズガイド見ればいいんじゃないかな?
#2008版はまだ出てないけどね

443 :NAME IS NULL:2008/09/13(土) 18:57:40 ID:???
自宅のパソコン 2台の一方(XP Pro)にSQL Server、
もう一方(Vista)にManagement Studioを入れたんだけど
SQL Server認証でならログインできるのに
Windows認証でできない。
どこを設定すればいいのでしょうか?


444 :443:2008/09/13(土) 19:14:02 ID:???
自己解決
新しいログインで「NT AUTHORITY\NETWORK」を作った。
両方のパソコンに同じアカウントを作るだけじゃダメなのか・・・
スレ汚しスマソ。

445 :NAME IS NULL:2008/09/14(日) 00:09:51 ID:6q39VD8B
>>442
2008の本はもう出版されています。
情報遅すぎ。

446 :NAME IS NULL:2008/09/14(日) 01:59:15 ID:???
何コイツ(笑)

447 :NAME IS NULL:2008/09/14(日) 22:21:51 ID:???
詳しい方、教えてください。
例えば、
INSERT INTO 高額商品表 SELECT DISTINCT 商品名 FROM 価格表 WHERE 単価 >= 10000
みたいな感じで複数レコードを抽出して高額商品テーブルに挿入したいのですが、
高額商品テーブルの商品名列に一意制約指定しています。
一意制約違反とならないレコードのみ高額商品テーブルに挿入するためのSQLは
どのように書けばよろしいでしょうか?

448 :NAME IS NULL:2008/09/14(日) 22:38:43 ID:???
>>447
商品名が一意制約ってのはどうかとは思うが、、、

INSERT INTO 高額商品表
  SELECT DISTINCT 商品名 
  FROM 価格表
 WHERE 単価 >= 10000
    AND 商品名 NOT IN(SELECT 商品名 FROM 高額商品表)

449 :NAME IS NULL:2008/09/14(日) 22:50:21 ID:???
>>447
同一の商品名で、顧客ごとに価格が変わる事はよくあることだと思うので、
DB設計者に一言確認した方がいいと思う。

450 :NAME IS NULL:2008/09/14(日) 22:54:33 ID:???
エラーが出なくなったからおk、
コンパイル通ったからおk、
みたいな人いるよなー。

451 :NAME IS NULL:2008/09/14(日) 22:57:50 ID:???
早速の回答ありがとうございます。
例では単純に書いてしまったのですが、実際は1レコード単位で商品名列が
3つに分割されています。
商品名1、商品名2、商品名3で商品名3がユニーク列です。
この場合に、商品名1〜3と単価を高額商品表に挿入する場合は、どのように
書けばよいでしょうか?

452 :NAME IS NULL:2008/09/14(日) 23:12:43 ID:???
>>451
>>447の例もそうなんだけどさ、
テーブルである必要性がわからん。
単価が固定であればビュー、可変ならストアドで充分じゃね?
可変で別にSELECTしたいってんなら、テーブル関数ってのもあるし。
なんでテーブル?

453 :NAME IS NULL:2008/09/14(日) 23:20:23 ID:???
抽出された高額商品表をマスタ的な使い方します。
高額商品表に抽出されたレコードに各種情報を付加し、
価格表のレコードを付加情報を付けた状態にアップデートしたいのです。

454 :NAME IS NULL:2008/09/14(日) 23:27:21 ID:???
>>453
その一連の流れの中で飲み使うのであれば、
ストアド内でテーブル変数使ったほうが楽じゃないかな?

455 :NAME IS NULL:2008/09/14(日) 23:27:31 ID:???
ちょっとは自分で考えろよ。危うい感じがするなー。
ていうか、付加情報を別テーブルにして高額商品ビューと結合とかすればいいやん。

456 :bcp:2008/09/14(日) 23:58:53 ID:???
俺も危うい感じがするなぁ〜。

そもそも

> 一意制約違反とならないレコードのみ高額商品テーブルに挿入するためのSQLは

で、違反となる奴はホントに処理しなくていいんか?

なんか、マジで >>450 みたいに思ってそうで怖い。

457 :NAME IS NULL:2008/09/15(月) 09:07:51 ID:???
制約違反となるものは最初1件とか条件があるんだと思うよ。
INSERT,SELECT文 一発では行わず、
カーソル付きSELECT文で対象レコードを取得して
WHILEループで制約違反にならないように
INSERTしていくという方法もあるよ。

458 :NAME IS NULL:2008/09/15(月) 23:46:08 ID:???
そうです、最初の一件目で制約違反で止まります。
カーソルについて勉強してみます。どうもありがとう。

459 :NAME IS NULL:2008/09/16(火) 01:25:44 ID:???
VB2008+SQL Server 2005 Express を使用して業務アプリを開発しています。
サーバーなどはたてずに、mdfファイルは配布しようとしています。
その場合、Management Studioなどでmdfの中身(ストアドなど)を参照する事が可能だと
思うのですが、それをできないようにする方法はあるでしょうか?
開発者以外にはストアドを参照させたくないのです。

よろしくお願い致します。


460 :NAME IS NULL:2008/09/16(火) 10:11:38 ID:???
>>459
>サーバーなどはたてずに、mdfファイルは配布しようとしています。
これってcompactになるんじゃないの?
っつ〜かAccessをぶち込んでも変わらない気がするんだけど、パスワードかけておけばいいのでは?
…ただどっちにしてもReflector for .NETで気合い入れて見ていけばわかるというオチがw

461 :NAME IS NULL:2008/09/16(火) 20:17:28 ID:???
SQL Server 2008のManagement Studioで、2005にはあった、
利用状況モニター>プロセスによるロックってどこにいったの?
 

462 :NAME IS NULL:2008/09/16(火) 21:32:37 ID:???
>>461
今俺の横で寝てる

463 :NAME IS NULL:2008/09/16(火) 22:19:33 ID:???
>>461
まだ見つけられないの?(^.^)

464 :NAME IS NULL:2008/09/17(水) 00:57:45 ID:???
>>460
回答ありがとうございます!

>これってcompactになるんじゃないの?
すみません、ストアド資産を流用したかったのでcompactにしてないです(^_^;

パスワードはデータベースに対して設定することができるのでしょうか?
できるのであればとりあえずそれで対処したいのですが…


465 :NAME IS NULL:2008/09/17(水) 01:09:48 ID:???
まさか寝てないよな?
書き逃げか?(^.^)

466 :NAME IS NULL:2008/09/18(木) 21:36:10 ID:???
GUIDを格納するカラムに、初期値を設定したいのですが、マネージメントスタジオで
何を入力すれば良いのでしょうか?

データ型がuniqueidentifierのカラムの「規定値またはバインド」にどう設定したら、
初期値を00000000-0000-0000-0000-000000000000に出来るのでしょうか?


467 :NAME IS NULL:2008/09/18(木) 22:42:57 ID:???
SQLServer2005でCSVファイルをインポートしたいのですが、
エラー発生時にロールバックしないようにするにはどうすればいいのでしょうか?

468 :NAME IS NULL:2008/09/19(金) 08:30:27 ID:???
('00000000-0000-0000-0000-000000000000')でした

469 :NAME IS NULL:2008/09/24(水) 01:09:26 ID:???
質問させてください。
↓こんなストアド作ったんですけど、ほとんどは正常な値で帰ってくるけど、30回に一回ぐらい
全然違う値で帰ってきます。。。ちなみにデータ量が多いときほど顕著になる気がします。

ストアド@で一時テーブル作って、EXEで別のストアドA呼んで、元のストアド@で作った一時テーブルに処理結果を格納。
格納されたデータをストアド@で加工して結果を返す

毎回間違ったデータが帰ってくればいいんだけどたまに違う結果が出るってどういうことしょうか?
よろしくお願いします。

470 :NAME IS NULL:2008/09/24(水) 02:00:14 ID:???
質問の仕方からして駄目だな。

471 :469:2008/09/24(水) 02:13:46 ID:???
ストアドの内容がかなり間違っていました。

1.ストアド@で一時テーブルを作ってデータも格納
2.別のストアドA呼んで、元のストアド@で作った一時テーブルに対してカーソルを定義し、データを操作
  して結果を@に返す
3.ストアド@に帰ってきたデータを加工して最終的なデータができる

1.で作ったテーブルの件数が少ないとうまくいくようです。
たまに誤った結果が返るってことは領域の問題なんでしょうか?

472 :NAME IS NULL:2008/09/24(水) 15:34:07 ID:???
質問の仕方からして駄目だな。

473 :NAME IS NULL:2008/09/24(水) 16:22:24 ID:???
再現性のあるミニマムのソースを出すのが早いよ

474 :469:2008/09/24(水) 21:12:52 ID:???
質問の仕方が悪かったですね。
今日いろいろ解析して、何とか解決しました。
2.のカーソル操作ではレコードが日時順に並んでいなければいけないのに
1.のテーブル作成で明示的にORDER BYを記述していないため、レコードの並び
順が保障されていなかったのが原因のようです。日時順のデータだったのでその
まま使っても問題ないと思っていたのが間違いのようです。

475 :NAME IS NULL:2008/09/26(金) 10:15:51 ID:cv9ybFuz
>2.のカーソル操作ではレコードが日時順に並んでいなければいけないのに
使うときにsortしないか?

476 :NAME IS NULL:2008/09/26(金) 17:43:11 ID:???
> 1.のテーブル作成で明示的にORDER BYを記述していないため、レコードの並び
> 順が保障されていなかったのが原因のようです。

テーブル作成時にORDER BY指定しても、読み込み時にソート順は保障されないぞ。

※SQL Server 6.5では保障されていたが、SQL Server 7.0以降で保障されなくなった。


477 :NAME IS NULL:2008/09/27(土) 05:56:49 ID:4wGR4Hje
×テーブル作成
○カーソル定義

478 :469:2008/09/27(土) 11:38:49 ID:???
説明が間違えていました!
2のカーソル定義時にソートすることによって解決しました。

479 :NAME IS NULL:2008/09/29(月) 12:20:52 ID:???
SQL-Server 2000使ってます。
DBのバックアップのダイアログで、中断のラジオボタンの下二つ、
[トランザクション ログ]と[ファイルとグループ]がDisableになっているんですが、
これはどういった条件でなるんでしょうか?
トランザクション ログのバックアップを取りたいんですけど・・・。

480 :NAME IS NULL:2008/09/29(月) 12:39:35 ID:???
完全バックアップは取ったの?

481 :NAME IS NULL:2008/09/29(月) 12:48:14 ID:???
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:2008/09/29(月) 13:23:48 ID:???
テンポラリテーブル作ってそこにインクリメントキーのついた列を追加
ってので俺は回避したな

483 :NAME IS NULL:2008/09/30(火) 01:03:15 ID:???
>>480
レスありがとうございます。

>完全バックアップは取ったの?
取ってないです。
完全バックアップの実行とラジオボタンのDisableが
関係あるということでしょうか?

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


485 :NAME IS NULL:2008/09/30(火) 21:37:35 ID:K5B3Tyx1
すいません、質問です。。

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

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

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

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

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

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

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

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




488 :bcp:2008/10/01(水) 00:07:51 ID:???
日本語読めないのか?

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

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

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

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

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

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

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

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

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


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


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

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

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:2008/10/04(土) 12:44:49 ID:???
サイズが小さいテーブルならUNIONしてDISTINCTして同じ件数とかでいけそうな気がする。

496 :NAME IS NULL:2008/10/04(土) 13:56:33 ID:t3OKmBtk
テキストで書き出してDIFF

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



498 :NAME IS NULL:2008/10/04(土) 14:47:47 ID:ZuEJHK9A
>>494
except

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

500 :NAME IS NULL:2008/10/04(土) 19:44:41 ID:???
ソートしてrow_numberつけて

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

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

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


502 :NAME IS NULL:2008/10/05(日) 19:34:38 ID:???
制限4GBじゃなかったか?

503 :NAME IS NULL:2008/10/05(日) 19:37:30 ID:???
>>501
俺なら2GB乗せる

>>502
よく読め

504 :NAME IS NULL:2008/10/05(日) 20:15:49 ID:???
>>503
DB要領と勘違いしてたお^^

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

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



507 :NAME IS NULL:2008/10/07(火) 06:05:10 ID:???
おれなら4GB載せるけどな。

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

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

509 :NAME IS NULL:2008/10/07(火) 12:09:22 ID:???
System.Data.Odbc

510 :NAME IS NULL:2008/10/07(火) 13:45:15 ID:???
>>509
やっぱODBC経由しかないのかorz

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

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

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

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

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

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

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

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

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

519 :NAME IS NULL:2008/10/10(金) 00:02:22 ID:???
シーケンス使えないから糞


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

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

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

521 :NAME IS NULL:2008/10/10(金) 14:31:39 ID:???
>>520
関数じゃダメなのか?

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


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

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


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

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

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

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

527 :NAME IS NULL:2008/10/11(土) 01:14:17 ID:???
便所の壁で仕事に関する相談かぁ

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

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

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

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

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

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

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

531 :NAME IS NULL:2008/10/11(土) 22:20:10 ID:???
>>530

1.福田のせい

2.小泉のせい

3.竹中のせい

ですね。

532 :NAME IS NULL:2008/10/11(土) 23:11:37 ID:???
>>531
違うよ

・麻生のせい

だよ。

533 :NAME IS NULL:2008/10/11(土) 23:39:03 ID:???
>>532
チッ

534 :NAME IS NULL:2008/10/12(日) 02:46:22 ID:???
あっそぅ

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

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


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

537 :535:2008/10/12(日) 20:08:23 ID:???
>>536
なるほどこれか
http://itpro.nikkeibp.co.jp/article/COLUMN/20060811/245694/

なお、マイクロソフトOS別利用許諾契約まとめ(っぽいもの)↓
http://www.geocities.jp/hpt_user99/eula.html

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

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

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


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

541 :NAME IS NULL:2008/10/13(月) 05:55:06 ID:???
>>540
 遊びなら
http://sourceforge.net/projects/mod-aspdotnet
http://anmar.eu.org/mono/mod_mono/
このあたりから調べれば

実用ならわからん


542 :NAME IS NULL:2008/10/13(月) 07:06:18 ID:???
英語だけどなんとか調べてみるわ

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

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

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


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

545 :NAME IS NULL:2008/10/15(水) 02:06:29 ID:???
シノニムのことかい?

SELECT tbl.ENGLISH_NAME 日本語名 FROM tbl

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

547 :NAME IS NULL:2008/10/15(水) 14:16:36 ID:???
>>403
http://sqlserverbuilds.blogspot.com/

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

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


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

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

AAA|10
BBB|20

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

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

550 :NAME IS NULL:2008/10/16(木) 00:25:44 ID:???
>>548
SQLの前に説明の仕方を勉強汁

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

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

SQL質疑応答スレ 7問目
http://pc11.2ch.net/test/read.cgi/db/1223525474/

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

553 :NAME IS NULL:2008/10/16(木) 01:36:27 ID:???
>>548
無理だろ、、、どこにも紐付いてないだろ、、、

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

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

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


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

まあ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:2008/10/16(木) 21:06:23 ID:???
>>555
お前さんがちょっと面倒見がよくてよく回答してる奴だってことはわかった

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



558 :NAME IS NULL:2008/10/17(金) 01:38:51 ID:???
疑いだしたら匿名掲示板はNO RECORDです

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

<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>の全て取得したい。
A各テーブルは最新の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:2008/10/17(金) 10:32:11 ID:???
>>555
Viewを使っての(見かけ上)別レコードにする方法試してみます。
ただ、TableAが200列とかあるので遅くなりそうな・・・。
構造は変えられないので正規化できないですし。

連投すみません。

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

562 :NAME IS NULL:2008/10/17(金) 14:54:34 ID:???
先物一回死んで・・

563 :NAME IS NULL:2008/10/17(金) 14:55:27 ID:???
誤爆

564 :NAME IS NULL:2008/10/17(金) 20:21:41 ID:YYMduugc

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

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

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


565 :NAME IS NULL:2008/10/17(金) 22:12:12 ID:YYMduugc

追記です。

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

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


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

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


568 :NAME IS NULL:2008/10/17(金) 23:52:36 ID:nUyHAdFv

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

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


569 :bcp:2008/10/18(土) 09:24:25 ID:???
>>568
> なるほど〜。

何がなるほどなんだか。

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

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

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

570 :NAME IS NULL:2008/10/18(土) 20:41:44 ID:???
以下の手順で、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:2008/10/18(土) 21:57:41 ID:???
>570
普通はデタッチしてアタッチし直す。

572 :NAME IS NULL:2008/10/18(土) 23:23:37 ID:1KkMfcNq
>>569

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



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

574 :NAME IS NULL:2008/10/19(日) 00:14:19 ID:???
補足です。

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

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

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

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


577 :NAME IS NULL:2008/10/19(日) 02:03:10 ID:???
>>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:2008/10/19(日) 02:15:26 ID:???
exists

579 :NAME IS NULL:2008/10/19(日) 02:21:45 ID:???
>exists
mjk


580 :NAME IS NULL:2008/10/19(日) 03:42:11 ID:???
>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:2008/10/19(日) 03:46:03 ID:???
訂正:
誤: (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:2008/10/19(日) 09:42:59 ID:???
>>571
ありがとうございます。調べてみます。

583 :NAME IS NULL:2008/10/19(日) 12:15:41 ID:???
すいません、質問です。

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

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

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

586 :NAME IS NULL:2008/10/19(日) 12:47:03 ID:???
SQL Server Profiler

587 :NAME IS NULL:2008/10/19(日) 12:48:03 ID:???
つか2000かよ。知らね。

588 :NAME IS NULL:2008/10/19(日) 17:42:40 ID:???
>>586
それだ!

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

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

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

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


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

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

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

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


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

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

596 :NAME IS NULL:2008/10/19(日) 21:59:43 ID:???
パラメータを利用したSQL文ではSQLインジェクションは発生しないとされる(ttp://www.atmarkit.co.jp/fdotnet/basics/adonet03/adonet03_02.html)。
これが可能であるためには、例えば
 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:2008/10/19(日) 22:09:25 ID:???
答えとしては、これか。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061003/249674/
パラメータはSQL本体とは別に送られるのであって、エスケープでしのいでるんではない。
ていうか、文字列途中の[']を勝手に['']にエスケープしたらイカン。検索が致命的に働かなくなる。


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

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

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

600 :NAME IS NULL:2008/10/20(月) 17:49:31 ID:Fvc0cWYg
質問です。

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

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

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


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

602 :NAME IS NULL:2008/10/20(月) 19:58:39 ID:???
すみません、質問です。

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

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

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

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

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



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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

613 :602:2008/10/21(火) 19:51:57 ID:???
みなさん、レスありがとうございます。

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

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

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

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

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


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

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

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

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

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


620 :NAME IS NULL:2008/10/22(水) 04:01:15 ID:???
>>615
insert 〜 select 〜

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


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

622 :NAME IS NULL:2008/10/22(水) 10:14:48 ID:???
すいません、質問です。

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




623 :NAME IS NULL:2008/10/22(水) 11:25:22 ID:???
2005 スタンダードです。

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

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

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

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

625 :NAME IS NULL:2008/10/22(水) 15:07:52 ID:???
test

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

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

628 :NAME IS NULL:2008/10/22(水) 16:32:14 ID:???
>>626
もう少し状況を詳しくw

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

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

630 :NAME IS NULL:2008/10/22(水) 16:58:03 ID:???
>>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:2008/10/22(水) 19:01:23 ID:???
623です。

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

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

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

634 :NAME IS NULL:2008/10/22(水) 20:28:34 ID:???
質問

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

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

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

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

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




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

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

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

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


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

638 :NAME IS NULL:2008/10/22(水) 21:33:29 ID:???
>>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:2008/10/22(水) 21:50:46 ID:???
>>635
この前も言っただろ。

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

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

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

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



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


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

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

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


644 :NAME IS NULL:2008/10/22(水) 23:55:19 ID:???
>>631
SELECT TOP 1 なんちゃらかんちゃら ORDER BY >>624

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

646 :NAME IS NULL:2008/10/23(木) 00:14:02 ID:???
>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:2008/10/23(木) 00:40:12 ID:???
>>642
>>643

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

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

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

649 :NAME IS NULL:2008/10/23(木) 16:30:16 ID:JH33FFPU
質問です。
フルテキスト検索を行っているのですが、
実際に検索をかけるとかなりの時間を要します。長いと30秒くらい。

挙動を見ていると、時間をあけてSQLを発行すると遅い。
時間をあけてるときにテーブルへの変更が無くても遅い。
2回目以降は条件を変えても早い、同じカタログの別テーブルも早い。

フルテキストインデックスは CHANGE_TRACKING AUTOで作成、
検索はcontains句を使用しています。
アドバイスいただけると幸いです。

650 :649:2008/10/23(木) 16:35:05 ID:???
ちょっとわかりづらかったので補足。

要は、ある程度の時間をあけて検索すると遅い、
1度結果が返ってくれば2回目以降は即座に結果が返ります。

それと環境書き忘れました。

DB:SQL Server2005 Standard
OS:2003 server

対象テーブルは1万件程度、フルテキスト検索の対象カラムは8個です。
よろしくお願いします。

651 :NAME IS NULL:2008/10/24(金) 00:52:40 ID:???
>650
自動終了のオプションでも入っているとか?

652 :NAME IS NULL:2008/10/24(金) 01:40:17 ID:???
>>650
HDDが寝てるとか?

653 :NAME IS NULL:2008/10/24(金) 02:40:08 ID:???
2回目早いのは単にキャッシュでしょ


654 :NAME IS NULL:2008/10/24(金) 03:56:44 ID:EMvKOCzo
超初心者ですみませんけど、
無料で配布してたんで、飛びついてsql server 2008をインストールしたのはいいんですけど、
データソースの資格情報の入力の部分で、
ユーザー名、パスワードが求められるんですけど、
パスワードとか身に覚えないんですけど、
何処に行ったら取得できますか?

655 :NAME IS NULL:2008/10/24(金) 04:02:43 ID:???
>>653
条件を変えても有効なキャッシュ、かぁ。

656 :NAME IS NULL:2008/10/24(金) 04:04:07 ID:???
>>654
Windows認証なら適したユーザ名とパスワード
SQLサーバ認証なら設定したIDとパスワード

657 :NAME IS NULL:2008/10/24(金) 09:32:05 ID:???
Windows認証ってよくわからないんだけど、
クライアントでManagementStudioなんかのログイン画面でWindows認証選ぶと
ユーザがドメインアカウントに固定されてパスワードとか入力できないんだけど、
SQLサーバはAD参加必須ってことですか?

658 :NAME IS NULL:2008/10/24(金) 12:11:35 ID:???
>>655
条件変えてもと言うか、検索対象は変化ないので。

659 :NAME IS NULL:2008/10/24(金) 13:56:13 ID:???
>>657
ワークグループで運用する場合、クライアントとサーバーで
ユーザー名/パスワードが同じだったらログインできる(はず)。

ユーザーが多くなると、クライアントにもサーバーにもアカウントを作成しないといけなくなるので
Active Directoryが有効になってくる。

とりあえず共有フォルダのアクセス権と同じと考えればいいと思うよ。


660 :NAME IS NULL:2008/10/24(金) 15:21:34 ID:???
なんでM$のパンフレットは、分かっている人に対して分かるような
説明しかしてないんだろうな。
それまでMS-Accessしか触ったことが無く、これからSQL Serverを触って
勉強しようという意欲を持っている人向けの書き方じゃないよね。あれ。
ある程度中身を触って、そのツールや役割の把握が出来て、やっと
パンフレットに書いてあることが理解できつつあるw

みんな勉強をする大まかな手順としては、やっぱり、付属の冊子や
パンフレットは無視して、入門書を買ってそれを読んでから、
分厚い公式文書やヘルプのドキュメントを読むという手順なのかな?

661 :NAME IS NULL:2008/10/24(金) 19:05:16 ID:???
>>659
レスthx

クライアントがAD参加してて、サーバが参加してないんだけど、
クライアント側でWindows認証を選ぶとユーザIDの項が【ドメイン\ユーザ】に固定される。
この状態でログインを試みると「信頼性が〜云々」エラーが出て繋げない。
まぁこれは理解できる。
このときにユーザIDを【SQLサーバ\SQLサーバ用ユーザ】とかでつなげることを期待してた。(←共有フォルダはこれでいけるし)
考えてみれば、これならSQLServer認証と変わらんか。

662 :NAME IS NULL:2008/10/24(金) 19:34:23 ID:???
複数のクライアントからADO(Excel VBA)を使ってSQL Serverのデータを取得したいのですが、
ドメイン環境が無い場合は、Windows認証使えませんよね?
(同じユーザー名とパスワードを両方登録しておくという荒業は勘弁してね。)
SQL Server認証にした場合は、SQL Serverを動かしているサーバー上でGuest
アカウントを有効にするしかないのでしょうか?
どなたか、ベストプラクティスをお示しあれ〜。

663 :NAME IS NULL:2008/10/24(金) 21:46:52 ID:???
SQLサーバにユーザ作ってそのアカウント使えばいいんじゃないの?
2005だとそんなことはできない、だったらごめんね。

664 :NAME IS NULL:2008/10/24(金) 21:48:43 ID:???
普通に作れるね。
Guestアカウントって話はどこから出てきたんだろう?

665 :NAME IS NULL:2008/10/24(金) 22:07:50 ID:???
はぁ? 技術力の無いアホが立て続けに落書きしてらぁ。
OSのセキュリティについて知識無しの中学生君かな。

666 :NAME IS NULL:2008/10/24(金) 23:12:07 ID:???
>>662
1.サーバーのプロパティを、[SQL Serve 認証モードとWindows認証モード]にする。
2.[セキュリティ]−[ログイン]で、(SQL Serveri認証で)必要なユーザーを登録する。
  この時、既定のデータベースや必要なアクセス権を設定する。
  (例えば、読み取りしかさせたくないユーザーは[db_datareader]をチェックするとか)

だけで済むんで、Guestアカウントは全く関係しないけど。
Windows認証の時と勘違いしていないかな?


667 :NAME IS NULL:2008/10/24(金) 23:17:47 ID:???
ちょい荒れ気味のようですが、質問です。

SQL Server を使ったパッケージが納品されている場合、
そのサーバでプロファイラで解析しながらクライアント
アプリを動かせば、テーブル情報が開示されたのと同じ
ような状況と見てよいのでしょうか?

ま、これをやるのはライセンス的な問題などがあるのでしょうが、
納品するパッケージにおいて、基本的にデータベースの
テーブル情報は開示しませんし、内部の動きについては
原則非公開となっています。しかし、顧客側にちょっと知っている
人がいると、実質そのパッケージのデータベースが丸見えに
なってしまうのを販売側(開発側)は受け入れるしかないのかなと
思いまして、質問しました。

668 :bcp:2008/10/24(金) 23:18:09 ID:???
>>662
> どなたか、ベストプラクティスをお示しあれ〜。

「いちいちユーザー管理はしたくないけど、セキュリティは完璧にしたい」
と言うのがベストプラクティスと言うなら、賢い >>665 が教えてくれるみ
たいだよ。

669 :NAME IS NULL:2008/10/25(土) 03:07:52 ID:???
ド低脳すぎて教える気も起きないって言うと思うよ

670 :NAME IS NULL:2008/10/25(土) 09:40:24 ID:???
>>666
レスどうもです。
カキコの内容でやってもダメだったので質問したのでした。
ローカルサーバー上では問題なくselectできるけど、リモートからは
OS(Windows2003)のセキュリティで弾かれているようだったので、
OS上のGuestアカウントを有効にして(セキュリティレベルを低下させて)
リモートからのアクセスを許可するしかないのか?と考えました。
他にセキュリティを保ったまま実現する方法があれば知りたいです。

671 :NAME IS NULL:2008/10/25(土) 09:45:32 ID:???
↑補足です。
当然ながら、SQL ServerのTCP/IP接続は許可しています。
また、OSのファイアーウォールは無効状態です。
.NETで作ったアプリでは問題なくSQL Serverにアクセスできるので
Excel VBA ADOの制限とかあるのでしょうか?

672 :NAME IS NULL:2008/10/25(土) 10:37:56 ID:???
>>670
Excel VBAのマクロセキュリティじゃね?高を低にしてみるとか。

673 :NAME IS NULL:2008/10/25(土) 11:18:27 ID:???
>>669
言い訳はいらんよ。

674 :NAME IS NULL:2008/10/25(土) 12:15:31 ID:???
Excelマクロのセキュリティレベルによってリモートアクセスの可否が
違ってくるなんて初耳だけど。
中学生の落書きですか、そうですか。

675 :NAME IS NULL:2008/10/25(土) 15:11:25 ID:???
>>674
馬鹿やろう!小学生の落書きだ!
勘違いするな!!

676 :NAME IS NULL:2008/10/25(土) 19:11:45 ID:???
0.154って数字を少数点2桁で表示したり
%表示させたいけど、便利なformat関数ってありませんか?

677 :NAME IS NULL:2008/10/25(土) 19:16:07 ID:???
>>676
どこに表示させたいか具体的に書かないと笑っちゃって返事も出来ない

678 :NAME IS NULL:2008/10/26(日) 00:20:09 ID:???
誤解が蔓延すると困るから書いておきたいんだが
ActiveDirectoryを構成していなくともWindows認証で
リモート接続は出来るんだぜ?

Windows認証とSQLServer認証の違いはID,Passwdによる認証を
OSレベルでするかDBサービスレベルでするかってことだけ。

あと忘れちゃいけないのはWindows認証でもSQLServerには
ユーザを登録しなければいけないんだぜ?
※SQLServer認証はID,Passwdを、Windows認証はIDだけを登録

それとデータベース/テーブルに対する権限の委譲も併せて
やっておかないとアクセスできないんだぜ?

679 :NAME IS NULL:2008/10/26(日) 00:27:59 ID:???
>>678
そんな常識をなぜ今頃・・・。

680 :NAME IS NULL:2008/10/26(日) 00:43:12 ID:???
>>679
理解できている人が"常識"と思い込んでるだけで
万人が認識できているわけではないのだよ、現実は。

681 :669:2008/10/26(日) 01:00:54 ID:???
>>673
おちついて。俺は彼じゃない。
恥ずかしながらいうと>>664だ。

682 :NAME IS NULL:2008/10/26(日) 01:47:43 ID:???
>>676
STR や CONVERT 関数。または、Format を呼び出すCLR関数を配置して使えば良いよ。
http://msdn.microsoft.com/ja-jp/library/ms189527.aspx
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx
select str(0.154, 10, 2) -- 小数点2桁
select convert(decimal(10,2), 0.154)
select str(0.154 * 100, 10, 2) + '%' -- %

683 :NAME IS NULL:2008/10/26(日) 03:11:18 ID:???
ある列の値の日ごとの合計をとりたいんですだが
指定される日付範囲が月や年の変わり目をまたぐことがあります。
一体どうすれば、、orz

やりたいことはこんな感じだけど、
SELECT
 foo.Name,
 DATEPART(year, foo.Date) AS Year_,
 DATEPART(month, foo.Date) AS Month_,
 DATEPART(day, foo.Date) AS Day_,
SUM(foo.val) AS Sum
FROM foo
WHERE (foo.Date >= @bgn) AND (foo.Date < @end) -- 日付範囲 [@bgn, @end)
GROUP BY foo.ID, foo.Name,
 DATEPART(year, foo.Date) AS Year_,
 DATEPART(month, foo.Date) AS Month_,
 DATEPART(day, foo.Date) AS Day_

こんな長いクエリは書きたくないでつД`;)
また合計それぞれに対応する日付をdatetimeとしてスマートに得たいでつД`;)

684 :NAME IS NULL:2008/10/26(日) 04:39:48 ID:???
どうも最近のT-SQLだとdateにキャストできるっぽいんだけど、使えないならこんな感じでどうだろ。

SELECT
 foo.Name,
 CONVERT(varchar(10), foo.Date, 111) AS Date_,
 SUM(foo.val) AS Sum
FROM foo
WHERE foo.Date BETWEEN @bgn AND @end - 1 -- 日付範囲 [@bgn, @end)
GROUP BY foo.ID, foo.Name,
 CONVERT(varchar(10), foo.Date, 111)

685 :NAME IS NULL:2008/10/26(日) 04:40:47 ID:???
あ。varcharじゃなくてcharでいいか。

686 :NAME IS NULL:2008/10/26(日) 10:00:04 ID:???
ExcelでSQL ServerにADOで接続できない件の自己レスです。
SQL Server Browserサービスを動かすか、接続文字列でポート番号を
指定すればいけそうな感じです。
自宅のテスト環境ではOKでした。明日職場で再確認予定。

687 :NAME IS NULL:2008/10/26(日) 10:25:50 ID:???
マクロのセキュリティも低にしとけよ( ´,_ゝ`)

688 :NAME IS NULL:2008/10/26(日) 10:47:01 ID:???
>>678の書き込みが出てきたからちょっと聞いてみたいのだが、
Windows認証については何処で学べば良いのかな?
(分野は何関係かな?OSの方?ネットワークの方?それともDB?)

ま、その環境が構築できなくて苦労してるわけじゃなくてさ、
Guestアカウントなどとの違いをはっきりとした形で理解したいので
そのあたりをしっかりとした解説を読見たいと思ってる。
自分なりに検索してみても共有フォルダの話ばっかりにたどり着いてしまって・・・

689 :NAME IS NULL:2008/10/26(日) 10:54:13 ID:???
>>688
ほんとにちゃんと学びたいのならこの本を読む。絶版だけど。
http://ec.nikkeibp.co.jp/item/books/P81740.html

690 :NAME IS NULL:2008/10/26(日) 10:58:22 ID:???
>>689
ああ、Windows Server関連の書籍だね。
それだと、認証についても詳しく解説がされているようだ。
何か見えてきたような気がする。ありがとう。

691 :683:2008/10/26(日) 11:31:09 ID:???
>>684
ありがとうございます。ご提示のSQLで期待どおり動作することを確認しました!

datetimeへのキャストは未解決ですが、それ無しでもDate_フィールドが '2008/10/01'形式になるので
クライアントプログラムの方でそこそこスマートに対応できそうです。

※ 仮にCONVERT(datetime, foo.Date, 111) とした場合、エラーにはならないが、何ら変換してくれないっぽい、、


692 :NAME IS NULL:2008/10/26(日) 11:41:32 ID:???
>>687
また小学生のクソガキが落書きかよ。

693 :NAME IS NULL:2008/10/26(日) 11:42:10 ID:???
DATE型の表示形式はきちんと定義してないと、どんな参照がされたかで表示が揺らぐ可能性があるよ。

694 :684:2008/10/26(日) 11:53:43 ID:???
>>691
> 仮にCONVERT(datetime, foo.Date, 111) とした場合
これは思いつかなかったw
確かにフォーマットとして日付しかないものをdatetime型で受け取れば時間切り捨てられそうだもんねw

キャスト云々は2008でdate型が実装されたっぽいことからです。
http://technet.microsoft.com/ja-jp/library/bb630352.aspx

>>693
フォーマット指定してても表記が揺れることがあるの?

695 :NAME IS NULL:2008/10/26(日) 15:48:33 ID:???
SQL Server では、ユーザ定義DBのmdfとldfファイル、もしくはバックアップファイル
(BAKファイル)を盗まれたら(コピーされたら)、テーブルの実データ、定義、
ビュー、ストアドプロシージャなどはすべて丸見えですか?
本当は、それを盗まれたりしないようにするのがセキュリティーにおける考え方
なのでしょうが、暗号化や偽装化することは出来ないのでしょうか。

696 :NAME IS NULL:2008/10/26(日) 15:58:31 ID:???
ファイル自体に細工をすることよりも、盗まれない体制を作った方がよっぽど実用的。

盗まれたらあきらめるくらいでいいと思う。

697 :NAME IS NULL:2008/10/26(日) 17:12:54 ID:???
>>696
体制というと例えばどんなものでしょうか?

フリーかシェアかに関わらず、自分が管理している以外のサーバに入れたら
その時点で盗まれる可能性は十分にあるってことになりますよね。

698 :NAME IS NULL:2008/10/26(日) 17:54:06 ID:???
IP公開したら自宅の住所がバレると思ってそうだな

699 :NAME IS NULL:2008/10/26(日) 18:32:11 ID:???
運用してる人といっぺん話した方がいいんじゃないかな。
何か勘違いしてる。

700 :NAME IS NULL:2008/10/26(日) 19:40:32 ID:???
DBやテーブルの構成はある程度ばれても良いって言う考えですか?
アプリというものは、その画面や動きを見ただけで、ソースコードまでは
見なくとも大体同じようなものが作れるから。

701 :NAME IS NULL:2008/10/26(日) 20:13:38 ID:???
スレ違いといわれるかもしれませんが、質問するところがわかりませんでしたので
ここで聞いてみました。
Accessから、SQL Serverに接続する場合ですが、mdbファイルと、adpファイルの
違いは以下のような見解であってるのでしょうか?

mdbファイル
サーバのデータを取得し、一旦ローカルで保存し、操作する事が出来る。
ストアドプロシージャやビューを使わないのであれば、こちらで十分。

adpファイル
ローカルにテーブルを持つ事が出来ないので、すべてのテーブル操作は
サーバでとなる。ストアドプロシージャなどを活かして構築したい場合は
こちらが必須。


こういう基本的な事を確認しているのは、「SQL Serverならば、adpファイルにしろ」
といわれたのですが、データを操作する目的ではなく、登録したデータをもとに
帳票を作る目的であればmdbの方が、サーバやネットワークの負荷を少なく出来る
のでは、と思ったのです。その分、クライアントPCの負荷はあると思いますが。

702 :NAME IS NULL:2008/10/26(日) 20:15:56 ID:???
あまりと言えばあまりに酷い…
明日先生に「こういう質問したんですが」って聞いてきなさい。

703 :NAME IS NULL:2008/10/26(日) 20:19:38 ID:???
せめてヒントくらい。

704 :NAME IS NULL:2008/10/26(日) 20:32:34 ID:???
>701
スレ違い。1行目しか読んでないけど。

705 :683:2008/10/26(日) 21:29:19 ID:???
>>694
使ってるのがExpress Editionなせいかもしれませんが、date()使えないみたいです。
【バージョン】
Microsoft SQL Server 2005 - 9.00.3068.00 (Intel X86) Feb 26 2008 18:15:01 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
【現象】
Management Studio Expressで実行したところ、
datetime型で宣言した@dに'2008/10/1'をSETしたとして、
 SELECT CONVERT(varchar, @d, 111); -- 結果: 2008/10/01
は成功しますが、
 SELECT date(@d);
は下記エラーになります
 メッセージ 195、レベル 15、状態 10、行 3
 'date' は 組み込み関数名 として認識されません。

何かパッケージのインポートみたいなおまじないでも必要なんですかね…

706 :NAME IS NULL:2008/10/26(日) 21:36:14 ID:???
>705
2005だからじゃね?

707 :NAME IS NULL:2008/10/26(日) 23:31:48 ID:???
>>704
誘導頼みます。

708 :NAME IS NULL:2008/10/26(日) 23:37:28 ID:???
>707
この辺でいいんじゃないかな。
http://society6.2ch.net/test/read.cgi/river/1224771927/

709 :NAME IS NULL:2008/10/26(日) 23:40:02 ID:???
>>701
Access総合相談所 其の19 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1216293538/l50

まあ、大体あってるよ。
データをローカルにキャッシュして、再利用したり加工して使いたいならmdbを使えばいい。
キャッシュの必要がない場合はadpの方が既定でOLE DB接続なので速い。
ただ、mdbでもVBAを使えばOLE DBを使えるし、ストアドも実行できるから、
コードを書けるんならmdbを使っておけば問題ない。

あと、普通は逆でデータ取得のみより、データ操作する場合の方が
ローカルでキャッシュできない分、adpの方がサーバー負荷が大きくなるよ
(接続張りっぱなしになるから)。

>>705
date は関数じゃなくて SQL Server 2008 で導入された型だよ。
どうしても、datetime型で欲しいのなら、型変換後に再度変換とか。
convert(datetime, convert(char(8), foo.Date, 112), 112)
または、floatに変換後、小数点以下を切り捨ててから変換。
convert(datetime, floor(convert(float, foo.Date)))
もしくは、その日までの差を求めて足す。
dateadd(dd, datediff(dd, 0, foo.Date), 0)

710 :NAME IS NULL:2008/10/26(日) 23:56:10 ID:???
>>709
Accessの件、レスありがとうございます。
解釈していたことは概ねあっていたのですね。安心しました。
接続やデータ取得はVBAで行っていたのですが、ストアドも実行出来るとは
知りませんでした。調べてみます。

711 :709:2008/10/27(月) 00:22:30 ID:???
>>709 訂正
× ローカルでキャッシュできない分、adpの方が……
○ CursorLocationや接続を正しく制御しないと、接続されたままになるのでadpの方が……

ついでに >>710
ADO で SQL Server のストアド プロシージャの値を取得する方法
http://support.microsoft.com/kb/194792/ja
まあ、頑張ってくださいな。

712 :NAME IS NULL:2008/10/27(月) 00:32:47 ID:???
>>711
> CursorLocationや接続を正しく制御しないと、接続されたままになるのでadpの方が……
そうなんですよね。接続をきちんと制御するコードを書いていなければ、テーブルの
データ量が大きい場合、それによってネットワークの負荷が非常に大きくなる上に、
ユーザの待ち時間が長くなったりするんですよね。
だから、帳票においてはmdbで接続してローカルのテーブルにキャッシュしたらすぐに
接続を切って・・・というやり方をしてみていたのですが、このやり方でいいのかが
気になり、質問していたのです。

ストアドの件、URLまでありがとうございます。読んで勉強してみます。

713 :683:2008/10/27(月) 03:58:04 ID:???
>>706
>2005だからじゃね?
なるほどorz

最終的に、次のようにして解決できました。
SET @grain = 24;
SELECT
foo.Name,
DATEADD(hour, DATEDIFF(hour, '2008/9/1', foo.date) / @grain, '2008/9/1'),
SUM(foo.val) AS Sum
FROM foo
WHERE (foo.Date >= @bgn) AND (foo.Date < @end) -- 日付範囲 [@bgn, @end)
GROUP BY foo.UnitID, foo.Name,
DATEDIFF(hour, '2008/9/1', foo.date) / @grain

'2008/9/1'は適当に選んだ基準日ですが、@bgnが常に0時なら@bgn置き換えても可。

@grainは、実は時間単位に集計したいという要望もあったので追加したものです。
SQLのセマンティクスはようわからんですけど、実験する限りでは、F(x)が単調増加か全単射か何かの場合
SELECT F(x) FROM foo GROUP BY x
という書き方が通るようです。


714 :683:2008/10/27(月) 04:15:39 ID:???
ていうか709に完全な答えが書いてあったorz
回答ありがとうございました。

715 :NAME IS NULL:2008/10/27(月) 16:52:35 ID:???
>>683
設計書には2chより引用って書いておけよ。

716 :NAME IS NULL:2008/10/27(月) 19:38:23 ID:???
ここにいるみなさんが運用で SQL Server を選ぶ理由って何でしょうか?
GUIがすぐれているとか、Windowsとの親和性、これまで作ってきた資産を
活かすため、知識があって慣れているから、などいろいろあると思います。

SQL Server のデメリットは、バージョンアップが頻繁にあり、それに伴う
仕様変更によって互換性がなくなることや、強制的に過去のバージョンの
サポートが打ち切られてしまう事があると思います。
それであっても、みなさんがSQL Serverを使うのを選ぶ理由を聞いて
みたくて質問しました。

717 :NAME IS NULL:2008/10/27(月) 19:56:50 ID:???
Oracleはサポートが適当すぎると聞いたことある。
怪しい動作の原因を問い合わせても、原因不明とか平気で回答してくるらしい。
そんな対応されたらサポート費返せって言いたくなるよな。
SQL Serverの方がバージョンアップのやり易さとか情報の開示レベル上と思う。

718 :NAME IS NULL:2008/10/27(月) 21:14:10 ID:???
>>716
> SQL Server のデメリットは、バージョンアップが頻繁にあり、それに伴う
2000、2005、2008と頻繁とは思わないから


719 :NAME IS NULL:2008/10/27(月) 21:39:56 ID:???
>>716
Oracleは、情報がクローズ過ぎるとかその辺がね。
今は大分値段が下がったけど、当時は価格が高過ぎというのもあった。

余談だけど、昔NiftyでやたらMSを攻撃する粘着なOracle社員もいた。しかも本名で。


あと、SQL Serverは基本的に7.0以降に関してはコアな部分は変わっていないと思われ。
あえて分けるとしたら、
 ・SQL Server 4.2(ほぼSybase)
 ・SQL Server 6.0→6.5
 ・SQL Server 7.0→2000→2005→2008
に分けられると思う。

SQL Server 7.0以降、バージョンアップでの問題が発生したら、
データベースの互換性レベルを下げれば、ほとんど問題はなくなるし。
(まあ、SQL Server 2008ではSQL Server 7.0の互換性レベルは無くなった訳だが)


720 :NAME IS NULL:2008/10/27(月) 23:41:05 ID:???
OracleはGUIが糞だった気がするよ。
高いし、SQLServerでは標準で付いてるようなツールが別売りとかだったりするし。
wave-dashとかで悩むのも面倒だし。なんで自前で化ける文字の変換処理とか書かないといけないんだとか思ったり。
Oracleの接続ドライバが.NETのドライバとかODBCのドライバとかJDBCのドライバとかVBでのOO4OとADOとか
どれも何種類かずつ方法がある割にどれも癖があったり問題があったりで扱いが面倒だよ。

SQLServerは互換性レベルの設定でもろに過去バージョンのもそのまま動いてくれるよ。
互換性はかなり頑張って維持してると思う。
システムテーブルすらビューの形で残して互換性を維持しててびびったけど。
MSDNだけで開発環境とか一式全て揃うってのも楽でいいよ。

721 :NAME IS NULL:2008/10/28(火) 00:21:46 ID:???
Oracle一筋だったけど、最近SQLServer使い出した。
機能的に特に差がなくて、安いからって理由だけだけど。
サポート契約しないとパッチも入手できんとかねぇ…
あと、メンテナンスする部署がWindowsしか使えんとかさ。

722 :NAME IS NULL:2008/10/28(火) 00:54:05 ID:???
別にオラクルが好きな訳ではないが、あらぬ嫌疑をかけられたままというのはちょっとよくないかなと。

> 情報がクローズ過ぎる
OTNで公開されているマニュアルを読んだ上でクローズすぎるという意見でしょうか?

> wave-dashとかで悩む
悩む原因を作ったのはどこでしたっけ?

723 :NAME IS NULL:2008/10/28(火) 00:56:31 ID:???
個人的にはしこしこチューニングしないとパフォーマンスがでないオラクルより
適当セッティングでもある程度のパフォーマンスが出るMSSQLが好みですね。

724 :NAME IS NULL:2008/10/28(火) 01:07:03 ID:???
>722
入力と出力で同じ変換テーブル使ってれば問題起きないからオラクルだよ。

725 :NAME IS NULL:2008/10/28(火) 02:04:25 ID:???
Oracleとの比較の話が多いけれど、MySQL や PostgreSQL 、DB2 と比較しては
どうなのでしょうか?これらはそのシステムの規模的に比較の対象外とか?

726 :NAME IS NULL:2008/10/28(火) 02:15:19 ID:???
OSおよび開発言語に依存することが多いからかな?
Windows + .NET → MSSQL
Solaris + Java → Oracle
Linux + LL → MySQL PostgreSQL
みたいな?
DB2はつかったことないや。

727 :NAME IS NULL:2008/10/28(火) 06:33:34 ID:???
>>722
今は公開されているけど、Oracle8の頃とかはひどかったよ。
あと>>721にも書かれているけど、パッチの入手方法とか。

あと'(Windows版だけど)インストーラーが独特でちょっと嫌。


728 :NAME IS NULL:2008/10/28(火) 06:36:23 ID:???
DB2は顧客がAS400ユーザー、もしくはAS400からのリプレースとか?


729 :NAME IS NULL:2008/10/28(火) 10:47:04 ID:???
オラもMSSQLも使ったけど
何もしなくても早く動くMSSQLは便利だわ
7.0まではひどくて使えなかったけど(まぁその頃のオラクルも知らないが

オラからSQLに変えた理由はサーバーがWindows一本になったことだな
昔は無印のLinuxでもオラはサポートしてくれたけど
最近では製品版でしかサポートしないから結局高いLinuxサーバー製品を買わないといけない
だったらぜんぶMSにしてしまえ みたいな

730 :NAME IS NULL:2008/10/29(水) 07:45:18 ID:???
SQL Server 2005 SP3 Beta
http://www.microsoft.com/downloads/details.aspx?FamilyID=d22317e1-bc64-4936-a14b-7a632b50a4ca&DisplayLang=en

731 :716:2008/10/29(水) 09:07:09 ID:???
みなさん、たくさんのレスありがとうございます。
Oracle との比較の意見、凄く参考になりました。
Oracle で構築されたシステムが多いという話や、各種資格があると
給与が・・・という話を聞くと、MS SQL Server で構築をやっていて良いのかなと
ちょっと不安になったりしていたのですが、整理がついてきたように思います。
しばらくの間は SQL Server を使って勉強していこうと思います。

あと、もう一つだけ質問です。
規模の大きなシステムであると Oracle を選ぶべきという意見も聞きますが、
こちらのスレに居る方々はそれはどう思いますか?SQL Server では無理が
出てきたりしますか?
お願いします。

732 :NAME IS NULL:2008/10/29(水) 09:20:47 ID:???
昔は Oracle は早い! SQL Server は遅い!
なんて良く聞いたけど、最近はどうなんでしょうね

基本 SQL Server 重い部分だけ Oracle 担当で
リンクサーバー接続なんて運用は、たまに見かけるけど

733 :NAME IS NULL:2008/10/29(水) 11:03:06 ID:???
DBの性能は9割メモリで9分ディスクなんだから意味ないよ。
MSとOracleが性能比較合戦してた頃の資料はどっちも言いがかりレベルだから、
いまさら持ち出さないように。

734 :NAME IS NULL:2008/10/29(水) 14:54:01 ID:???
>>731
最近は銀行系でもSQLServer使ってるとか何とか。

Oracle使いだけど、最近はSQLServerを選ぶ顧客が多い。
その背景はDB云々じゃなくて、サーバOSとしてWindowsがなんとかなるようになってきたからじゃないだろうか。
DBの機能は大差ないように思う。
OSはUNIX系でって言う客はまだまだいるけど。
あとフレームワークがSQLServerに対応してないとか言うのはあるな。

735 :NAME IS NULL:2008/10/30(木) 00:25:11 ID:???
質問です。
Aの店舗ごとに、Bの最新日付のファイルIDを取りたい場合、どのようなSQL文になりますのでしょうか?

A
店舗コード
100,A店
200,B店
300,C店

B
店舗コード,ファイルID,日付
100,1,1/1
100,2,1/2
200,3,1/2
200,4,1/3
200,5,1/4
300,6,1/1
300,7,1/3

736 :NAME IS NULL:2008/10/30(木) 03:25:46 ID:???
テーブル名と店舗名カラムは適当に読み替えてください。
>>736(インデント見たいときに)

select 店舗A.店舗名, ファイルID
from
店舗A
left join (
select
b1.店舗コード, ファイルID
from
店舗B b1
join (
select 店舗コード, max(日付) as 日付
from 店舗B group by 店舗コード
) b2
on (b1.店舗コード = b2.店舗コード and b1.日付 = b2.日付)
) 店舗B
on (店舗A.店舗コード = 店舗B.店舗コード)

737 :NAME IS NULL:2008/10/30(木) 07:50:38 ID:???
row_number over partition ... は2005からかな。これが使えるならもっと単純になる。



738 :NAME IS NULL:2008/10/30(木) 12:36:01 ID:???
>>736
735です。すごく助かりました。
2005なのですが、出来ればROW_NUMBER()も
教示戴けますでしょうか(;^_^A

739 :NAME IS NULL:2008/10/30(木) 13:02:37 ID:???
>>733
横レスですが、質問です。

> DBの性能は9割メモリで9分ディスクなんだから意味ないよ。
これ、本当ですか?
その数値を出した根拠をお願いします。

740 :NAME IS NULL:2008/10/30(木) 14:39:39 ID:???
>>738
MSSQL2005の機能を盛りだくさんに使うとこんな感じです。
AテーブルとのJOINは省略。

with cte_B (店舗コード, ファイルID, shop_r) as (
 select 店舗コード, ファイルID,
  row_number() over (partition by 店舗コード order by 日付 desc)
  from testB )
select 店舗コード, ファイルID from cte_B where shop_r = 1


741 :NAME IS NULL:2008/10/30(木) 14:52:36 ID:???
どちらにせよコストのかかる問い合わせなので定常的に使用するなら、
また最新の日付以外のデータが履歴以上の意味を持たないのならば
Bを現在の状態を保持するテーブルと履歴テーブルを分けるべきでしょう。


742 :NAME IS NULL:2008/10/30(木) 21:47:57 ID:???
すみません、質問です。

SQL Server 2000 Developer Edition を使っているのですが、
これをインストールした後、ヘルプの情報をみても、Developer Edition の
文字はありませんよね。コントロールパネルの、プログラムの追加と削除の
ところを見ても、そういう文字は書いてありませんでした。

すでにインストールしてある SQL Server 2000 のエディションが何であるかを
確認したい場合、どこを見たら良いのでしょうか?

743 :NAME IS NULL:2008/10/30(木) 22:24:06 ID:???
>>740-741
735です。ありがとうございます。
そうですね、現状処理対象が多く想定した速度が出ないので
分割するのもありですよね。検討してみますm(_ _)m


744 :NAME IS NULL:2008/10/30(木) 23:13:24 ID:???
>>742
select @@version
というクエリーを実行したらわかるよ。


745 :NAME IS NULL:2008/10/31(金) 00:04:28 ID:???
>>744
Devの文字が出てきました。ありがとうございます。

746 :NAME IS NULL:2008/11/01(土) 21:41:33 ID:DIcWafAA
SQLサーバーで結果セットを取得せずに、特定の行だけ行ロックしたいのですが、
どうすればいいのでしょうか?

イメージ的にはこんな感じ
LOCK * FROM A WITH(UPDLOCK,ROWLOCK) WHERE COL1 = '005'



747 :NAME IS NULL:2008/11/01(土) 23:09:35 ID:???
>>746
素直にSELECTで行ロック汁

748 :NAME IS NULL:2008/11/02(日) 01:12:37 ID:???
初心者ですが質問があります。
大量にupdateするときはやはりテーブルをロックした方がよろしいでしょうか?
またその場合どのようなロックが適切でしょうか?

749 :NAME IS NULL:2008/11/02(日) 07:26:22 ID:???
>>748
仕様が分からんので何とも言えん。
例えば、
「深夜に他のユーザーが一切接続できない
 かつ、操作するのがupdate掛けるセッションだけ」
などの要件が有れば、ロック掛ける必要自体が無い。
むしろ、エラー処理と処理を行う上でのROLLBACKの要否の方が重要だろ。

他のセッションがあるという前提なら、行ロックを前提に
該当トランザクションで排他ロック掛けられては困るなら、
更新ロックにするべきだろ。


750 :NAME IS NULL:2008/11/02(日) 17:56:59 ID:???
カーソルの中でunion allで全ての結果を結合して
その結果をそのままinsertって可能かな?

751 :NAME IS NULL:2008/11/02(日) 19:48:12 ID:???
>>750
テライミフ
日本語でOK。

752 :NAME IS NULL:2008/11/04(火) 21:55:44 ID:???
nVarcharと varchar の使い分け方が意味不明です。

unicode対応かどうか見たいだけど・・・・orz
誰かわかりやすく教えてください。


753 :NAME IS NULL:2008/11/04(火) 22:12:57 ID:???
nvarchar : 可変長の UNICODE 文字データです。
varchar : Unicode ではない可変長の文字型データです。

確か、Shift-JISに変換できないUNICODE文字をvarchar型の列にinsertすると「?」になったはず。
あと、nvarcharのサイズは文字数だけど、varcharのサイズはASCIIでの文字数(要はバイト数)。

754 :NAME IS NULL:2008/11/04(火) 22:17:44 ID:???
>>753
わかりやすい!
なるほど!そういうことだったんですね。
大変勉強になりました。
ありがとうございました。


755 :NAME IS NULL:2008/11/05(水) 00:06:54 ID:???
日本語OSの場合は753のとおり。
他言語OSの時はcollationを見直す必要があり。

756 :NAME IS NULL:2008/11/05(水) 06:32:45 ID:???
varchar(10) に2バイト文字を突っ込むと5文字しか入らなかったような
nvarchar(10) だと2バイト文字でも10文字入る。

半角固定じゃない限りは今時 nvarchar デフォでいいんじゃないか

757 :NAME IS NULL:2008/11/05(水) 18:00:13 ID:???
>>755-756
ありがとうございます。
参考にさせてもらいます!


758 :NAME IS NULL:2008/11/05(水) 18:20:09 ID:8CuM4UUP
復旧モード「フル」に設定してるのにトランザクションログがぶりぶり切り捨てられてる。
初回の全体バックアップの実行前だとこんな現象が発生してるんだけど、これってSQLSERVERの仕様?

データベースが全体バックアップ済みか否かって、どこ見て判断してるんだろか?

759 :NAME IS NULL:2008/11/05(水) 22:20:09 ID:???
>>758
仕様。中程にある「重要」を読め。
ttp://msdn.microsoft.com/ja-jp/library/ms190692.aspx

760 :sage:2008/11/06(木) 09:58:01 ID:xzbCwz05
>>759
ありがとう!

>データベースが全体バックアップ済みか否かって、どこ見て判断してるんだろか?
こっちは解らない? msdb..backupfileを参照してるのかと思ったがどうも違うみたい。


761 :NAME IS NULL:2008/11/06(木) 11:00:34 ID:???
初心者で言葉足らずかもしれませんが、
ご教示いただきたい事があり、書き込ませていただきます。

OSがWindowsServer2008のマシンにSQLServerExpressEdition(SQL Server認証)で
データベースを構築し、ADO接続しようとしたところ、

[DBNETLIB][ConnectionOpen(Connect())]SQL Server が存在しないか、
アクセスが拒否されました

というメッセージが出て接続できませんでした。

WindowsXPとSQLServerExpressEditionで構築した場合、
同じADO文(?)で接続できました。

気になっているのは、
ADO文の「Data Source=(Local)」の部分で、
WindowsServer2008では書き方が変わってしまうのか?
ということと、
WindowsServer2008にSQLServerExpressEditionをインストールした際、
ユーザ名とパスワード設定のところで
「複雑なパスワード」を要求されたため、
記号入り(アットマークを使用)のパスワードを設定したので、
それが引っかかっている可能性があるかと考えています。

ただし、エラーメッセージを読む限り、
SQLサーバの認証で蹴られてるのではなくて、
SQLサーバ自体を見つけられていないような気がするのですが・・・

長文になり、申し訳ありませんが、
ご助力のほど、よろしくお願いいたします。

762 :NAME IS NULL:2008/11/06(木) 13:18:04 ID:???
サービスが起動しているのかということと
構成マネージャで TCPの通信ができるようになってるかまずは確認してみれば?


763 :NAME IS NULL:2008/11/06(木) 21:12:45 ID:???
ローカルからのTCP接続ができるかどうかの確認かな。

764 :NAME IS NULL:2008/11/06(木) 21:13:45 ID:???
あらごめん。すでにローカルか。
んじゃ>>762と一緒でTCP通信可否設定の確認だね。

765 :NAME IS NULL:2008/11/06(木) 23:27:54 ID:???
つか(Local)って時点でネットワークを見ないんだぜ?

766 :よしき:2008/11/07(金) 10:36:05 ID:WjJ9IoZm
つまらない質問で申し訳ないんですが、SSMSにてクエリエディタに行数を表示させるにはどうしたらいいのでしょうか??
宜しくお願いいたします。

767 :NAME IS NULL:2008/11/07(金) 14:26:06 ID:j3syhTYc
私もつまらない質問で申し訳ないのですが

Windows XP Home Edition(SP3)に
SQL Server 2008 Express Editionをインストールすることは
できるのでしょうか? できた場合も制限とかあるのでしょうか?

当方学習目的なもので、システム構築云々といった
だいそれた事は考えていません

768 :NAME IS NULL:2008/11/07(金) 16:22:19 ID:???
タダなんだから試してみろよ
それが学習だよ

769 :NAME IS NULL:2008/11/07(金) 16:56:47 ID:???
>>767
インストールは出来ますが、GUIツールなどに大きな制限があります。
コマンドを打つのに慣れているのであれば問題ありませんが、
学習目的であれば、GUIツールを使っての操作がいいでしょうし、
各種メンテ用のツールで、システムの動きを確認しながらの方が
イメージがつきやすいと思います。
Developer Edition の購入をお勧め致します。

770 :NAME IS NULL:2008/11/07(金) 17:02:05 ID:???
>>762>>763>>764>>765
返信ありがとうございます。

構成マネージャで確認してみましたところ、
TCPが無効になっていましたので、有効に切り替えてみましたがだめでした。

サービスについても「SQL Server」は開始になっておりました。

あとはsaのパスワードの「@」が怪しいのかなぁと思い、
再インストールしてsaのパスワードを変更してみようと思います。

ちなみに再インストール以外でsaのパスワードって変更できるんでしょうか?

771 :NAME IS NULL:2008/11/07(金) 17:21:51 ID:???
>>767
>>769
SQL Server 2008 Express EditionもGUIツールあるよ。

SQL Server Management Studio Express
http://msdn.microsoft.com/ja-jp/library/ms365247.aspx


772 :NAME IS NULL:2008/11/07(金) 17:26:18 ID:???
>>770
> ちなみに再インストール以外でsaのパスワードって変更できるんでしょうか?

SQL Server Management Studioで[セキュリティ]−[ログイン]でsaのプロパティを開いて
パスワードとパスワードの入力確認を入力。


773 :NAME IS NULL:2008/11/07(金) 17:32:15 ID:???
>>770
ユーザー名に@が含まれるならまだわかるけど、パスワードに@はあまり関係ないと思われ。
一度、ADOの接続文字列を公開してみるとか。(パスワードの部分は消して)


774 :NAME IS NULL:2008/11/07(金) 17:54:33 ID:???
>>771
そういうのを見つけ切れなかったわけだから、
ここで質問してるんだと解釈したんだけどなw
そこまで分からないのであれば、ということで
製品版を勧めたのだよ。
180日評価版とかの案内をしても制限は?とか
ぐだぐだいいそうだし。

775 :NAME IS NULL:2008/11/07(金) 20:29:12 ID:???
GUIツールが見つからないなんて言ってないような。
XPに入るの?っていうことだけだよね。

776 :NAME IS NULL:2008/11/07(金) 23:15:04 ID:???
つまらない質問ですが、つまらない質問するにはどうすればいいのか教えてください。

777 :NAME IS NULL:2008/11/07(金) 23:21:58 ID:???
書け!
そして叩かれろ! 以上

778 :776:2008/11/07(金) 23:29:33 ID:???
>>777
早速のご丁寧な回答、ありがとうございます。

より、つまらない質問が書けるように努力したいと思います。


779 :NAME IS NULL:2008/11/08(土) 00:02:55 ID:???
> より、つまらない質問が書けるように努力したいと思います。

もう充分だ。

780 :NAME IS NULL:2008/11/08(土) 01:03:30 ID:???
180日間限定の奴って期間過ぎたら自動的に使えなくなるって事でいいんだよね?

781 :NAME IS NULL:2008/11/08(土) 01:54:22 ID:???
>765
tcp:(local)
がいいんじゃないかと。

782 :NAME IS NULL:2008/11/08(土) 08:15:19 ID:???
SQL Server 2005 Service Pack 3 - CTP - 日本語
http://www.microsoft.com/downloads/details.aspx?FamilyID=d22317e1-bc64-4936-a14b-7a632b50a4ca&DisplayLang=ja

783 :NAME IS NULL:2008/11/08(土) 08:15:47 ID:???
>>780
そんなこと確認してないで、製品を買いに行きなさい。

784 :NAME IS NULL:2008/11/08(土) 13:31:14 ID:???
開発者向けは数千円で売ってるんだっけ
2005や2008でも安価なの用意されてる?

785 :NAME IS NULL:2008/11/08(土) 14:45:11 ID:???
まったくいつまで常駐してるんだ。
http://kakaku.com/item/37100310133/
http://kakaku.com/item/37100310072/

786 :NAME IS NULL:2008/11/08(土) 17:11:08 ID:???
>>784
売ってる。
尼でも買える。

787 :NAME IS NULL:2008/11/08(土) 22:41:49 ID:???
VS2008でドラッグ&ドロップで作成したDBアプリ(下記URL紹介のようなもの)に
アプリケーションロールを割り当てるにはどうすればよいのでしょうか?
MSDNには、「アプリケーションが、このアプリケーションのみに対して既知である
パスワードを使用して、sp_setapprole ストアド プロシージャを実行します。」
とありますが、どこにこの情報を記述すればよいのでしょうか?

【第4回 ドラッグ&ドロップで作るWindowsデータベース・アプリケーション】
ttp://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_04/vsdbprog_04_01.html


788 :761:2008/11/10(月) 18:35:13 ID:???
>>773
パスワードから「@」を外してみてもだめでした・・・

ADO接続文字列

Provider=SQLOLEDB.1;
Password=******;
Persist Security Info=True;
User ID=sa;
Initial Catalog=******;
Data Source=(local);
Use Procedure for Prepare=1;
Auto Translate=True;
Packet Size=4096;
Use Encryption for Data=False;
Tag with column collation when possible=False

としておりますが、如何でしょうか?



789 :NAME IS NULL:2008/11/10(月) 19:21:40 ID:???
>>788
SQLServer2005や2008のExress版は標準では名前付インスタンスになるのだけど
その辺は大丈夫?


790 :NAME IS NULL:2008/11/10(月) 21:50:31 ID:???
>>767

学習目的なの?
評価目的なら体験版やダウンロードセンターからダウンロードできる
VHDイメージ(英語版だけど)を使えば良いね。

791 :NAME IS NULL:2008/11/10(月) 21:56:45 ID:???
>>790
学習目的だといっている人間に対して、学習目的なの?と改めて質問をした上で
評価目的のものを勧めるのってなんでなの?
ExpressEdition使われると気にくわないの?

792 :NAME IS NULL:2008/11/10(月) 22:08:06 ID:???
>>788
釣りじゃないよね?

ウィザードで普通にNext>Next>でインストールすると
loalhost\SQLExpress
だよ。

793 :792:2008/11/10(月) 22:10:09 ID:???
間違い。
localhost\SQLExpress
だよ

794 :NAME IS NULL:2008/11/11(火) 02:48:17 ID:???
>>788
> Data Source=(local);

他にも書かれているけど、ExpressEditionだったらデフォルトのインスタンス名はSQLExpressだから、
Data Source=.\SQLExpress
(もしくは"Data Source=localhost\SQLExpress")
で繋がると思われ。

あとProviderだけど、SQL Server 2005だったらSQL Native Client(SQLNCLI)の方が良さそうだけど。



795 :NAME IS NULL:2008/11/11(火) 18:10:05 ID:???
>>789>>792>>794

インスタンス名の意味を理解してませんでした・・・
いまちょっと確認できる環境でないのですが、
後で試してみます!!!

796 :なめ IS なる:2008/11/12(水) 10:13:29 ID:GMZxs0Yi
構文エラーになってしまいます。.付近に不適切な構文があります。

CREATE UNIQUE INDEX DEVDB.D1I ON DEVDB.D1
( COMPOSITE_TYPE DESC , COMPOSITE_KEY DESC ) ;
どなたか教えて下さい m(_ _)m

797 :NAME IS NULL:2008/11/12(水) 13:33:40 ID:???
>>796
手元にないから確認はしてないが思いつくことを少々。

DEVDBは名前からスキーマではなくDB名と思えるので、
DEVDB.D1 は DEVDB..D1 が正しい。スキーマ名であってればそのままで。
インデックスはテーブルのDBとスキーマに常に従属するので、
DEVDB.D1I の DEVDB. は不要。



798 :NAME IS NULL:2008/11/12(水) 18:25:13 ID:MucFGzZ5
詰まってしまい、どうしても分からないことがあるので、
質問させてください。
Microsoft SQL Server 2005を使ってストアドを作っています。
動的にSQL文を作成して実行することを目的として、それはできるように
なったのですが、動的にUPDATE文を作成するとにNULLをセットして更新することが
できなくて困っています。これは可能のでしょうか?

***************
DECLARE @tbName VARCHAR(50)
DECLARE @vAC1 VARCHAR(50)
DECLARE @vSql VARCHAR(500)

SET @tbName = 'TEST01'
SET @vAC8 = 'aaaa'

SET @vSql = ' Update ' + @tbName + ' SET AC1='+''''+@vAC1+'''' +
' WHERE (ID01 = 11111) '
execute(@vSql)
***************

これを実行すると、TEST01テーブルにある列ID01の値が「11111」に一致する行の列AC1に
文字列「aaaa」で更新する、という動的SQL文はできるのですが、変数@vAC1に「NULL」を
セットして列AC1をNULLで更新したいのですが、このようなことは可能でしょうか?

可能な場合はどのような記述をすると動的にNULLで更新を行えるようになるのでしょうか?
よろしくお願いします。

単純に
SET @vAC8 = NULL
として実行しただけでは、ストアド実行ではエラーはでないものの、テーブルへの更新は
されませんでした。


799 :なめ IS なる:2008/11/12(水) 18:46:55 ID:BeyoDU5S
(T_T) ありがとうございます!
実行したところテーブル作成を確認致しました。感謝です。
ALL 権限は推奨されません。←このワーニングが出ましたが、これは無視してもよいでしょうか? 

800 :NAME IS NULL:2008/11/12(水) 19:08:37 ID:???
>>798
select 'foo' + NULL + 'bar'
select 'foo ' + 'NULL' + ' bar'
とかやってみると納得できるかも

801 :NAME IS NULL:2008/11/12(水) 22:03:36 ID:???
NULLは値じゃない


802 :NAME IS NULL:2008/11/12(水) 23:34:18 ID:???
ヌルヌル

803 :NAME IS NULL:2008/11/12(水) 23:46:28 ID:???
SET @vAC8 ='''+ null + '''
と書けば上手く行くかもしれない

804 :NAME IS NULL:2008/11/13(木) 08:21:17 ID:???
質問です。
SQL構文の長さにおいてはどのくらいまでという限界が設定されているのでしょうか?
以下のような感じで長いSQL文をVBAで自動生成して実行しようとしたら
エラーが出て、実行出来ませんでした。(WHERE 以下を削除するときちんと実行
出来る状況です)

SELECT * FROM tblname WHERE (A = 1) OR (A = 2) OR (A = 3) OR (A = 4) ・・・・
WHERE以下が異常に長いという、SQL文です。

異常なほど長すぎるとエラーが出るので、別の方法を考えるべきだということは
分かりますし、現在は別な方法で対処していますが、どういうところが限界なのかが
良く分からなくて質問してみました。SQL Server などに設定があるのか、それとも
別なところに限度が設定されているのか、などが気になっています。
よろしくお願いします。

805 :NAME IS NULL:2008/11/13(木) 09:09:45 ID:???
なんてエラーが出るのよ?
最大容量はこれじゃね?
ttp://msdn.microsoft.com/ja-jp/library/ms143432.aspx

806 :なめ IS なる:2008/11/13(木) 10:40:43 ID:p7L5VuAO
恐れ入ります。
CRTTBLで、指定したスキーマがないか、使用する権限がありません!
と怒られています。
スキーマは存在するので権限をMANAGEMENT STUDIO EXPRESSの画面から
該当するスキーマに与えても改善されません。
どうすればよいでしょうか?


807 :なめ IS なる:2008/11/13(木) 10:46:25 ID:p7L5VuAO

ごめんなさい、データベースを指定していませんでした。m(_ _)m

808 :798:2008/11/13(木) 11:41:19 ID:6iPQ+/Aa
>>803
ありがとうございます。
参考にして設定時にNULLをセットして更新文の方をそれに合せ以下のようにしたところ、
文字列、NULLの両方に対応した動的な更新文を作成することができました。
ありがとうございます。

**************
DECLARE @vAC1 VARCHAR(50)
DECLARE @tbName VARCHAR(50)
DECLARE @vSql VARCHAR(max)

SET @tbName ='TEST01'

SET @vAC1 = 'null' -- NULL値テスト
SET @vAC1 = '''aaaa''' -- 文字データテスト

-- 文字列のnull変数設定成功版
SET @vSql = ' Update ' + @tbName + ' SET AC1='+@vAC1+
' WHERE (ID01 = 11111) '

execute(@vSql)
**************

日付型でも同じように考えて同様にNULL、年月日の設定ができる
ようになりました。動的に全てこなすというのが初めてだったので
本当にありがとうございます。


809 :NAME IS NULL:2008/11/14(金) 00:19:11 ID:NswyuBr8
>>719
> 余談だけど、昔NiftyでやたらMSを攻撃する粘着なOracle社員もいた。しかも本名で。
池田?
ログまだ持ってるよ
捏造してまでMSに圧力かけられたって自演してたやつね

810 :NAME IS NULL:2008/11/14(金) 01:01:32 ID:???
>804
かなり長いクエリは実行してるけど長さが原因で動かなかったことはないんだけどなぁ。
動的にクエリを作ってるとクエリの長さよりもパラメータ数の上限が2100個にぶつかる。

無制限にパラメータを渡してくるような状況だと一時テーブル作ってサブクエリとかにする。面倒だけど。

811 :NAME IS NULL:2008/11/14(金) 01:32:33 ID:???
>>809
そう、池田○一w
まあ、あの当時のMSは色々あったからね。電脳曼陀羅の件とか。
でもあの粘着さは傍から見ていても異常だった。


812 :NAME IS NULL:2008/11/14(金) 09:59:55 ID:iMptzZfL
IE上からGOOGLEを使用して、 ”データベース アプローチ” を検索すると
何故かエラーで落とされるのですが仕様ですか?

813 :NAME IS NULL:2008/11/14(金) 10:35:50 ID:???
>>812
環境書けば?
なんともないぞ

814 :NAME IS NULL:2008/11/14(金) 10:51:16 ID:???
>>812
それはIEの問題だと思われる。
こちらの環境では、IE6とかだと、javascriptなどがうまく
処理できずエラーが出たり、異常終了することがあった。
これ以上のことはスレ違いなので、DB板以外の、
PC初心者やブラウザ関連の方へどうぞ

815 :804:2008/11/14(金) 13:43:16 ID:???
>>805>>810
レスありがとうございます。
パラメータの上限が関係しているようでした。

816 :NAME IS NULL:2008/11/14(金) 14:28:28 ID:???
>>814
君んとこのIEもおかしいよw
うちのIE6は文句言わずに処理してくれるぞw

817 :NAME IS NULL:2008/11/14(金) 21:24:33 ID:B/+QOJJ/
>>719
>>809
オラクルもアンチ扇動が過ぎて、すっかりネガティブ企業のイメージついちゃったし
そのためオラクル製品もそういう目で見るようになる
自業自得だな

818 :NAME IS NULL:2008/11/14(金) 21:35:41 ID:???
そういうのはいいから

819 :NAME IS NULL:2008/11/15(土) 10:22:20 ID:???
>>812
アンチウィルスソフトAVGのリンクスキャナが有効になってない?
http://blog.cori95.net/archives/732.htm

特定の検索語句でブラウザが落ちるよ。

820 :NAME IS NULL:2008/11/16(日) 03:07:38 ID:YPc0B7k/
データベースミラーリングでご質問ですが、

アプリ(ASP.NET)から実行したトランザクションが実行中に
フェイルオーバが発生した場合、

そのトランザクションが切り替えのため、ロールバックされた事を
アプリ側で判定したいと思います。

それには、その旨のリターンコードをハンドリングするのでしょうか?。

「Failover Partner」接続句でセッションは自動的に切り替わるようですが、
トランザクションの再実行は別途仕込が必要な気がするのですが・・。




821 :NAME IS NULL:2008/11/16(日) 08:34:46 ID:???
例外が飛んだら無条件に1回リトライ、からやってみれば。
まずは試してみろ。話はそれからだ。

822 :NAME IS NULL:2008/11/17(月) 00:41:06 ID:???
そんな糞稀なことを捕まえるのか…・
大変だな…・

俺ならそういうのを補足するとか断るな
どうしてもならなんとかはするけど

823 :NAME IS NULL:2008/11/17(月) 18:25:32 ID:???
レプリケーションが上手くできないのですが、
非ドメイン下では簡単にはできないのでしょうか?

824 :NAME IS NULL:2008/11/17(月) 23:50:16 ID:???
ちょっと相談があったのでみんなに聞いてみる

SQL Server2005
Oracle9i

この2つのDBでレプリケーションを構築しようとしたときに、
相互更新可能なレプリケーションは、SQL Serverの標準でついている
機能で可能でしょうか?

また、MicrsofのMSDN以外に異種間レプリケーションの情報などが
ありませんでしょうか

825 :NAME IS NULL:2008/11/18(火) 00:36:40 ID:???
SQLServer2005 Standard

エージェントにて外部アプリケーションを呼び出して終了待ちしたいのですが、可能でしょうか?
可能であれば、どのような呼び出し構文になりますでしょうか?

826 :NAME IS NULL:2008/11/20(木) 17:52:38 ID:???
トランザクションログがいっぱいになったというエラーが出たので
トランザクションログのバックアップをしようとしたのですが
途中でディスクの空きが無くなって失敗してしまいます。
こういう場合どうしたらよいでしょうか?


827 :NAME IS NULL:2008/11/20(木) 18:05:12 ID:???
>>826
トランザクションログを切り捨ててもいいのなら、

BACKUP LOG データベース名 WITH TRUNCATE_ONLY
GO
DBCC SHRINKDATABASE('データベース名')
GO

トランザクションログを切り捨てた後は、念のためにフルバックアップしておく事を推奨。


828 :NAME IS NULL:2008/11/20(木) 18:09:21 ID:???
>>825
ジョブのステップ追加で、[種類]を[オペレーティング システム(CmdExec)]にすれば、
外部アプリケーションを呼び出せるけど、応答待ちしないで戻ってくるの?


829 :NAME IS NULL:2008/11/20(木) 18:22:01 ID:???
>>827
ありがとうございます。やってみます。

830 :NAME IS NULL:2008/11/20(木) 20:05:05 ID:???
sqlcmd の -p オプションについて教えてください。
-p 付きで実行すると最後に、クロック タイム (ミリ秒)が表示されますが、
以下の2つの場合では 2) の方が圧倒的に早いです。

1) sqlcmd ... -Q "select * from hoge"
2) sqlcmd ... -Q "select * from hoge" > result.txt

コンソール出力などsqlcmd自身の処理も「クロックタイム」に含まれてしまっていると
思うのですが、sqlの実行時間のみを表示させるにはどうしたらいいでしょうか?

831 :NAME IS NULL:2008/11/20(木) 21:33:35 ID:???
>>830
全く同じクエリーなら、クエリープラン諸々がキャッシュされていると思われ。
(そうでなくても、色々なオブジェクトがキャッシュされるし)
実行時間を見るのなら、SQL Server Profilerが妥当と思う。

サーバー、もしくはクライアントでSQL Server Profileを起動しておいて、
[ファイル]−[新しいトレース]で、とりあえず使用するテンプレートは標準を選択。
クエリーの実行時間はDurationという列を参照。



832 :NAME IS NULL:2008/11/20(木) 23:23:47 ID:???
デバッグ中で、データの追加削除を繰り返してたので、ログが膨れ上がっています。
本番前にいったん、すべてクリアしたいと思うのですが、データベース作成直後の
クリーンな状態にするにはどうしたらいいのでしょうか?

833 :NAME IS NULL:2008/11/20(木) 23:27:11 ID:???
>>832
クリーンな状態ってログだけ?
だったら>>827を実行。



834 :NAME IS NULL:2008/11/21(金) 10:17:27 ID:wKzxvEHB
SQL SERVER 2005 で
C#のプログラムからトランザクションをかけてデータを更新したいと思っています。

その時、出来ればトリガが動くような構造にしたいのですが、
そのトリガは出来ればC#からトランザクションをかけてその中で動作してほしいのですがそういうことって出来ますか?

要はSQLを投げたときにトリガは動いてほしいけどロールバックした時にはそのトリガの動作は元に戻したいという都合のいい要件なのですが・・・・


835 :NAME IS NULL:2008/11/21(金) 10:29:26 ID:???
トリガは使わないほうがいいね

836 :NAME IS NULL:2008/11/21(金) 10:45:31 ID:???
>>835
ありがとうございます。
なるほど
トリガは使わずに手動でやった方がよさそうですか・・・・


それともうひとつ疑問というか、使い方がわからないので教えてほしいのですが

データの楽観的更新を行うのに今まで timestamp の列を使用していました。
このヘルプを読んでいると timestampはrowversionのシノニムであることが記述されているのですが

sql server2005のtimestamp列は行ごとに必ず一意になるものと考えていいのでしょうか?
(いわゆる 行単位でデータを持ちそれが自動でインクリメントされる)
実は今までtatimestamp列はテーブル内で一意になり 8byteの枠を超えた行数のテーブルは一意にならないのではないかと思っていたのですが・・・・



837 :NAME IS NULL:2008/11/21(金) 10:52:35 ID:???
いや信じるなよw

838 :NAME IS NULL:2008/11/21(金) 10:57:11 ID:???
>>837

え〜と・・・つられた?w
まぁ、この動作が出来ないのならトリガはあきらめてPGからトランザクション内でチョイチョイとしようとは思うのですがいろいろPG内のチェック等が面倒くさくて出来ればトリガに任せたいのです
SQL投げる回数も増えますし

ストアド内から1トランザクション内でロールバックできるように処理できればそちらでもいいのですが・・・・


839 :NAME IS NULL:2008/11/21(金) 22:43:21 ID:???
>>831
ありがと。

840 :NAME IS NULL:2008/11/22(土) 16:29:45 ID:???
>>838
普通はトランザクションを開始しても、
トリガは動くし、当然、トリガの内容も含めてロールバックされると思うんだけど。
どんな手順で処理してる?

あと、timestamp の値は、timestamp 列のあるテーブルに Insert, Update される度にカウントされる、
データベースのカウンタ。データベース毎に一つで、列とかテーブル単位のカウンタじゃないよ。

841 :NAME IS NULL:2008/11/27(木) 18:16:48 ID:???
VB Express 2008を入れたところSQL2008EXがインストールされました。
これですとマネジメントスタジオが備わっていないので、
マネジメントスタジオがあるアドバンスを入れたところ
SqlServerConfigurationManagerに二つのサービスが出るようになってしまいました。
片方を削除したいのですが、どうすればよいでしょうか?

当然のことながら「サーバーへの接続」のサーバー名には"私のPC名¥express"と"私のPC名¥express0"の
二つがプルダウンに出てきてしまいます。

アドベンチャーワークスのサンプルを入れるときも上記サーバー名のどちらに入れるか聞かれます。


842 :NAME IS NULL:2008/11/27(木) 18:51:50 ID:???
自己解決しました。
普通にアプリケーションのインストールから削除操作を行えばできました。
片方を生かして削除ができました。

843 :NAME IS NULL:2008/11/28(金) 18:31:03 ID:???
解決しててよかった。

844 :NAME IS NULL:2008/11/28(金) 23:19:48 ID:???
SQL2005ですが、Agentのジョブに実行時間のTimeOutを設定することは、できないですか?
実行時間5分のジョブを1h毎に実行するようにスケジュールしているのですが、たまにネットワークのエラーなどで何時間も実行中状態になったままになるのです。
例えば30分でTimeOutしてそのジョブは失敗で終わって次のスケジュールで走ってもらいたいのですが、Agentジョブ自体にはそのような設定が見つかりません。

845 :NAME IS NULL:2008/11/29(土) 08:40:29 ID:???
会社の仕事を持ち帰って家でやらざるを得ないことがあるので家のPCにもSqlServer2000が入っています。
最近SqlServer2005を使う仕事が増えてきたので家のPCにもSqlServer2005Expressを入れようと思って
いるのですが共存って出来るのでしょうか?(している方はおられますか?)


846 :NAME IS NULL:2008/11/29(土) 10:17:43 ID:???
つこうた

847 :NAME IS NULL:2008/11/29(土) 15:41:45 ID:???
2005のバージョン違いは共存できたが2000とは知らない。
2000使わないなら2005に乗り換えたら?

848 :NAME IS NULL:2008/11/29(土) 15:46:18 ID:???
>>846
「共存可能」ということでよいのでしょうか?

849 :NAME IS NULL:2008/11/29(土) 15:47:14 ID:???
>>847
2000も使います。今でも2000の方が仕事が多いので。。。

850 :NAME IS NULL:2008/11/29(土) 17:19:11 ID:???
>845
名前付きのインスタンスで共存させろ。

851 :NAME IS NULL:2008/11/29(土) 21:20:14 ID:???
VirtualPCを使えばいいじゃない

852 :NAME IS NULL:2008/11/29(土) 21:42:09 ID:???
もう1台買う

853 :NAME IS NULL:2008/11/30(日) 00:52:16 ID:???
>>846は2000のライセンスについて気にしているんじゃ

854 :NAME IS NULL:2008/11/30(日) 09:33:21 ID:???
>>851
別途OSのライセンスが必要になるじゃないか。

855 :NAME IS NULL:2008/11/30(日) 12:38:34 ID:???
>>853
エスパーですかw

>>854
英語版でいいならMSがiso配ってるよ。

856 :NAME IS NULL:2008/11/30(日) 13:07:18 ID:???
そもそも開発用ならMSDNでライセンス持ってるだろ?

857 :NAME IS NULL:2008/11/30(日) 13:30:54 ID:???
>>855
> 英語版でいいならMSがiso配ってるよ。

ライセンスを?

858 :NAME IS NULL:2008/11/30(日) 13:51:42 ID:???
>>857
もちろん期限付き
http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en


859 :NAME IS NULL:2008/11/30(日) 15:13:16 ID:???
ライセンスとイメージファイルの区別がついてない厨房でしたか、それは失礼。

860 :NAME IS NULL:2008/11/30(日) 18:54:46 ID:???
>>855
別にエスパーじゃないけど。普通MSDE使うかなって思ったから。

>>858
もちろん使用にあたっての制限つきであることも理解してるんだよね

861 :NAME IS NULL:2008/11/30(日) 21:31:08 ID:???
859は頭悪いの?

862 :NAME IS NULL:2008/12/01(月) 00:01:12 ID:???
ライセンスぐらいよめよ
使えないイメージファイルを配布してるわきゃねーだろ

863 :NAME IS NULL:2008/12/01(月) 08:30:51 ID:???
用途によっては使えないことぐらいみんな知ってるよ

864 :NAME IS NULL:2008/12/01(月) 13:24:23 ID:???
みんなもう2008を本番で使ってますか?
うちは2005なんですけどデータ圧縮とか使いたいな〜と思って
年末の休みにいれかえ予定なんですけど

ちなみにデータベースのサイズは2Gちょい
鯖はWin2003R2 E6700 4G


865 :NAME IS NULL:2008/12/01(月) 19:56:14 ID:???
アップグレード版ってないかのお・・・。

866 :NAME IS NULL:2008/12/02(火) 00:22:38 ID:???
>864
データ圧縮ってエンタープライズ以上じゃないと使えなかったと思う。
スタンダードで使えたら2008を使いたいなと思って残念だった記憶が。
50GB以上くらいのDBでバックアップ取るときに圧縮できると随分楽になるんだよなぁと思ってたんだけど残念だ。
でも2008で使いたくなるような機能って圧縮くらいなんだよなぁ。

最近ようやく2000から2005に移行できたよ。
2008に移行できるのはいつになるんだろうなぁ…

867 :NAME IS NULL:2008/12/02(火) 20:52:55 ID:???
>>866
multiple insert とか merge 文とかGROUPING SETは使ってみたい。

868 :NAME IS NULL:2008/12/02(火) 22:00:57 ID:???
圧縮が必要なレベルの案件がないなぁ。

869 :NAME IS NULL:2008/12/02(火) 22:08:24 ID:???
リソースガバナーもEnterprise Edition以上だし。

そうそう。SQL Server 2008でPowerShellがサポートされるけど、何か役に立つのかな?
Exchange Serverはともかく、SQL ServerはT-SQLでなんとかなっちゃうし。


870 :NAME IS NULL:2008/12/03(水) 01:51:36 ID:???
圧縮なんてLTO側でするから必要ない

871 :NAME IS NULL:2008/12/03(水) 18:38:56 ID:???
教えてください。

データベースの勉強がしたくて、SQL Server Express 2008のインストールを試みたのですが、
インストールが中断してしまって、エラーメッセージも何も出ません。

872 :NAME IS NULL:2008/12/03(水) 19:14:26 ID:???
>>871
ディスクをフォーマットしてOSから入れ直す。


873 :NAME IS NULL:2008/12/03(水) 21:06:02 ID:???
.NETフレームワークを全部消してから入れてみるとか。

874 :NAME IS NULL:2008/12/03(水) 22:03:32 ID:???
顧客から定期的にデータを送ってもらうのですが、データベース容量が1GBを超えるようになり
やりとりが大変です。
1回フルバックアップを送ってもらってその後は差分バックアップだけ送ってもらうということは
出来るのでしょうか?
ちなみにSqlServer2005エンタープライズを使っています。

875 :NAME IS NULL:2008/12/03(水) 22:04:47 ID:???
できる

876 :NAME IS NULL:2008/12/03(水) 22:30:44 ID:???
>>875
超即レスありがとうございます。
フルバックアップ後に差分バックアップをとってもフルバックアップのファイルに追記される感じで
1つのファイルになってしまいます。
別ファイルにする方法がわからないのですが。。。

877 :NAME IS NULL:2008/12/04(木) 07:22:12 ID:???
>>867
multi insertは便利だ!と思ったけどミドルウェアからパラメタで渡すのどうするか
とか考えたら頭痛いですね
ユーザー定義テーブル型で構造体配列を渡すことも今回からできるみたいなので
それ使うといいんでしょうけどちょっと躊躇しますねぇ

>>869
PowerShellは何に使うのか意味不明ですね


878 :NAME IS NULL:2008/12/04(木) 12:58:38 ID:50d5E/qs
2005(Ver9.00.3233.00)で
住所 like '%ー%' (長音)で検索すると'々'までヒットします。
逆に
住所 like '%々%' で検索すると'ー'(長音)までヒットします。

これバグ?


879 :NAME IS NULL:2008/12/04(木) 13:46:33 ID:???
>>878
設定

880 :NAME IS NULL:2008/12/04(木) 20:04:05 ID:???
>>877
これ読んだら使ってみたくなった。

>SQL ServerでPowerShellを使えるメリットとして
>階層イメージでサーバー、DB、テーブル、
>各サービス(AgentやMailなど)にアクセスできる点ですね。
>cd SQLSERVER:\SQL\[サーバー名]\[SQLServerサービスインスタンス名]\Databases\[DB名]
>とした後、DIRとかやるとテーブルの一覧を簡単に列挙できたりするので便利です。
ttp://powershell.hiros-dot.net/post/2008/10/19/SQLServer-2008-e381a6PowerShelle38292e4bdbfe3818ae38186efbd9eDBefbc86e38386e383bce38395e383abe4bd9ce68890e7b7a8efbd9e.aspx

881 :NAME IS NULL:2008/12/05(金) 02:03:49 ID:???
>877
multi insertは使える場面が微妙な気がする。
大量のinsert文を並べて大量のパラメータを渡して複数行まとめてinsertにすると
呼び出し回数が格段に減るのでそこそこパフォーマンスは上がるので
multi insertならもっとパフォーマンスが良くなりそうなんだけど、
パラメータ数の上限の2100に引っかかるのであまり無茶なことは出来ないし
.NETならSqlBulkCopyクラスの使い勝手とパフォーマンスにはどうやってもかないそうにない。

882 :NAME IS NULL:2008/12/05(金) 19:00:05 ID:???
2000の評価版ってもう落とせないの?

883 :NAME IS NULL:2008/12/06(土) 03:14:39 ID:???
なんでいまさら2000を評価する必要があるの?w

884 :NAME IS NULL:2008/12/06(土) 12:40:57 ID:???
そこに評価版があるからだ。

885 :NAME IS NULL:2008/12/07(日) 23:20:58 ID:???
>>881
大量のパラメーターを渡すよりもユーザー定義テーブルをパラメーターとして
渡せばいっきに渡せる
.NETからだとデータセットなりクラス、構造体配列をまとめて渡せる
ただそういうのはループしながらパラメーター化してInsert発行するのが普通で
既存アプリを直してまでパフォーマンス稼ぐ必要あるかどうかといわれると微妙
ユーザー定義テーブル型はメンテがめんどうだしね

1000行とかじゃそんな変わらないだろうし大量にやるなら>881のいうように
他の方法あるしな

886 :NAME IS NULL:2008/12/08(月) 15:53:42 ID:JuIy9Atn
すみません。msdn等で調べていたのですが、どうしてもわからないため
質問させていただきます。
有識者の方、よろしければご回答お願いいたします。

現在、SSISでパッケージ作成しており、SQL実行タスクで

SELECT 'TEST_TBL' AS NAME

を実行し、それを変数[TBL_NAME]に単一行で結果セット(変数の型はString)
しています。
パラメーターマッピングはしていません。

この変数[TBL_NAME]をデータフロー内の[OLE DBソース]の[テーブル名または
ビュー名の変数]で使用したいのですが、[TBL_NAME]を指定するとエラーが
起こってしまいます。

どのように設定すれば[テーブル名またはビュー名の変数]に変数を指定できる
のでしょうか?

初歩的な質問で申し訳ありませんがよろしくお願いいたします。

887 :NAME IS NULL:2008/12/08(月) 17:25:51 ID:???
2005 SP3 が年内に出るって話し合ったが
結局でないのけ

888 :NAME IS NULL:2008/12/08(月) 19:40:06 ID:???
>>886
動的SQLでググレばなんとかなるんじゃないの?


889 :NAME IS NULL:2008/12/08(月) 23:48:28 ID:???
>>888

返信遅くて申し訳ございません。
海外サイトに記述してありました。

ありがとうございます。

参考までにURL貼っておきます。

http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2503829&SiteID=17

890 :NAME IS NULL:2008/12/09(火) 00:21:42 ID:Eo7pggoY
初歩的な質問で申し訳ありません。
SQL SERVER 2005 DEVELOPER EDITIONのMANAGEMENT STUDIOにて、あるDB
のみアタッチすると、サーバーの「管理」の下にメンテナンスプランが
表示されません(消えてしまいます)
DB自体はきちんとアタッチされており、中を確認することもできます。
何が原因なのでしょうか?アドバイスよろしくお願いいたします。



891 :NAME IS NULL:2008/12/09(火) 11:43:00 ID:???
SQL2000鯖でも見てるんじゃねぇのか

892 :NAME IS NULL:2008/12/12(金) 11:54:36 ID:???
SQL で質問です。
毎時間辺りのアクセス数を調べたいのですが、

アクセスログテーブル

日付(int型)|時間(int型)
20081211|090000
20081211|090123
20081211|101258
20081211|150511
20081212|223014

のようにログが格納されていて、
現在
--9時台検索
select count (*) from アクセスログ
where 日付 = 20081211 and 時間 between 090000 and 095959

--10時台検索
select count (*) from アクセスログ
where 日付 = 20081211 and 時間 between 100000 and 105959

のようにクエリを作成しています。

クエリアナライザに時間帯毎のクエリを24個貼り付けて、操作上は
1発で実行出来るのですが、1個のクエリにまとめる事は出来ますでしょうか?
恐れ入りますが、ご教授お願いします。

893 :NAME IS NULL:2008/12/12(金) 12:29:29 ID:???
intならこんな感じで。
select count (*) from アクセスログ
where 日付 = 20081211
group by floor(時間/10000)

894 :NAME IS NULL:2008/12/12(金) 13:13:44 ID:???
>>893
ありがとうございます!出来ました!
こんなにすっきりした文で出来るなんてビックリしました。
floor 関数知らなかったので調べてみます!

895 :NAME IS NULL:2008/12/12(金) 21:40:08 ID:???
>>893
すいません、このSQLだと、アクセスログが無かった時間帯(深夜3、4時等)の行が非表示になってしまいました。
0件の場合でも0と表示させる事は、可能ですか?
度々申し訳ありません。

896 :NAME IS NULL:2008/12/12(金) 22:09:24 ID:???
>>892
ちょっと待て!
INTで090000はありえないだろ!!

897 :NAME IS NULL:2008/12/12(金) 23:48:33 ID:???
>>896
失礼しました。
読みやすくする為に、全て6桁で表記してしまいました。


898 :NAME IS NULL:2008/12/13(土) 01:36:23 ID:???
ああ、うん。
(見栄えのために0パディングしてるという前提で、)intなら…
という風に書いてたんだけどいらないかと思って消したんだ。

0件の場合に0と出すのは、、、PostgreSQLならgenerate_seriesって関数で連番作れるので
それと結合すればいいんだけど、SQLServerには無いっぽいので、簡単にはいかないかも。

899 :NAME IS NULL:2008/12/13(土) 01:58:23 ID:???
>895
その結果にunionでcount(*)が0件のレコードを24行追加してsumでもしたら?

900 :NAME IS NULL:2008/12/13(土) 02:13:22 ID:???
>>899
そうするならアクセスログテーブルとUNION ALLした方が。

901 :NAME IS NULL:2008/12/13(土) 20:52:59 ID:???
>>900
イミフ

902 :NAME IS NULL:2008/12/13(土) 22:59:10 ID:koWcQKgo
SQL SERVER 2005 において、以下のようなメンテナンスプランを組んだの
ですが、うまくいきません。
原因等お分かりになりましたら、アドバイスお願いします。

・サブプラン1→データベースバックアップタスク
 あるフォルダに対し、毎日決まった時間にバックアップファイル作成
・サブプラン2→メンテナンスクリーンアップタスク
 バックアップファイル作成フォルダに対し、毎日決まった時間に、
拡張子(bak)のバックアップファイルを検索し、4週間経過したファイルを削除

→サブプラン1はきちんと実行され、バックアップファイルが作成
されるものの、サブプラン2が全く実行されず、バックアップファイル
が溜まりっぱなしになってしまう。
※履歴を確認してもサブプラン2は全く実行されていません。

903 :NAME IS NULL:2008/12/13(土) 23:42:29 ID:???
>>898
すいません、ありがとうございました。ネットで調べてCASE式を組み合わせて
無事0件の時は0で表示出来るようになりました。
更に複数日付でも一括して取れるようになりました。
以下 クエリです。

select
sum (case when 日付 = 20081211 then 1 else 0 end)as '1211',
sum (case when 日付 = 20081212 then 1 else 0 end)as '1212',
sum (case when 日付 = 20081213 then 1 else 0 end)as '1213'
from アクセスログ
group by floor(時間/10000)

904 :NAME IS NULL:2008/12/14(日) 00:41:32 ID:???
3日とも3時台にアクセスが無かったら?

905 :NAME IS NULL:2008/12/14(日) 02:13:24 ID:???
>>904
別にこの3日以外でも、レコードが有りさえすればいいんでない?
それでも心配なら(つか心配だ)19000101とかで全時間帯のダミーを作っておくとか。

906 :NAME IS NULL:2008/12/15(月) 18:25:32 ID:???
>>719にも書いてありますが、
純粋にSQL Server 7.0→2008に移行できるんでしょうか?

SQL Server 7.0→2005に移行する為の資料というかはあるんですけど。
調査不足だったら申し訳ないです。

907 :NAME IS NULL:2008/12/15(月) 19:01:12 ID:???
ストアドの結果を利用してUPDATEしたいのですが、可能でしょうか?
INSERTなら↓みたく出来るのですが・・・

INSERT INTO hoge
EXEC foo_sp @param = 1;

908 :NAME IS NULL:2008/12/15(月) 19:40:17 ID:???
update table
set clmn = fnc(prm)
とかならできる

909 :NAME IS NULL:2008/12/15(月) 23:19:39 ID:???
>906
それぞれ2つ前のバージョンまでしか互換性レベルが使えないので7→2008は無理っぽいような気がする。
一度DBを2005でアタッチして互換性レベル変えてデタッチして2008でアタッチとかすれば移せると思うよ。

910 :NAME IS NULL:2008/12/16(火) 07:53:43 ID:???
Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 3
http://www.microsoft.com/downloads/details.aspx?FamilyID=b448b0d0-ee79-48f6-b50a-7c4f028c2e3d&DisplayLang=en

まだ英語版のみ
SP3本体も年内にはでるのかな。

911 :906:2008/12/16(火) 10:02:12 ID:???
>>909
返信有り難う御座います。

やっぱり直接のバージョンアップは無理そうですね。
という事は2005と2008を両方購入しなければならないっぽのか。
うーん。SQL Serverも結構値段がはるし、困ったものです。

912 :NAME IS NULL:2008/12/16(火) 10:32:11 ID:???
>>911
データベースサイズが4GB以下だったら、2005 Express Editionをかますという手もあるような気がする。


913 :NAME IS NULL:2008/12/16(火) 13:13:56 ID:???
Microsoft SQL Server 2005 Service Pack 3
http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&DisplayLang=en

914 :NAME IS NULL:2008/12/16(火) 14:23:18 ID:???
申し訳ございません。ご指定のページが見つかりませんでした。

915 :NAME IS NULL:2008/12/16(火) 14:53:43 ID:???
質問です。

SQLServerで、ページ番号からテーブル等のオブジェクト名を
取得する方法はありますか?

916 :NAME IS NULL:2008/12/16(火) 15:12:44 ID:???
>>915
自己解決しました。
DBCC PAGEで見れました。

917 :NAME IS NULL:2008/12/16(火) 15:23:28 ID:???
Microsoft SQL Server 2005 Express Edition with Advanced Services Service Pack 3 - 日本語
http://www.microsoft.com/downloads/details.aspx?FamilyID=b448b0d0-ee79-48f6-b50a-7c4f028c2e3d&DisplayLang=ja

Feature Pack for Microsoft SQL Server 2005 - December 2008 - 日本語
http://www.microsoft.com/downloads/details.aspx?FamilyID=536fd7d5-013f-49bc-9fc7-77dede4bb075&DisplayLang=ja

918 :NAME IS NULL:2008/12/16(火) 15:32:28 ID:???
例えば下記のようなデータがあったとします。

ID|No|DATA
1 | 1 | A
1 | 2 | B
1 | 3 | C
2 | 1 | A
2 | 2 | B
3 | 1 | A
3 | 2 | C
4 | 1 | B
4 | 2 | C

このデータにおいてDATA列に対して下記のような条件で検索を行うクエリを作成したいのです。
@DATAにAとBを持つID
ADATAにAとCを持つID
BDATAにAとBとC持つID
それぞれ期待する結果は
@ 1と2
A 1と3
B 1のみ
となります。
このDATAに持っている条件は複数指定できるようにしております。(AとBとCと・・・Zというのも可)

なかなかいいクエリが作成できなくて困っております。
現在、この検索動作を満たすために、
いったんDISTINCTでIDの一覧を取得しておき、
取得したID一覧と検索条件の2重ループでカウントを取得するクエリを投げ、
結果が0件となった時点で検索結果からはずし、
最後まで1件(同じIDに対して複数の同じDATAはないため)だった場合は結果に含める
ということで行っております。

VB.NET風に書くと
' ArrayIDにはDISTINCTにより取得した全IDが、
' ArrayDATAにはユーザーが検索画面で入力された条件が入っているものとします。
Dim ArrayResultID As Array ' 検索結果のIDが入る配列
Array.Copy(ArrayID, ArrayResultID) ' 検索結果にいったん全部のIDをコピー
For Each id In ArrayID
For Each data In ArrayDATA
command.CommandText = "SELECT COUNT(*) FROM TABLE WHERE ID = " & id & " AND DATA = " & data
cnt = command.ExecuteScaler()
If cnt = 0 Then
ArrayResultID.Remove(id) ' 0件だった場合はそのIDを検索結果から除外する
Exit For ' 現在のIDでのDATAループから抜け、次のIDでのDATAループに移る
End If
Next
Next
If ArrayResultID.Count = 0 Then
MessageBox.Show("指定した条件でのIDはありませんでした。")
Else
' リストビューに結果を表示
End If
といった感じとなります。

IDの数およびユーザーが入力した条件の数により、その分クエリを投げる回数が増えてしまい
結果を返すまでの時間がものすごくかかってしまっているのが現状です。

もし、このような結果を1回の問い合わせ(または数回の問い合わせで)返すクエリがあるようでしたら
ご教授のほどよろしくお願いします。

919 :NAME IS NULL:2008/12/16(火) 15:41:41 ID:???
>>918
DATAでフィルタかけてIDでグループ化した件数がフィルタデータの数と一致すれば出力
というやり方でいけないの?

920 :NAME IS NULL:2008/12/16(火) 16:59:17 ID:???
>>919
ありがとうございます。
その方法でやりましたところ、期待する動作を1回の問い合わせと件数チェックにて行えることができました。

921 :NAME IS NULL:2008/12/16(火) 18:54:57 ID:???
Microsoft SQL Server 2005 Service Pack 3
http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&DisplayLang=ja

922 :NAME IS NULL:2008/12/16(火) 19:24:33 ID:???
SQLServerのフェールオーバークラスターはActive/Passive構成ですが
Active/Active構成でロードバランスとかやれる製品はありますか?

923 :NAME IS NULL:2008/12/16(火) 19:57:29 ID:???
>>920
もしかして件数チェックってプログラムでやってる?
もしそうなら、HAVING句使えばいいよ。

SELECT ID
FROM TABLE
WHERE DATA=A AND DATA=B
GROUP BY ID
HAVING COUNT(*) = 2


924 :NAME IS NULL:2008/12/17(水) 08:16:05 ID:???
SQL Server 2005 Books Online (2008 年 11 月)
http://www.microsoft.com/downloads/details.aspx?FamilyID=be6a2c5d-00df-4220-b133-29c1e0b6585f&DisplayLang=ja

925 :920:2008/12/17(水) 11:45:03 ID:???
>>923
おお、教えてくださりありがとうございます。
これで1回の問い合わせだけでできるようになりました。

926 :NAME IS NULL:2008/12/17(水) 15:32:44 ID:???
あるファイルに完全バックアップをとったあとで同じファイルに差分バックアップを追加すると
完全バックアップのFILE番号は1、差分バックアップのFILE番号は2になると思うのですが、
このファイルから差分バックアップの分だけを削除することはできないのでしょうか?
できるとしたら何というコマンドを使えばいいのでしょうか?
(SqlServer2000と2005のどちらでも結構です。)


927 :NAME IS NULL:2008/12/17(水) 18:38:58 ID:???
テーブルにクラスタ化インデックスを追加するとどっかのテーブルにインデックス情報が
作られるんですよね?その内容を見たいんですけどどうやったら見れますかね?

928 :NAME IS NULL:2008/12/19(金) 01:46:34 ID:???
datetime型をnverchar型に変換する際に、convert関数で
yyyy/MM/dd HH:mm:ssの書式にする方法を教えて下さいm(._.)m

929 :NAME IS NULL:2008/12/19(金) 02:23:23 ID:???
ヘルプでconvertで載ってると思うが。
第二引数に112だかなんだかを指定するんだったかな。
忘れた。調べろ。

930 :NAME IS NULL:2008/12/19(金) 04:01:35 ID:???
111と8をくっつける、かな

931 :NAME IS NULL:2008/12/19(金) 07:19:10 ID:???
ACCESSのFormat関数みたいにわかりやすくして欲しいよな。
111とかだと直感的ではない。

932 :NAME IS NULL:2008/12/19(金) 08:26:27 ID:???
確かに。毎回調べてる。

933 :NAME IS NULL:2008/12/19(金) 22:38:00 ID:i+V3kjbR
http://msdn.microsoft.com/ja-jp/library/ms187928.aspx

934 :NAME IS NULL:2008/12/20(土) 00:41:26 ID:???
>>933
そんな説明はさんざん見飽きてる人が多いと思うが。。。

935 :NAME IS NULL:2008/12/20(土) 07:14:46 ID:???
本番環境に SP3 入れちまったんだが、今度は大丈夫だよな!?
前科があるだけに・・・

936 :NAME IS NULL:2008/12/20(土) 14:02:27 ID:???
早すぎじゃね?
テスト環境に導入してしばらく様子見るのが普通だと思ってた。

937 :NAME IS NULL:2008/12/20(土) 16:10:29 ID:???
>>935
前科ってなに?

938 :928:2008/12/21(日) 00:41:06 ID:???
>>929-934
930さんので出来ました。ありがとう。



939 :NAME IS NULL:2008/12/22(月) 14:18:28 ID:???
default:怠慢・欠席・不参加・不履行

マ板的には怠慢、つまり何もしていない(=初期値)が意味的には一番近いんだろうか?

940 :NAME IS NULL:2008/12/22(月) 23:11:21 ID:???
Cumulative update package 1 for SQL Server 2005 Service Pack 3
http://support.microsoft.com/kb/959195/

941 :NAME IS NULL:2008/12/23(火) 18:43:45 ID:???
年末に本番環境の2005を2008に入れ替えます
いいよね?


942 :NAME IS NULL:2008/12/23(火) 22:09:19 ID:???
人柱が増えるおかげで Service Pack がでたら
またかなりよくなりそうだな

943 :NAME IS NULL:2008/12/24(水) 00:02:05 ID:???
SQL Server 2008 です。
Table1 と Table2 が同じ構造だとして、
Table1 の全件を Table2 に移したいと思っています。

insert into Table2 select * from Table1;

だとエラーになってしまうのですが、どう書いたらいいでしょうか?


944 :NAME IS NULL:2008/12/24(水) 01:31:38 ID:???
なんのエラーになるの?

945 :NAME IS NULL:2008/12/24(水) 09:52:26 ID:dzxhWigS
サーバマシンが不安定なためOSと共に2005の再インストールを計画中なのですが
既存のmaster、msdb、model、ユーザDBのファイルを
再インストール後にアタッチで復元しようと思います。
OS再インストール前にこれらのDBを意図的にデタッチする必要はあるでしょうか?
インスタンスを停止すれば勝手にデタッチするのでしたら愚問になりますが
そのあたりの仕組みを理解していないものですいません。

946 :NAME IS NULL:2008/12/24(水) 10:54:10 ID:???
「エラーになる」しか書けないような奴に仕事させんなよ…

947 :NAME IS NULL:2008/12/24(水) 11:39:17 ID:???
既にtable2があるってオチじゃないのか?

948 :NAME IS NULL:2008/12/24(水) 11:47:38 ID:???
すでにデータが入っていてキー重複という線もあるぜ

949 :NAME IS NULL:2008/12/24(水) 18:22:32 ID:???
>>943
Table1にフィールドが3つ(fld1、fld2、fld3)あるとして、とりあえず↓のどれかでうまくいくかやってみて。
あとどんなエラーメッセージが出るかも書いて。


insert into Table2 (fld1, fld2, fld3) select * from Table1;

insert into Table2 select fld1, fld2, fld3 from Table1;

insert into Table2 (fld1, fld2, fld3) select fld1, fld2, fld3 from Table1;


950 :NAME IS NULL:2008/12/24(水) 23:48:13 ID:???
どうせ同じ構造じゃないってオチだろ

951 :943:2008/12/25(木) 02:33:11 ID:???
手元に動かせる環境がないので、正確には分かりませんが、文法エラーです。
皆さんならすぐに分かると思ったのですが。

Table1 と Table2 は同じ構造で、キーは重複しません。
Oracle だとあの書き方で通ります。

>>949
ありがとうございます。やってみます。

952 :NAME IS NULL:2008/12/25(木) 21:15:55 ID:???
文法的には間違ってない。
原因はいろいろ考えられるけど想像であれこれ言うよりエラーを貼れとしか。

953 :NAME IS NULL:2008/12/25(木) 21:47:46 ID:???
>>951
その文法エラーを示すメッセージを貼ってくださいよ。

954 :NAME IS NULL:2008/12/25(木) 22:22:02 ID:???
こりゃだめだw

955 :943:2008/12/26(金) 00:39:35 ID:???
>>952
ありがとうございます。文法的には間違ってないですか?
SSMAで変換かけてもエラーになったのでてっきりこの文法はないのかと。
今度もう一度試してみます。

956 :NAME IS NULL:2008/12/26(金) 02:15:34 ID:???
何だ、釣りか。

957 :sage:2008/12/26(金) 11:08:24 ID:CVA6mREA
顧客向けシステムのDB用に2005StandardのユーザCALを購入したのですが
Windowsのどこで設定するのかご存じの方、お教えいただけると幸いです。

販売元サポートに聞いたら「設定するとこはないですよ」て言われたんだけど
社内で「嘘だろ!」と怒られてしまって。
焦ってたり。情報が見つからなかったりで。

958 :NAME IS NULL:2008/12/26(金) 11:51:38 ID:???
紳士協定です

959 :NAME IS NULL:2008/12/26(金) 12:39:48 ID:???
2000 までは入力するところあったんだっけ。
まぁ実際にCAL買ってなくても数字入れればその数で使えたと思うが

960 :NAME IS NULL:2008/12/26(金) 13:17:30 ID:???
設定なんて無制限w

961 :NAME IS NULL:2008/12/26(金) 14:00:23 ID:???
>>959
2000はあるな。俺なんか99とかしてるがww

962 :957:2008/12/26(金) 18:36:38 ID:???
分からないまま、納品てことになりそうです。
レスをくれた方々、ありがとうございました(*-人-*)

>>958
紳士協定ww

963 :NAME IS NULL:2008/12/27(土) 00:58:15 ID:???
    2008のExpressダウンロードしてインストールしようとしたんだけど、全然成功しない。
    事前のチェックとかは全て終わって、インストールは始まるんだけど途中でエラーが出てしまう。
    そのエラーを見ても、何を改善すればいいのかサッパリわからない。

    みんなは2008なんの問題もなくインストールできた?
    昔の2000や2005はごく普通に出来たんだけど、2008はマシン変えてもどれも出来ないんだよね。
    3台PCがあって、1台がServer、後は全部XPなんだけどどれも成功しない。
    仮想環境で新規に作った環境でも成功しない。

    これインストールできるのか?と思う程成功しない。
    2008からは散々事前チェックとかが入ってるから、それがOKってなってればインストールできそうなもんなんだけど何故に・・・

    詳細はエラーログを見ろと言われてみてみても、そのエラーログが長すぎて一体どれが原因なのかがサッパリで。
    一応見てわかる分には、MSXML 6.0 Parser -- インストールに失敗しました
    というのだけ明らかに失敗とわかるログがあったけど、でも何故失敗するかがわからない。


964 :NAME IS NULL:2008/12/27(土) 09:11:22 ID:???
>>963
2008を入れたけど…。
相当時間が掛かった覚えがある(現在は2005Expressに戻した)
Core2Quad+メモリ6GBで一時間くらいかかんなかったっけ。

965 :NAME IS NULL:2008/12/27(土) 10:33:13 ID:???
インストール途中でエラー出て止まってるようなので、そんなに時間はかからなかった。
事前の設定とか色々を除いて、最後のインストールだけでいうと数分でエラーでて止まるぐらい。
スペック的にはよく似たぐらいかな。

なんでなのかなあ・・・

966 :NAME IS NULL:2008/12/27(土) 11:23:48 ID:???
MSXMLだけ先にインストールしてみたらどうでしょ。

Microsoft XML パーサー (MSXML) のバージョン一覧
ttp://support.microsoft.com/kb/269238/

967 :NAME IS NULL:2008/12/27(土) 22:00:34 ID:???
ファイルがぶっ壊れてるのかも。
もっかいダウソしてみれば?

968 :NAME IS NULL:2008/12/28(日) 14:11:10 ID:???
>>966
それだけ別にインストールしてみたけど、無理でした。
というか現在、インストール自体受け付けなく・・・

>>967
ダウンロードしなおしたけど、上記理由によりもっと根本的におかしな状態になってしまって。

インストーラ実行後、一番最初の環境チェック?みたいなのが終わって
そこから本来は次のチェックが始まるはずなんだけど、今それ以降反応がなくなってプロセスが進まない状態に。

969 :NAME IS NULL:2008/12/28(日) 18:07:15 ID:???
windowsインストーラのクリーンアップツールがあっただろ
それつかってみれば

970 :NAME IS NULL:2008/12/29(月) 15:19:01 ID:???
>>969
おおおおおおお!
それを使ってからインストールしてみたら、成功しました!

どうもありがとうございます。

971 :NAME IS NULL:2008/12/29(月) 22:02:50 ID:???
そんなもんがあるのか。
知らなきゃ永久にインストールできねーな。
知識は力とはこのことだね。

972 :NAME IS NULL:2008/12/31(水) 21:51:12 ID:???
SQL Server Express Edition (with Advanced Services)の 2005 と 2008 を
同居させることってできるんでしょうか?

973 :NAME IS NULL:2008/12/31(水) 22:47:57 ID:???
エディション書いてないけど、多分大丈夫じゃないかな。
http://msdn.microsoft.com/ja-jp/library/ms143694.aspx

974 :972:2009/01/01(木) 13:26:15 ID:???
>>973
ありがとうございます。リンクを参考に別名を指定してインストールしたところ、
- ルール "SQL Server 2005 Express Tools" は失敗しました。
- SQL Server 2005 Express Tools がインストールされています。
- 続行するには、SQL Server 2005 Express Tools を削除してください。
とエラーが表示されましたが、以下のサイトなんかも参考にして、
SQL Server Management Studio Expressをアンインストールしてからインストールすると、
無事インストールできました。
ttp://devadjust.exblog.jp/8565032/
一応、Management Studio Expressから、2005、2008のそれぞれのインスタンスに
ログインできてるので、大丈夫だと思うんですが、もう少し動作確認してみます。

975 :NAME IS NULL:2009/01/02(金) 12:12:09 ID:???
2005以降はツールはバージョン違いがあると入れられなくて共存しなくなったよね。
でも2005と2008が共存しないとなると2005のDeveloperを使ってて2008のExpressを試そうとすると困りそうな気がするけど。

976 :NAME IS NULL:2009/01/02(金) 21:23:43 ID:???
>>975
共存できてるよ?
まさにその2005Devと2008Expressの状態で。
2005には2005のSSMSで、2008には2008のSSMSでログインできてる。

977 :NAME IS NULL:2009/01/05(月) 15:34:02 ID:???
>>972
イタタタタタタタタタタタタタタタタタタタタタタ

978 :NAME IS NULL:2009/01/05(月) 17:23:43 ID:???
SQL Server 2005/2008 Express は
外部公開のWebサーバで使っても問題ないんでしょうか?
Standard以上のプロセッサライセンスが必要なんでしょうか?

979 :NAME IS NULL:2009/01/05(月) 23:24:21 ID:???
デッドロックから抜け出せません。
原因が分からず、何かアドバイスをいただけないでしょうか?

レコードが15万件ほどのテーブル1があります。
主キーは列A,B,C。
インデックスは主キーに対応したクラスタインデックスのみ。
他に列C,D,Eでも一意で、これを条件に更新を行います。
以下のUPDATE文が10個ほどの並列プロセスで流れている
のですが、数百回に一度デッドロックが発生します。
条件のDとEの値は最低どちらかは異なり、確かに一意の
レコードに対して更新をかけています。

UPDATE テーブル1 SET F = '1'
WHERE C+D+E IN
(SELECT TOP1 C+D+E FROM テーブル1
WHERE D = '値' AND E = '値'
ORDER BY C)

SQL Server Profilerでトレースしたところ、上記のUPDATE文
のみによって引き起こされているようです。
DeadLock Graphを見るとKEYではなくPAGEに対して更新ロック(U)
を取り合う様が見れるのですが、ひどくぐちゃぐちゃです。
試しに条件文のSELECTのみWITH (ROWLOCK,UPDLOCK)でデバッグ
してみたのですが、大量のPAGEロック(IU)と一つのKEYロック(U)が取得されます。
C,D,Eに一意の非クラスタ化インデックスを貼ると、すっきりするのですが
PAGE(IU)とKEY(U)に2つずつロックされます。(どうして一つにならない?)

ところで、UPDATE文の中のSELECT文は何ロックを取得するのでしょうか?
更新ロック(U)、それとも共有ロック(S)を取得してからの排他ロック(X)?

長くてすいません。
よろしくお願いします。


980 :NAME IS NULL:2009/01/06(火) 00:03:02 ID:???
>>979
>WHERE C+D+E IN (以下略
計算や文字列接続をするとINDEXは効かなくなる。

動かしていないけど、多分こんな感じ。
UPDATE テーブル1 SET F = '1'
WHERE D = '値' AND E = '値'
AND C IN
(SELECT TOP1 TBL.C FROM テーブル1 AS TBL
WHERE TBL.D = テーブル1.D AND TBL.E = テーブル1.E
ORDER BY C)

あと、UNIQUEINDEXはD,E,Cの順で。



981 :NAME IS NULL:2009/01/06(火) 21:33:27 ID:???
>>980

本日試してみたところ、非常に高速で、
デッドロックは故意におこせないのですが、
そのテスト用アプリで生じていたページロックが
解消されました。

これで解決するか分かりませんが、しばらく様子を
見てみたいと思います。

ありがとうございました!

982 :NAME IS NULL:2009/01/07(水) 00:18:51 ID:???
あーごめん俺がロックしてた

983 :NAME IS NULL:2009/01/07(水) 22:43:22 ID:???
SQLServer2005で、メンテナンスプランを使って毎日1回バックアップをとろうとしています
(1つのファイルにバックアップセットを追加していきたいと思っています)。

バックアップを取る際に、最近10日分だけ残して、11日前のバックアップセットは削除したいのですが、
それにはどのようにすればいいでしょうか?
「バックアップセットの有効期限」に10日を設定するだけでは駄目なのでしょうか?



984 :NAME IS NULL:2009/01/08(木) 15:23:55 ID:VXlkEjyg
SQLServer2005とSQLServer2008って同一PCで同時に稼動させることは出来ますか?

985 :NAME IS NULL:2009/01/08(木) 16:14:43 ID:???
デキル

289 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)