08/04/05 15:33:19
Microsoft SQL Server (Transact-SQL) の総合スレッドです。
・Microsoft 公式サイト
URLリンク(www.microsoft.com)
・過去スレ
Microsoft SQL Server 総合スレ 5
スレリンク(db板)l50
Microsoft SQL Server 総合スレ 4
スレリンク(db板)l50
Microsoft SQL Server 総合スレ3【MS SQL】
スレリンク(db板)l50
MS SQL Server 総合スレ2
スレリンク(db板)l50
3:NAME IS NULL
08/04/07 07:59:59 7wzqdvA4
ではさっそく
SANに2台サーバが接続されています
片方のサーバのSQLSERVFRでオープンしているデータファイルをもう片方のサーバのSQLSERVERから読み取り専用で開く事は可能ですか?
バージョンは2005です
4:NAME IS NULL
08/04/08 02:32:07
できない気がする。
5:NAME IS NULL
08/04/08 02:34:12
MSDE 2000、Books Online で FETCH を見ると RELATIVE に指定する変数は
smallint でも良いことになっているけど、変数の値が負だと @@FETCH_STATUS が -1 になった。
型を int に変えたら直った。
これで4時間悩んだ。MS頃す
6:NAME IS NULL
08/04/08 15:45:11
>>3
無理。
7:NAME IS NULL
08/04/08 21:13:09
データベースAの全テーブルとデータベースBの全テーブルのコンペアってどうやります?
やっぱり全部テキストに落としてから比較?
8:NAME IS NULL
08/04/11 09:46:27 l77RsaBa
SQLについて教えてください。
とあるNVARCHAR列に半角が入っているものを検索したいのですが
列 like '%A%' OR 列 like '%a%' || ・・・・・・みたいに
一文字ずつ半角コードと総当りさせるORを書くしかないのでしょうか?
なにかいい方法はありますでしょうか?
9:NAME IS NULL
08/04/11 10:53:30 l77RsaBa
事故解決しました。
Access使って
SELECT * FROM ××マスタ
WHERE StrComp(列名,StrConv(列名,4),0) != 0
10:NAME IS NULL
08/04/11 16:06:37
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
08/04/11 18:40:38
日付のyyyy/mm/ddでカウントしたいなら
GROUP BY の条件も GROUP BY substring(convert(char,U_DATE,111),1,10)
12:NAME IS NULL
08/04/14 09:57:59
ジョブについて教えてください。
とあるバッチ(hoge.vbs)があります。
これをジョブで起動するのですが。
cscript.exe hoge.vbs
これをhoge.vbsの実行が終わったら1秒空けて(あけなくてもいいかも)
またhoge.vbsを実行したいです。永久に。
このような処理をジョブで可能でしょうか?
よろしくお願いいたします。
13:NAME IS NULL
08/04/14 22:22:05
>>12
SQL Server エージェントをみてみたら1分間隔までは設定できるみたいだけど、1秒というのはできないっぽい。
(まあ、ジョブを60個作って無理やり動かせば可能だけど)
ただ、SQL Serverエージェントで処理する必要があるの?
例えばhoge.vbs内で無限ループさせるとか、hoge.vbsを呼び出すバッチファイルやスクリプトを作成するとか。
あと、1秒空けるのは、sleepを使えばCPU時間を消費しないで待たせることは可能。
最初の起動としては、スケジュールを作成するときに、スケジュールの種類を"SQL Serverエージェント開始時に
自動的に開始"を設定することでできるし、Windowsタスクの場合でも"システム起動時"に設定すれば起動できるよ。
どんな処理かわからないから、漠然としか回答できないけど、こんな感じでいいかな?
14:NAME IS NULL
08/04/14 22:47:09
>>11
ありがとうございます。
抽出したい件数がカウントできました!
15:NAME IS NULL
08/04/15 06:36:41
>>12
pingで1秒waitっぽいことできるでしょ
16:NAME IS NULL
08/04/15 14:28:25
varcharの列でnullだったり空だったりすると抽出条件が面倒なので、
空で統一したら便利なんじゃないかと考えました。
nullを許容のチェックを外して既定値を '' にしたんですが、
運用していく上でなにか不都合があったりするのでしょうか?
17:NAME IS NULL
08/04/15 18:53:02
>>16
ビジネスロジック上nullと空を区別する必要ないならいいんじゃないの?
あと最近うんちがRAIDになってしまう
家でずぼっと出て会社で残りをするような
18:NAME IS NULL
08/04/15 23:39:15
ちょっと質問ですが、今までOracleを使ってたのですが、
少しの間だけ、SQLSERVERを使っているプロジェクトに入ることになりました。
SQLSERVERを使ってる人はだいたいクエリーツールは何を使っているのでしょうか?
クエリーアナライザーを使うのが多いのでしょうか?
職場だとフリーやシェアのソフトを入れても特に問題は無いです。
19:NAME IS NULL
08/04/16 00:13:38
2000ならクエリアナライザ使ってるだろうな
あとVisualStudio
20:NAME IS NULL
08/04/16 00:15:41
意外とaccess
21:NAME IS NULL
08/04/16 00:26:10
Access2003以下のMSSQL2005触らせなさは異常
22:NAME IS NULL
08/04/16 01:15:36
>18
2005ならManagementStudio、2000ならクエリアナライザがあるが2005のManagementStudioを使った方がいろいろ便利だと思う。
Oracleと違って標準で用意されてるツールで大体十分だと思うよ。
23:16
08/04/16 09:14:29
>>17
サンクス。区別する必要が無いときはそれでやってみます。
24:NAME IS NULL
08/04/17 13:50:03 tnV6pzL3
integration serviceについて教えて下さい。
当方、2003serverとVB6.0を用いて、integration serviceでデータのインポートを呼び出そうとしているのですが、可能でしょうか。
本やネットを調べても、.netやbusiness intelligence development studioの話題しか出てこないのですが……。
25:NAME IS NULL
08/04/17 13:50:46
上げてしまいました、すみません……。
26:NAME IS NULL
08/04/18 10:31:39
悩み中…
SQL Server 2000で、約2億件のデータから特定の条件の約2000万件のデータを削除したい
普通に delete from A where B=C とかではあっさりタイムアウトするので分割削除したい
delete top 1000 from A where B=C みたいなことって出来るんでしょうか?
27:NAME IS NULL
08/04/18 11:38:05 hKVau2G8
で、それを2万回やるの?
28:NAME IS NULL
08/04/18 13:01:03
そうw
29:NAME IS NULL
08/04/18 13:06:21 nmpP6AcP
他の列使って絞り込みながら少しずつ削除とかできないの?
30:NAME IS NULL
08/04/18 13:08:01
>>29
やっぱそれですかねぇ…
それやりかけて嫌になって聞いてみたんですが
31:NAME IS NULL
08/04/18 13:30:57
>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
08/04/18 13:32:14
>>30
SQL Server 2005はDELETEでTOPの指定はできるけど、SQL Server 2000ではできない。
その辺りの方法については、Pass Jのフォーラムとか川端さんのブログで見た記憶があるけど。
33:NAME IS NULL
08/04/18 13:33:34
>>26
bcpを使って条件付で抜き出す。
truncat tableでテーブルクリア。
bcp最小ログでデータをロード。
34:NAME IS NULL
08/04/18 14:53:09
Cumulative update package 7 for SQL Server 2005 Service Pack 2
URLリンク(support.microsoft.com)
Service Pack 3 出すとサポート期間延ばさないと逝けないし
Service Pack としては出す気ないんだろうなぁ・・・。
35:NAME IS NULL
08/04/18 17:11:34
1行ずつ消していけばよい
36:NAME IS NULL
08/04/18 19:14:43
>>24
SSISを実行するSQL Server Agentのジョブを作成して、
sp_start_jobで作成したジョブを実行すればできると思う。
37:NAME IS NULL
08/04/19 01:03:17
>>26
deleteのコストは高い。
論理削除ではどう?
38:NAME IS NULL
08/04/19 01:10:10
2億件のレコード数をいっそう増やすのか
39:NAME IS NULL
08/04/19 09:23:22
インデックスを付けるとどうかな?
10分の1まで絞れるなら少しは効果が出そうだけど。
40:sage
08/04/23 17:17:00 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
08/04/23 17:44:41
>>40
express edtionの場合デフォルトのサーバー名がインスタンス名付きになってるから
それが足りないのでは。
Data Source=test\sqlexpress
Data Source=.\sqlexpress
42:40
08/04/23 17:59:30
Data Source=test\sqlexpress
にしたところ、
このログインで要求されたデータベース "testdb" を開けません。ログインに失敗しました。
ユーザー '(ドメイン名)\(ユーザー名)' はログインできませんでした。
というエラーメッセージに変わりました。
少しだけ進展したような気がしますがどう対応していいかわかりません。
ご存知の方いましたら教えてください。
あと、sage間違いすいません。
43:NAME IS NULL
08/04/23 18:46:30
>>42
DBにアクセスするプログラムをVSのウイザードで自動生成して出来たものを調べるのが近道。
接続文字列は*.exe.configにあるはず。
44:42
08/04/23 19:04:10
すいません、自動生成の仕方を教えてください;
45:NAME IS NULL
08/04/23 21:07:51
>>44
ネットワークでつかえるように設定しなきゃダメよ。
localならいけるんでしょ?
46:NAME IS NULL
08/04/23 21:32:43
暇だから、SQL Server 2008 新機能紹介 全国弾丸ツアー 2008 とやらに行こうと
思ったら、既に東京会場は満員だった orz
とりあえず追加開催に期待するか。
47:NAME IS NULL
08/04/24 09:28:38 TQpLkKjm
>>40 >>42
データベースにユーザ追加してないんじゃないの。
Windows 認証でも Windows Server にユーザ追加しているからって
データベースにユーザ追加していなかったら接続できない。
使い始めの頃それでずいぶん悩んじゃったなぁ。
48:NAME IS NULL
08/04/24 14:10:18
テーブルにインデックスを貼ったらSelect文の速度が
早くなったんですが、一部のSQLで逆に遅くなる現象がでました。
インデックスを貼って遅くなる原因は何が考えられるのでしょうか?
49:44
08/04/24 16:28:55
>>45>>47
指摘された点を見直したら出来ました!
ありがとうございました。
50:NAME IS NULL
08/04/24 18:13:59
>48
一部のSQLってのがUPDATEとかINSERTなら
インデックスも更新してるから遅くなることがあるかも
51:NAME IS NULL
08/04/24 19:44:51
>>48
INDEXが効果を発揮するのって、最低でも100件以上の行があるイメージがある。
INDEXを付けたせいで遅くなる操作もいくつかあるよ。
52:NAME IS NULL
08/04/24 23:39:52
>48
実行プランがどうなってるかチェックしたら?
使ってほしいインデックスと違うインデックスが使われたりとかね。
53:NAME IS NULL
08/04/24 23:58:15
取得件数が全レコード数の半分とかなら
フルスキャンの方が速い
54:NAME IS NULL
08/04/25 01:22:54
今月から仕事でSQLserverさわってるんですが
それ関連の資格を取るなら何がおすすめですか?
55:NAME IS NULL
08/04/25 07:03:35
>>54
普通免許
56:NAME IS NULL
08/04/25 11:46:32
トラブル時に客先へ急行するためですねw
57:NAME IS NULL
08/04/25 12:40:03
的確だなw
58:NAME IS NULL
08/04/26 13:04:20 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
08/04/26 15:21:55
鯖側でADOが使えるならネットワークの設定。
デフォルトはポートが閉じられている。
XPの方は誰かが開けたんだろう。
60:NAME IS NULL
08/04/26 19:36:39 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
08/04/26 20:46:48 Ra21+QYi
Windows 2000/XP Professional にインストールできるのは
Express/Developer だけのはずですが。
62:NAME IS NULL
08/04/26 20:50:51 Ra21+QYi
と思ったが調べてみたら
Windows 2000 Professional Edition SP4 も動作対象に入ってるのな。
間違って記載されてるんじゃないのか、これ
63:NAME IS NULL
08/04/27 06:37:37
WindowsInstallerを最新にしてみるとか。
Enterprise Editionをクライアント系のOSに導入するとライセンス上の制約で
いろいろ出来ないことがあるから、パンフレベルでは動作リストに載ってないことが多い。
64:NAME IS NULL
08/04/27 10:11:52 0RcOeyfW
製品版のシステム用件にはクライアントOSははいってないんだけどね、
なぜか評価版では入ってるんだよね。
65:NAME IS NULL
08/04/27 23:04:09
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
08/04/29 06:48:18 hY5+XXEW
SQL鯖2005でイースターエッグが発見されたようです。
ビルゲイツ→ビ・泣Qイツ
URLリンク(www.atmarkit.co.jp)
67:NAME IS NULL
08/04/29 12:01:10
>>66
文字化けした場所は違うけど再現した
9.0.3159
68:NAME IS NULL
08/04/29 12:38:18
マジで?
連休明けに会社のマシンで試してみよう。
69:NAME IS NULL
08/04/29 13:51:49
>66
text型をレプリケーションすると
4000バイトごとに2バイト文字が境界に来ると半分\0に置き換わる現象を思い出した。
70:NAME IS NULL
08/05/02 21:18:36
初心者ですがSQL serverはXPにインストールできますか?
71:NAME IS NULL
08/05/02 21:32:00
無料のなら出来る
72:NAME IS NULL
08/05/02 21:51:22
永遠無料版?それとも試用版かな?
レスサンクスです
73:NAME IS NULL
08/05/02 22:16:18
システム用件ぐらい自分で確認しなよ。
URLリンク(www.microsoft.com)
XP って言ったって、HOME と Professional (etc...) じゃ違うんだし。
74:NAME IS NULL
08/05/03 04:09:36
HOMEにインストールできなかったのか
75:NAME IS NULL
08/05/03 12:03:10
Express Edition ならできるだろ?
それ以外の Edition を HOME にインストールしたがる奴はかなり珍しいと思うが。
76:NAME IS NULL
08/05/03 18:01:15
EEなんかで満足できるかよ
77:NAME IS NULL
08/05/03 18:15:07
さすがにその餌じゃつれないと思うな。
78:NAME IS NULL
08/05/06 18:08:34
the FILESTREAM Attributeについての情報は?(日本語で)
79:NAME IS NULL
08/05/09 11:52:45 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
08/05/09 13:02:22
>>79
ProviderとしてSQL Native Client(SQLNCLI)を指定すれば大丈夫なはず。
あと注意点としてConnectionTimeoutとCommandTimeoutがデフォルトのままだと
フェールオーバーする前にタイムアウトしたりする。
81:ビ・泣Qイツ
08/05/09 21:05:07
>>66
はァ?
何か問題でもあるのか?
俺は半角文字さえちゃんと扱えれば何も困らんよ
82:NAME IS NULL
08/05/09 21:30:24 qZP+UMRS
>>81
ジャアハンカクデカキコメヨ?
83:ビ・泣Qイツ
08/05/10 01:28:19
マイクロソフト製品は勘定系でSQL鯖を使ってしまうような
命知らずな日本人デバッガー(奴隷)により支えられています。
84:NAME IS NULL
08/05/11 00:43:04 LC/4+jXW
質問です。
今、SQLSERVER2005の入門書を読んで、VBでデータベースを扱う簡単なアプリを
試作しています。スタンドアローン環境です。
一つのデータベースに複数のテーブルを作ったのですが、これらはファイルとしては
どこに保存されているのでしょうか?
将来別のPCに移植する場合、アプリだけでなくこのDBファイルも移動したいのですが、
実体がどこにあるのかわからず不安です。
お願いします。
85:NAME IS NULL
08/05/11 01:07:17
c:\program files\microsoft\sql server\..\data
こんなかんじだった
86:79
08/05/11 10:57:20
>>80
うまく動きました。
どうもありがとうございました。
87:NAME IS NULL
08/05/11 10:57:26
>>84
> 一つのデータベースに複数のテーブルを作ったのですが、これらはファイルとしては
> どこに保存されているのでしょうか?
SSMS (SQL Server Management Studio) 使ってるなら、データベースのプロパティの
どっかで見れたと思う。
SSMS 使ってないなら、
select * from sys.master_files
とか
select * sys.database_files
で見れるかも。(手元に実機がないので試せない。)
参考: URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
あとデータファイル移動するなら、アタッチ/デタッチについて調べておくと幸せになれ
るかも。
参考: URLリンク(msdn.microsoft.com)
88:NAME IS NULL
08/05/11 12:05:24
>>85>>87
ありがとうございました。
とっても役にたちます!
89:NAME IS NULL
08/05/12 18:27:03
>>66-67
MSSQL2000 に付いてきたクエリアナライザで実行したら問題なかった。
Management Studio の不具合な気がする
90:NAME IS NULL
08/05/13 16:56:43 esOdpdnX
asp.net で表示させても問題ないから
Management Studio のバグやね。
91:NAME IS NULL
08/05/13 18:44:55
Management Studioの日本語対応は糞すぎ
92:NAME IS NULL
08/05/15 16:58:56 DjfxOw0v
今動いているSQLServer2005のCAL数を調べるには
どこを見ればいいですか?
CDROMメディアしかないので箱や紙ではわかりません。
93:NAME IS NULL
08/05/16 01:55:02 fed44/a3
Reporting Servicesの構成ツールで名前付インスタンスの場合、
仮想ディレクトリを、[ホスト名$別名]で作成できません。
どうしたらいいでしょうか。。。
94:NAME IS NULL
08/05/18 00:26:11 rZA4K5Y5
2000同士でリンクサーバしてるんですけど
リンク先のテーブルにロック掛けようとしたら
「リモート データ ソースのインデックスまたはロッキング ヒントを指定できません。」
なんてエラーが出ます
ロッキングヒントを指定できません・・・・
と言うことは、リンクサーバ経由でのテーブルロック・・・どころかロック自体無理と言うことですか?
トランザクションの中に入れちゃってるから他のパスでロックするわけに行かないし・・・
めんどくさいトランザクションのかけ方をやっと見つけ出したのに
95:NAME IS NULL
08/05/18 17:56:57 0NqsCSCu
分散トランザクションなんて
マイクロソフトに作れるわけないじゃん。
96:NAME IS NULL
08/05/21 17:18:18
Oracleで日付型のデータを文字列yyyymmddで取り出したい場合
select to_char(dt, 'yyyymmdd') from tt;
などとしますがSQL Serverの場合はどのようにしたらよいでしょうか?
97:NAME IS NULL
08/05/21 20:02:11
>>96
CONVERT
98:NAME IS NULL
08/05/21 21:58:42
しかしこの CONVERT のスタイルを数値で指定すると言う前近代的な仕様は
何とかならんもんかな。
せめて Excel 互換にするとかしろよ。
99:NAME IS NULL
08/05/21 22:16:24
教えてください
javaプログラムからインサート文でデータを追加しているんですけど
追加したデータがテーブルの一番最後の行じゃなと思っていた動きができません
今のところ偶然そうなってるので問題なく気にしてなかったんですけど
というか、最後に追加されものだと疑問を抱かなかったんですけど
今日カタカナの前にアルファベットかなにかをいれると
カタカナの行の前に挿入されました
どの列のせいか分かりませんが
なにか挿入される優先順位があるのでしょうか?
100:NAME IS NULL
08/05/21 22:37:34
>>99
やべー
101:NAME IS NULL
08/05/21 23:18:32
>Excel 互換
ここ、笑っていいんだよね。
102:NAME IS NULL
08/05/21 23:20:07
>>99
INSERTによる行の順番は忘れろ。
欲しい行の順番は ORDER BY 等でなんとかするのがSQL、
挿入の順番などを考えていたら、運用でつまずく。
103:NAME IS NULL
08/05/22 00:16:21
>>102
マジですか?
ORDER BYっていうのはjavaでも使えるんですか?
そのままSQL文をjavaプログラムに書いても使えないですよね、スレ違いすみません
詳しく説明させて下さい
今オークションチックなものを作っていて
決まりははいんですけど、ID列&PS列は全部バーチャルで半角英数で登録しています
他に手動でインクリメントしていくnamber列があります
インサート時テーブルの行数を取得して、行数+1をnamber列に入れるといったものです
他に入札金額を入れるmoney列
それとインサートした時間をString型で入れる列があります
(でもこの時間はちょっと変更する可能性があります)
どの列が利いているのか分かりませんが
money列が一番金額の高い人が最後の行になるようにして入札テーブルは問題なく動いてます
でも今日他の会員登録テーブルにカタカナを入て
その後他の会員をインサートしたら、最後から2行目に挿入されました
それでインサート文は最後の行に挿入されるんじゃないことに初めて気付かされました
今まで不具合なく動いていたオークションテーブルにも
不具合が生じるじゃないかと心配になって質問しました
数字が大きい順とか何か単純な決まりはないのでしょうか?
104:NAME IS NULL
08/05/22 00:23:55
>>103
SQLとかの前にDBっていうものを勉強したほうがいい。
ファイルじゃないんだから順序なんて存在しない。
105:NAME IS NULL
08/05/22 00:28:14
>>103
ついでに言うなら、あなたの懸念している通り、今うまく動いているのはただ単なる偶然です。錯覚です。
不具合はおそらく出ます。心配する暇はないです。
すぐに改修したほうがいい。仕事でしてるのならね。
順序つけるのは>>102さんの言うとおりORDER BY を使えばいい。
多分それで全てが解決はできないけどね。
106:NAME IS NULL
08/05/22 00:52:32
>>101
>> Excel 互換
> ここ、笑っていいんだよね。
実際 Excel は無茶苦茶高機能だから、完全互換は無理だと思うが
'YYYY/MM/DD' 関連ぐらいは、サポートしてくれ。
'YYYY/MM/DD' なら、まだなんとなくわかるけど、111 だとヘルプ
見ないとさっぱりわからん。
>>103
> 他に手動でインクリメントしていくnamber列があります
> インサート時テーブルの行数を取得して、行数+1をnamber列に入れるといったものです
DB なに使ってるのか知らんけど、たいがいの DB に連番を入れる機能があるからそれ使っ
たほうがいい。その列を何に使ってるのかわからんけど、複数人がほぼ同時に入札したら
同じ番号がつくかもしれないよ。
>>104
> SQLとかの前にDBっていうものを勉強したほうがいい。
激しく同意。
107:NAME IS NULL
08/05/22 00:57:17
まーねー、「INSERT順でデータがあるじゃん」という考え方は分かるんだけどね~
108:NAME IS NULL
08/05/22 01:02:42
仕事じゃないことを祈る
109:NAME IS NULL
08/05/22 01:06:46
その時わたしは気づいたのです。
この列名が、業務のPRIMARY KEYであることに…
第1部・完
110:NAME IS NULL
08/05/22 01:25:14
いくら待っても第二部は来ませんでした。 来ませんでした。
111:NAME IS NULL
08/05/22 02:16:08
>>105
このレベルだと外注した方がマシだろ
それと、突っ込み所満載すぎてスルーされてるがnamberってなんだよ
112:NAME IS NULL
08/05/22 07:52:25
103
皆さん詳しく教えていただきありがとうございました
今学校でjavaとweb3構築の勉強をしていて課題でホームページを一つ提出するのですが
そうだったんですが、偶然だったんですね
かなり落ちこみますた、勉強しますね
でも皆も妖しげなホームページなので、いや止めたほうがいいですね
提出して動かなかったら嫌ですもんね
113:NAME IS NULL
08/05/22 08:58:46
お前、その課題は本当にDB必要なのか?w
114:NAME IS NULL
08/05/22 10:21:08
javaでsqlserverってのもねー
mysqlとかじゃないの?
115:NAME IS NULL
08/05/22 10:47:40
行の順番について上にあったけど、
DB作る上で列の順番はしっかり考えておいた方がいい。
一度作ってからどんどん項目を増やしていくと、
関係のある列項目が飛び飛びだったり、まぎらわしい列項目ばかりが並ぶことになる。
たぶん「正規化」で教わることだと思うけど、
今現在そういうシステムに直面して、嫌になってきた。
116:NAME IS NULL
08/05/22 10:56:22
列の順番なんて後でいくらでも変えられるじゃん
117:NAME IS NULL
08/05/22 11:40:56
仕様書で決まってるから、自分1人では変えられない…
118:NAME IS NULL
08/05/22 16:29:00
久しぶりにSQL Serverをやるんだけど、もうすっかりわすれてる・・
DATENAMEで、mm出すと0埋めの二桁で、dd出すと1桁の時0埋めされない文字が
でてくるのって前からの仕様だっけ?
たとえば1月だと01のようにゼロ埋めされるけど、
1日だと1のようにゼロ埋めされない文字が帰ってくる。
119:NAME IS NULL
08/05/22 17:10:57
103
皆さん、感謝感激雨霰です、マジ涙出そう
order by成功しました
まだテスト用プログラムでしか試してないんですけど
金額が高い順に手動で連番ふってるので使えると思います
今日一日気分悪かったけど、やっと晴れました
中間は変な並びでも、最後の入札履歴だけはちゃんと並んでる状態にできそうです
ありがとうございました
120:NAME IS NULL
08/05/22 17:30:58
>>119
もうちょっとやり方があると思うぞ?
まず、そのテーブルでのユニークな数字は、IDENTITY属性で指定できる
わざわざ行数+1なんて入れてたら同じ数が入らないとも限らない
順序の項目を参照→URLリンク(www.sqlpassj.org)
金額が高い順に連番をふるんじゃなくて、入札(?)テーブルに
金額とユニークな商品IDを登録して、WHERE 商品ID = @商品ID ORDER BY 金額 DESCすれば
金額順に表示される。
基本的には、どのテーブルにもIDENTITY属性のID列、行が挿入されたときのInsertDateTime列、
行が更新されたときのUpdateDateTime列、行が削除されたことを表すIsDelete列を作っておけば
後にいろいろ対応できる。
とマジレスしてみる。
121:NAME IS NULL
08/05/22 17:42:56
>>120
お遊びなんがからマジレスするな
122:NAME IS NULL
08/05/22 21:32:20
>>120
論理削除は色々と意見はありそう。
InsertとUpdateの更新日付をわける意味は?
123:NAME IS NULL
08/05/22 21:40:15
>>122
論理削除は、マスタ関連なんかで参照される可能性があるけど
表示時間が長くなるから一覧には表示したくないとか、
後からわがままな要望がでてくる可能性を考慮。
Updateは同時実行制御なんかに必要で、
Insertは入力補助のために過去何日間に入力されたものの一覧を出せとか、
ある特定日に入力したものだけ一覧で出せとかを考慮して。
124:NAME IS NULL
08/05/22 23:16:27
ああ 楽観的ロックね。
125:NAME IS NULL
08/05/23 00:10:45
バーボン、ロックで。
126:NAME IS NULL
08/05/23 00:13:18
113
121さんの言うとおり仕事でもないのにすみませんでした
120さんもマジレス感謝です、要らない列は省きます
ここの人達は皆親切ですね
127:NAME IS NULL
08/05/23 17:55:44
考えることで自分の知識を整理・強化してるんだよ
128:NAME IS NULL
08/05/23 23:20:17
ストアドプロシジャの中で変数に値を代入するのに 2つの方法があるよね
1. set を使う
2. fromやwhereのない select を使う
俺はいつも 1. で、2. を使う理由が思いつかないんだけど、2. の利点って何かある?
129:NAME IS NULL
08/05/23 23:40:51
↑代入文の右辺に、演算子や関数のほかは定数と@変数しか出てこない場合です
130:NAME IS NULL
08/05/24 02:12:13
>>128
表が変わっても、正しそうな値を拾ってこれる。
131:NAME IS NULL
08/05/24 03:38:36
SQL CLRを利用すれば、そんな問題からすべて解放されるぉ
132:NAME IS NULL
08/05/24 13:13:30
その代わり違う問題をいっぱい抱えそうだけど。
133:NAME IS NULL
08/05/24 16:23:11
なんか不具合とかある?
SQLでもいいんだけど、.NET使えれば使えたで便利だから
ストアドでSQL CLRを使おうと思ってたんだけどさ
134:NAME IS NULL
08/05/24 17:33:40
いや別にチャレンジングゥ~な君を止める気はさらさらないから。
人柱よろしく。
135:128
08/05/24 18:20:27
>>130 レスサンクス&解説お願いしていいですか?
表が登場しない、set でもできるし select でもできる代入を、
あえて select でやることの利点があれば知りたいです。
136:NAME IS NULL
08/05/24 19:00:26
>>134
こういう保守的な技術者が日本の技術を悪化させてると思う
137:NAME IS NULL
08/05/24 20:01:25
枯れた技術を使うのは基幹システムの基本
新技術をいきがって使うのは社会的に重要でないシステムにしろよ
138:NAME IS NULL
08/05/24 20:17:33
関数でSQL CLR使ってるよ
正規表現をどうしても使いたい場合
ファイルの削除や存在チェックをする場合
WMI APIを使いたい場合
ところでSQL Server2008正式版って今年中にはでそうなの?
139:130
08/05/24 20:39:24
>>135
SQL Serverは触ったことないので、単なる勘です。
Oracleのストアドプロシージャで散々な目にあったので、RDBMSで共通のSQLで表現できればそちらを採用するってだけです。
参考にならなくてごめんなさい。
140:NAME IS NULL
08/05/24 21:06:29
Oracleはなんであんなにバグだらけなんだろう。
141:NAME IS NULL
08/05/24 21:38:05
>>136
MS の言う新技術に何度となく裏切られてるから、導入を躊躇するのは当たり前。
いきがって導入するのは、学習能力のない奴だろ。
安定したら、検討するよ。
142:NAME IS NULL
08/05/25 00:33:47
枯れた技術とかいいながらSQL Serverを使用している137、141は矛盾
なんでISAMとかBtrieveとか使わないの?池沼?
143:NAME IS NULL
08/05/25 00:40:09
>>139
サンクス、了解しますた
さーて、MSDE 2000 でまた遊ぶか
144:NAME IS NULL
08/05/25 00:45:10
>>142
技術者ってのは面倒を避けるために、適当な理由をつけて、問題を回避する傾向が強いからね
んで枯れた技術とか、最新の技術は・・とか理由をつけて言い張ってるだけだから気にすんな
145:NAME IS NULL
08/05/25 00:47:53
でもOracleのANSI SQL対応がバグだらけなのを見ると
枯れるのを待つのはありな気もする。
146:NAME IS NULL
08/05/25 04:04:25
ならば訊こう。枯れたの定義は?
147:NAME IS NULL
08/05/25 04:49:35
枯れた枯れてないの定義なんて、使用する側の自己満足に過ぎないでしょ
枯れる枯れてないに関わらず、どうせ問題が発生したらメーカのせいにして責任は負わないんだから
責任を追う必要がないのに、新しい技術を導入しないのは、単にそれを導入したくないというだけの話
導入したくない理由は? それを理解していないから=技術者曰く「枯れていないから」
148:NAME IS NULL
08/05/25 09:57:13
2chでもう枯れてるよねーという話題になったとき枯れてる。
あれこれバグ報告があるうちはやめたほうがいいね。
でもOracleはバグの回避策を掲示板等へ書き込むことすら
禁止してるからとんでもない糞
149:NAME IS NULL
08/05/25 10:18:00
同業他社製品との比較は別スレでどうぞ。
150:NAME IS NULL
08/05/25 12:50:12
>>142
> なんでISAMとかBtrieveとか使わないの?池沼?
枯れてりゃなんでもいいわけじゃない、必要な機能があることが前提なんだが
そんなこともいちいち説明しないのいけないのか?
まっ、反論したかっただけなんだろうけど。
>>146
枯れたかどうかなんて、自分の経験と周りの評判だよ。>>147 みたいに責任取
らなくて済むなら、そんなの気にせずにばんばん導入するのもありだろうけど。
>>148
サポート費用稼ぎたいんだろうけどな。
サポート費用も高いし、一旦やめてから再度サポート契約しようとすると、
やめた期間の費用+α 払えとか、ほとんどヤ○ザ同然。
151:NAME IS NULL
08/05/25 12:52:03
何この多重問い合わせ
152:NAME IS NULL
08/05/25 16:57:32
>>144
技術者だって仕事でやってんだから金にならん仕事は手間をかけずに片付けたいのは当然だろ。
153:NAME IS NULL
08/05/25 20:32:17 DMMLfmVY
>>138
悪いが、2008って2005と何が違うか
俺に五七五で教えてくれ
154:NAME IS NULL
08/05/26 10:24:31
2008の売りはXML対応と、MS Officeとの親和性だったかな。
ソフトウェア開発環境展で、新バージョンの利点を説明してた。
155:NAME IS NULL
08/05/26 12:08:16
マージ使えるってのは?
156:NAME IS NULL
08/05/26 19:47:52
まじ
157:NAME IS NULL
08/05/26 20:00:19
あとは圧縮バックアップとか
158:NAME IS NULL
08/05/26 22:14:38
今日すげー嫌な汗かいたんだが、XPにSP3適用するとSQL Server 2005の
TCP/IP接続おかしかない?
W2KでテストしてたのをXP SP3に移してみたら、127.0.0.1じゃないと
Windows認証もServer認証も通らない。
SQL Serverインスコし直したら、自分自身からならプライベートIP通る
ようになったけど、他のPCからは通らない。
当然TCP/IPは有効にしたし、Expressなんでポートも1433に固定して、
Firewallも穴開けてます。
なんかすっげー怪しいぜ、というか俺の勘違いでなければ非常にヤバイ。
159:NAME IS NULL
08/05/26 22:26:51
>158
別にそんなことおきてないよ。
SP3だけど普通に繋がってるよ。
160:NAME IS NULL
08/05/28 13:31:10
>>158
Express = 名前つきインスタンスという意味なら、Windows のファイアウォール設定は
sqlservr.exe に対して外部からのアクセスを許可しないと通らないよ。ポートは動的にアサインされるから。
ついでに UDP 1433 もあけないとだめ。SQLBrowser にアクセスして SQL Server が何番ポートで listen してるか
問い合わせるから。
それでも駄目なら netstat -ano してちゃんと listen してるか確認するのが次のステップだな。
161:NAME IS NULL
08/05/28 20:51:15
>>159
えんやこらやってServer認証は通るものの、Windows認証は未だ
通らず。
去年の末頃は同様の構成でつながってたのにわけからん。
ドメイン管理のない環境でWindows認証使うなという神様の言う
とおりか?
ODBCにファイルDSN使ってるシステムが動かんのも偶然であって
ほしい。
>>160
いやいや、当然そのあたりは全部確認済みですよ。
Firewall切っても動かないぐらいです。
162:NAME IS NULL
08/05/28 22:32:50
>>161
HOSTSファイルは?
163:NAME IS NULL
08/05/28 22:46:00
>>128
複数の変数に同時に代入できる
164:NAME IS NULL
08/05/28 23:04:33
>161
Windows認証は試してなかった、後で試してみるよ。
165:NAME IS NULL
08/05/29 00:25:29 On8Unush
最近T-SQLに興味を持ち出したのですが、
帳票出力等のプログラムからSQLでデータを取得する場合、
テーブル値関数使うという判断はいかがなものでしょうか?
割と便利な気がしたのですが、実用した人の経験談とかも聞いてみたいなと。
自分の選択肢だと
1.ストアドでワークテーブルに加工してInsert⇒レポート側でベタSELECT
2.Viewをいくらか作ってそれを元に帳票向けに加工したSQLで取得
3.レポート側のプログラムで複数テーブル参照しまくりの力技。
4.テーブル値関数(最近知った)でそのままSELECT(xxx,xxx,xx) FROM 関数名
ほかにも方法はあると思いますが、少なくともVIEWよりはテーブル値関数のが
管理的に便利な気がして・・・
ただ、障害発生や拡張とか考えたとき、解析・コーディングに負担あったりするとか
いろいろ気になります。
気持ち的にはやってみたい気がするのですが、前例やその他経験者の少なさから
興味だけで終わりそうな予感。。。
166:NAME IS NULL
08/05/29 21:04:25
>>163
あ、明快ですね。気がつかない俺がバカだった、サンクス
167:NAME IS NULL
08/05/31 00:39:24
おまえら弾丸ツアーいく?
168:NAME IS NULL
08/05/31 00:55:34
行くよ~。
半分は息抜きだけどね。(w
169:NAME IS NULL
08/05/31 09:24:19
このページの内容は役に立ちましたか?
1 2 3 4 5
非常に低い 非常に高い
170:NAME IS NULL
08/06/01 00:47:25 AcT0qzva
>165
テーブル値関数で実装したが、今のところ特に問題ないよ
やってることは1.ストアドでワークテーブル~ みたいなもん
ただ、where条件は中に入れないと、データ件数にもよるけど、
パフォーマンスが悪くなってしまう
×select aaa,bbb from t_func(111,222) where ccc=333
○select aaa,bbb from t_func(111,222,333)
それと、Access2003からテーブルリンクできなかったと思う
171:NAME IS NULL
08/06/02 01:20:57
SQLServer2008CPT2月版さわってるんだがManagementStudioでSQL書いたらインテリセンスが利いて驚いたぜ。
172:NAME IS NULL
08/06/02 16:17:24 gBCGUa8J
>>171
T-SQLのデバッグできるようになった?>ManagementStudio
自分は当分インストできねーーー
173:NAME IS NULL
08/06/02 20:52:27
>>172
どういうこと?
174:NAME IS NULL
08/06/03 00:05:48
ブレークポイント設定したり1行ずつ実行したり変数に何が入ってるか確認できたりってことでは
175:NAME IS NULL
08/06/03 01:56:45
ストアド?
176:NAME IS NULL
08/06/03 22:36:01
あと再帰なんかも途中の結果を見たい時がある。
弾丸ツアーで聞いてみようかな。
177:165
08/06/03 23:13:34 5E6/z6Zz
>170
>×select aaa,bbb from t_func(111,222) where ccc=333
>○select aaa,bbb from t_func(111,222,333)
確かに、関数化の意味なさそうですねw
ためしに速度とか試してみようかなぁ・・・
ありがとうございます。
>それと、Access2003からテーブルリンクできなかったと思う
なるほど。。。ちょっと痛いかも・・・
178:NAME IS NULL
08/06/04 01:16:27 U14zGNqi
JavaからPreparedStatementを使用してSQLを実行した時、
バインド変数を使うと使わない時と比べて圧倒的に
処理速度が低下します。(0.1秒→180秒くらいの差が出る)
この現象の原因としては何が考えられるでしょうか?
また、バインド変数の有無で処理速度が変わる所までは
突き止めましたが、これ以上の原因の切り分け方が有れば
教えてもらえないでしょうか。
よろしくお願いします。
179:NAME IS NULL
08/06/04 09:44:41
>>178
そんなに差が出るものかな?特別なケースの特別な現象かもしれないよ。
回答が欲しいなら、JDBC、OS、DBMSの種類とバージョン、
それから検証が出来るくらいのプログラムソースは示すものだ。
180:NAME IS NULL
08/06/04 12:17:26 pUXBCNvj
SQL-Server2005Express + IISの場合って、ライセンス要るの?
181:NAME IS NULL
08/06/04 14:37:53
>>180
CAL関連の話は複雑なので代理店に確認して欲しい。
SQLServer Express自体の接続に制限はないがOSのライセンスに制限される。
IISはOSにバンドルされているのでこれもOSのライセンスに制限される。
Client OSの場合ピアツーピアに限られるので定型的なアプリとしては使用できない。
Server OSの場合、IIS上のアプリが匿名ではなく認証を使用する場合
CALやプロセッサライセンスが必要になる。
Server OSで匿名接続の場合はOSの価格だけで構築可能。
182:NAME IS NULL
08/06/04 14:45:15 pUXBCNvj
>181 サンクス
Server OSで匿名接続の場合はOSの価格だけで構築可能。
です。
183:NAME IS NULL
08/06/06 22:03:02 oUKZsqUS
SP3はまだか?
2005今だにバグだらけで使い物にならないんだけど…
184:NAME IS NULL
08/06/10 23:14:08
>>178
俺は同じ現象の経験あるな。
とりあえずSQL晒せ。
185:NAME IS NULL
08/06/11 00:01:24
>178
むやみにインデックスを付けていてバインド変数を使ったときのクエリに対する実行プランが
使って欲しくないインデックスを使った実行プランになったりという感じかなと思う。
特にバインド変数を使うとクエリが同じだから悪い実行プランが使い回されて何度やっても同じ状態という感じになるかと。
スペースの有無くらいの違いで違うクエリ扱いされて違う実行プランが使われると突然応答が良くなったりすることもある。
sp_updatestatsを実行して様子を見てみたり、
WITH(INDEX())とかしてインデックスを指定したりOPTION FORCE ORDERとかやってみれば収まるかもしれない。
それにわざと違うインデックスとか指定してみて同じくらいの応答時間になるインデックスを探してみたりとかしてみたりするよ。
プロファイラで見ると使って欲しいインデックスを使って検索していたときに比べてReadの数が妙に多かったりする。
186:178
08/06/12 00:19:28 z6+fGzza
確認が遅れてすいません。環境は以下のとおりです。
SQLJDBC1.0.809.102
WindowsServer2003 SP2
SQLServer2005
[SQL]
SELECT *
FROM TBL1 A,
(SELECT DISTINCT child1, child2
FROM TBL1
WHERE (parent2 >= '1000000000' AND parent2 <= '2000000000')
) B
WHERE (A.child1 = B.child1 AND A.child2 = B.child2)
AND A.parent2=A.child2
上記SQLは1秒以下で実行されますが、
列parent2の1000000000、2000000000をバインド変数にした時は
200秒近く掛かってしまいます。
また、parent2とchild2はそれぞれインデックスが張られています。
他にも出すべき情報がありましたら教えてください。
よろしくお願いします。
187:NAME IS NULL
08/06/12 00:43:59
Distinctと*をやめれ
188:NAME IS NULL
08/06/12 00:45:43
あとはparent2 >= '1000000000' AND parent2 <= '2000000000'をBetweenにかえろ。
189:NAME IS NULL
08/06/12 01:50:58
>186
同じクエリをManagementStudioで実行プランを表示で実行してみろよ。
バインド変数を使った方のクエリはプロファイラに表示されたクエリをそのままコピって
ManagementStudioで実行して同じように長時間かかる場合が再現すると状況を確認できるよ。
大抵素直に再現してくれるよ。
多分違う実行プランが表示される気がする。
>188
BETWEENは>=と<=に展開されて実行されているんだよ……
多分差がでることはないよ。
190:NAME IS NULL
08/06/12 02:03:23
1. parent2にクラスタ化インデックスを作る
2. (child1,child2)でハッシュインデックスを作る
3. 結合方法をJoin句に変える
というのはどうなのでしょう?
191:NAME IS NULL
08/06/12 09:28:36
parent1, 2をクォーテーションで囲んでいるということは、まさかvarchar系じゃないだろうな。
numericじゃなければそうした方がいいと思う(そんなはずはないと思うが)。
と、心にもないことを言ってみるテスト。
>>189-190
betweenで速度改善が望めるらしいソースはここにあるけど、もしかして古すぎる情報かな。
ベンダ依存なのかもしれないけど・・・
URLリンク(www.geocities.jp)
192:NAME IS NULL
08/06/12 13:08:17
ADO.NetからSQL-Server2000を使用しています。
ストアドプロシージャに関して質問させてください。
DataAdapter の InsertCommand 用にデータを挿入するストアドプロシージャ Insert1
を作成しました。Insert1 ではストアド Proc2 を呼び出しています。
Proc2 内で select を実行すると呼び出しもとの DataAdapter にその結果セットが
帰ってくるのですが、これを Insert1 で受け取って破棄するにはどうすればいいの
でしょうか。
コードで書くとこんな感じです。
Create Procudure Proc1 as begin
exec proc2 -- ここでproc2の結果セットを破棄したい。
end
Create Procudure Proc2 as begin
-- 何か処理して処理後の結果を返す
select * from table1
end
環境は
VisualStudio 2005 Pro(VB.Net)
SQL-Server 2000 Ent です。
よろしくお願いします。
193:NAME IS NULL
08/06/12 14:53:30
>>186
これは実行プランを比べてみないとわからないね。
ポイントになりそうところは
parent2 >= '1000000000' AND parent2 <= '2000000000'
がおおよそどのくらいヒットするかという点。案外件数が少なくない?
parent2 >= ? AND parent2 <= ? としてしまうとオプティマイザは
どのくらいヒットしそうか予測できないので最適化の判断を誤る可能性がある。
194:NAME IS NULL
08/06/12 14:58:08
仮にネストしたループにプランされてしまっていたら大幅に遅くなるよね。
つまりAに対して1レコードずつ判定を繰り返す。
SELECT * FROM TBL1 A
WHERE A.parent2 = A.child2
AND EXISTS (
SELECT * FROM TBL1 B
WHERE A.child1 = B.child1 AND A.child2 = B.child2
AND parent2 >= ? AND parent2 <= ?)
このSQLはイメージでこれを実行しても別の最適化がされる可能性があるので注意。
195:NAME IS NULL
08/06/13 01:19:43
>191
SQLServerだとBETWEENは展開されるから変わらない。
INが大量のORに展開されてたりもするね。
一般的な話ではBETWEENの方が効率がよくなるのを期待していいはずなのでその情報は間違ってないと思うよ。
196:NAME IS NULL
08/06/13 09:47:16
20年前ならいざ知らず、最近のSQLパーサーは賢いから
小細工せずに素直に書いたSQLのほうが最適化されやすいよね
197:NAME IS NULL
08/06/13 10:44:32
まあね。
198:NAME IS NULL
08/06/13 10:47:09
最後は結局実行プランとにらめっこすることになるね。
プランが不安定になるのはテーブルや制約索引の設計がいい加減なケースが多い。
安易にヒントに逃げないでその辺を見直すのが先決。
上のお題では child2単独の索引をやめてchild2, child1 (順番大事)の複合で索引を作る。
もしTBL1にプライマリーキーがなければ適切なものをつける。
この2つでだいぶ改善するはず。
199:NAME IS NULL
08/06/13 11:15:25
カバードインデックスにする手もある。
create index TBL_IX2 on TBL1 (child2, child1, parent2)
MSSQL2005以降なら付加列インデックスが利用できる。
create index TBL_IX2 on TBL1 (child2, child1) include(parent2)
child2, child1でユニークというわけではないので付加列インデックスにする意味はないな。
200:NAME IS NULL
08/06/13 11:44:24
はじめのパターンのプラン
|--Filter(WHERE:(...
|--Nested Loops(Inner Join, OUTER REFERENCES:...
|--Nested Loops(Inner Join, OUTER REFERENCES:...
| |--Sort(DISTINCT ORDER BY:...
| | |--Clustered Index Scan(OBJECT:....
| |--Index Seek(OBJECT:...
|--Clustered Index Seek(OBJECT...
改良版のプラン
|--Nested Loops(Inner Join, OUTER REFERENCES:...
|--Stream Aggregate(GROUP BY:...
| |--Index Scan(OBJECT:...
|--Index Seek(OBJECT...
Sortがなくなってだいぶすっきりした。
>child2, child1 (順番大事)の複合で索引を作る
と書いたが順番は関係なかったので訂正。
parent2の単独索引も不要。
201:NAME IS NULL
08/06/13 20:29:00
質問しっぱなしで逃げるとかどういう神経してんだ
202:NAME IS NULL
08/06/14 00:26:10
>>192
テーブル変数か一時表で呼び元に返してやればいいんでないか
203:NAME IS NULL
08/06/14 01:48:48 19RmXNyg
2000 STD なのですが質問させてください。
最初のインストール時にはCAL10人分で始めたのですが、ユーザー数が増えたため
追加購入した場合どのように10人から10プラスアルファに変更できるのでしょうか
再インストールしなくてもエンタープライズマネージャから変更可能だと思いますが
解決法が見つかりませんでした。
よろしくお願いいたします。
204:NAME IS NULL
08/06/14 07:37:53
なんでライセンスを購入したところに聞かないの?
205:NAME IS NULL
08/06/14 16:39:39
>>201
死ぬほど忙しくなってインターネットをやる時間すらなくなってしまったんじゃないかな?
206:NAME IS NULL
08/06/15 22:32:42
ストアドプロシージャで、xml型のパラメータ受け取ってsp_xml_preparedocumentで
展開してから一括でINSERTしてましたが、存在チェックしてからINSERTする必要が
出てきたので、展開されたテーブルの1レコード毎にチェックしたいのですが、
どのようにすべきでしょうか?
207:NAME IS NULL
08/06/15 23:59:04
>>206
何の存在をチェック?
NOT INじゃダメなのか?
208:NAME IS NULL
08/06/16 00:24:11
一意制約違反を起こしたらrollbackすればいい
209:206
08/06/16 08:54:16 YabEVWOQ
やりたいのは一意制約違反の無い行のみ追加したいのですが、
ロールバックすると全てキャンセルしちゃうから1行ごとに
チェックするしかないのかなぁと…
210:206
08/06/16 10:24:40 YabEVWOQ
カーソルを使って思った処理が出来そうです。
失礼しました。
211:178
08/06/19 00:44:01 VBzYbTdU
多くの回答を頂いたにも関わらず御礼も言えないままで申し訳ないです。
実行プランを出してみましたが、ご指摘の通りバインド変数の
有無で大きく内容が異なりました。
バインド変数有りの場合、無しと比べて実行プランの長さが倍ほどになり、
IndexScanという処理が2回程現れます。(無しでは1回も現れません)
頂いたアドバイスを一つ一つ試したいのですが、週末からプロジェクトの
方が慌しくなり、あまり手が付けられていません。
落ち着いたらまた経過を報告させて頂きたいと思います。
ご回答頂いた皆様、どうもありがとうございました。
212:NAME IS NULL
08/06/21 20:03:15 xziLRgkp
MERGE早く使いたい!! (2008から入るらしいが・・・)
SQLServer2005上で↓を効率よく実現する方法教えて!
※参考(URLリンク(www.shift-the-oracle.com))
MERGE INTO USER_MASTER
USING (
SELECT
'0099' "USER_ID",
'入力した名前' "USER_NAME",
'0010' "DEPT_NO"
FROM DUAL
) phantom
ON (USER_MASTER.USER_ID = phantom.USER_ID)
-- または
-- USING DUAL ON (USER_MASTER.USER_ID = '0099')
--
-- 既存レコードの更新
WHEN MATCHED THEN
UPDATE SET
USER_NAME = USER_NAME || '(更新)',
MODIFIED_ON = SYSDATE
-- 新規レコードの作成
WHEN NOT MATCHED THEN
INSERT
( USER_ID, USER_NAME, DEPT_NO )
VALUES
(phantom.USER_ID, -- or '0099'
phantom.USER_NAME,-- or '入力した名前'
phantom.DEPT_NO ) -- or '0010'
213:NAME IS NULL
08/06/23 21:10:32
このソフトを熟知している方が多そうなので、
こちらにて質問させて下さい。駆け出しのネットワーク管理者をやっております。
パケットをキャプチャしているとICMP及びTCP接続パケットを大量に他NWに
投げている端末がありまして、確認するとsqlblowser.exeがTCP接続の原因の様なのです。
SQLServerを使用した事が無いのですが、
このアプリはICMPを投げた後にTCP接続するような動作をデフォルトで行うのでしょうか?
214:NAME IS NULL
08/06/23 21:11:08 AOnhapfM
すんません。あげておきます…
215:NAME IS NULL
08/06/24 13:53:50 BT1PbFhk
>>213
SQL Server 構成マネージャ > SQL Server 2005 のサービス
で SQL Server Browser 立ち上がってない?
#多分それでは無いかと・・・
216:NAME IS NULL
08/06/24 17:08:58
>>213
SQL Server Browserは、ご近所のSQL Serverを探して一覧を作成するのが
お仕事なので、可能性はあるが、キャプチャまでしたことない。
止め方は>>215のところで止めれば良いので、一度やってみては。
217:213
08/06/24 21:57:30 BwCyEnPQ
>>215,216
お二方共、有力な情報ありがとう御座います。
さっそく明日に該当サービスを停止しても業務に支障が無いか確認致します。
ありがとう御座いました。
218:NAME IS NULL
08/06/25 00:14:30
>>217
SQL Server Browser ってクライアントからのアクセスを
受け付ける役割もあるので、問題の端末がサーバ用途の場合、
サービスは止められないかもです。
パケットを投げるのがまずいのであれば、サービスを止める代わりに
アウトバウンド通信をブロックするとかどうですか?
219:NAME IS NULL
08/06/25 00:32:00
>>218
Oracleのリスナーと違ってアクセスを受け取る役割はないような。
可変ポートにしてない限りはいらない。
220:NAME IS NULL
08/06/25 00:35:02
IA64で性能でねぇ。。。
221:218
08/06/25 08:32:16
>>219
ずっと勘違いしてましたorz
ありがと。
222:NAME IS NULL
08/06/25 09:34:24 D8c5ROxn
>>219
クライアント:ポート:1434へアクセス(UDP)
SQLSV:->TCP/IP ポートまたは名前付きパイプを返す
クライアント:->返された、TCP/IP ポートまたは名前付きパイプでアクセス ですか
#まぁHelpを嫁ということですね
#このあたりは2008で変わるような記述をどこかで見たような
#>Oracleのリスナー
#昔だとfork() だろうけど、今は何だろう?
223:NAME IS NULL
08/06/25 18:51:50 JWkEO9dM
sql server2000でトランザクションログから更新sql全文を取得することはできますか?
oracleだとlogminerのような機能があるけど
224:NAME IS NULL
08/06/25 18:57:56
海外のサードパーティ系ツールであるそうだが標準ではないっす。
ログは物理操作だけで論理操作を記録しないこともあるから、
全部は取れないのではないかと思う。
225:NAME IS NULL
08/06/26 20:01:18 SvFJj1W/
>>224
ありがとです
サードパーティ系ツール名がわかれば教えてタモレ
226:NAME IS NULL
08/06/27 00:44:29
どういう用途に使いたいのか次第だろうけど、
プロファイラでクエリを全部取得するのじゃ駄目なんでしょうか?
一気に大量に来ると溢れるけどね。
227:NAME IS NULL
08/06/27 09:17:22
>>225
ググれよ!それくらい
つ URLリンク(www.vivouac.co.jp)
228:NAME IS NULL
08/06/27 11:02:05
>>225
自分が知っている範囲では、Log ExplorerとかSQL Log Rescueとかかな。
229:NAME IS NULL
08/07/02 10:15:03 h4L3xO4O
NOLOCKヒントってUPDATEの更新前行と更新後行を
両方同時に読んじゃうの?
これが本当ならダーティーリードするだけとか
そんなレベルの話じゃすまないんだけど…
URLリンク(oshiete1.watch.impress.co.jp)
230:NAME IS NULL
08/07/02 12:54:01
SQL Server2008で空間系の検証を行っています。
が、どうも空間インデックスが効いていないような感じです。
同じような境遇の方いらっしゃいますか?
数十万件のGeometry型を含むテーブルに対して、
次のようなクエリーを実行させると20秒程かかりかなり遅いと感じています。
>SELECT Geom.STAsText() FROM SpatialTable with(INDEX = SpatialIndex) WHERE Geom.STIntersects(@Data) = 1
実際に吐き出されるレコードは数件です。
@Data はPOINT()からSTBuffer()して作成したポリゴンです。
空間インデックスは作成出来たので期待していたのですが、
いざ実行プランを見てみると通常のクラスタ化インデックスが使用されていました。
そこで FROM句 に with(INDEX = SpatialIndex) でインデックスを名指ししたところ、
次のエラーが出ました。
メッセージ 8635、レベル 16、状態 9
クエリ プロセッサは空間インデックス ヒントを含むクエリのクエリ プランを作成できませんでした。
理由: 必要なバイナリ空間メソッドが条件に見つかりませんでした。インデックス ヒントの削除または SET FORCEPLAN の削除を試行してください。
意味がよくわかりません。
実はインデックスの中身が出来ていないのでは、なんて思っています。
SQLの知識は乏しいので八方ふさがりになっています。
何かヒント等ありましたコメントください。
231:NAME IS NULL
08/07/02 18:08:21
>>230は無かったことに。。。
232:NAME IS NULL
08/07/02 21:45:19
>>229
ダーティリードというのはそういうもので、知らぬ奴が馬鹿だ。
リンク先のような事例ではMSSQL2005以降のSNAPSHOT分離レベルを使えということになる。
233:NAME IS NULL
08/07/02 22:35:01
NOLOCKヒントがREAD UNCOMIITTEDと同じダーティリードとわかってない人は多そうだな。
つまり自身もロックをかけないし他のトランザクションのかけたロックも無視する。
コミット前のデータは見えるし、削除してコミットしてないデータは既になくなってるように見える。
インテントロックもかからないから、UPDATEやDELETE/INSERTでレコード物理位置が動いた場合は
両方見えることも両方見えないこともありえる。
NOLOCKヒントをはずせば解決だよん。
234:NAME IS NULL
08/07/02 23:25:06 faA08Ceq
>>223
個別にDELETE/INSERTした場合はともかく、
「UPDATEでレコード物理位置が動いた場合に
両方見えることも両方見えないこともありえる。」
本当にこれがダーティリードの正しい実装ですか?
他のDBMSでも同様の実装がなされているのでしょうか?
235:NAME IS NULL
08/07/02 23:31:49
>>234
> 本当にこれがダーティリードの正しい実装ですか?
ダーティリードだからね
236:NAME IS NULL
08/07/02 23:35:47
そこはDBMS依存だろう。
read uncommittedなんて管理用にアバウトな件数を数えるときに使う程度だよ。
それ以外で使ったのは、dual表作ったときくらい。
fromなしselectが使えないクライアントソフトがあったんで作った。
create view dbo.dual as
select top 1 'x' as x from sys.objects with (NOLOCK)
237:NAME IS NULL
08/07/02 23:41:20
ところでダーティリードの規格ってあるのかな?
ANSIで決まってたりしてないよな。
238:NAME IS NULL
08/07/02 23:43:09
viewにする意味もnolockにする意味もわからない
239:NAME IS NULL
08/07/02 23:47:36
COMMIT前のデータが見えるという仕様のみで、
実装方式により予期せぬ結果が返ってくるかどうかまでは
既定されてなさそうですね。
240:NAME IS NULL
08/07/02 23:51:40
実表をdualにした場合にダミーデータを消したり2件以上にしたりしたときのダメージが大きい。
sys.objectsを使うのはsqlseverに必ずある表で必ず1件以上データが存在し
常に参照されているためキャッシュされている確立が高い。
nolockを使うのは単に共有ロックのオーバーヘッドさえ避けたいため。
とにかく1件取れればよい。
241:NAME IS NULL
08/07/04 00:04:35 HGacSGIp
2008のRC0が出たばかりですがRC1ってのが次に出るの?
242:NAME IS NULL
08/07/04 00:55:47
>>240
どうしてもviewにしたいなら
create view dbo.dual as
select 'x' as x
でいいじゃん。
クライアントの仕様はともかくddl文にもfrom句必須って訳じゃあるまい
243:NAME IS NULL
08/07/04 18:55:18
>>242
それもやったのよ(笑
クライアントソフトは何やってたのだろうね。それもエラーになってた。
244:NAME IS NULL
08/07/16 20:20:43
SP2以降に見つかったバグが既に500件以上あるんだって
早くSP3出しとくれ。
245:NAME IS NULL
08/07/16 22:44:22
以下の条件文①(あるSQLの一部分)を、
②~③の何れかに代えてクエリアナライザ等で実行した場合、
④の場合のみ応答時間が低下する現象が発生しておりますが、
どのような原因が考えられるでしょうか?
アドバイス等ありましたらお願いします。
① where pk1 = '11111'
② where pk1 = cast('11111' as char)
③ where pk1 = cast('11111' as varchar)
④ where pk1 = cast('11111' as varchar(8000))
なぜ varchar(8000)にキャストするかというと、
JDBCのPreparedStatement#setStringにてバインド変数を使用した場合に、
JDBCドライバの内部的には上記④に近いSQLに展開されるためです。
バインド変数の使用によって性能低下が発生したことがきっかけで、
その後に切り分けを実施した結果、上記④での性能低下に行き着いた
次第です。
pk1は、主キーの第一項目で char(5)です。
実行プランは①~④で完全に同一です。
OS: Windows 2000 Server SP4
DB: SQL Server 2000 SP4
JDBC: SQL Server 2005 JDBC Driver 1.2
Java: JDK 1.4
246:NAME IS NULL
08/07/17 00:12:36
>245
似たようなことだが、C#で空文字をパラメータで渡すとvarchar(8000)に展開されて仰け反ったけど、
別に遅くなってる様子がなかったので気にしてなかったよ。
247:NAME IS NULL
08/07/19 17:19:16 ORteGkYE
SELECT tbl1.aaa, tbl2.bbb
FROM tbl1
INNER JOIN tbl2
ON tbl1.ccc = tbl2.ccc
WHERE tbl1.ddd = ○○○
AND tbl2.eee = ×××
っていう書き方がなんか嫌いで、いつも
SELECT t1.aaa, t2.bbb
FROM (SELECT * FROM tbl1 WHERE ddd = ○○○) t1
INNER JOIN (SELECT * FROM tbl2 WHERE eee = ×××) t2
ON t1.ccc = t2.ccc
みたいな書き方してしまう。このほうが(俺は)頭の中でわかりやすい。
でもやっぱ最初のSQLのほうが断然速そうに見えるんだが実際どうなんだろう?
(最近はWHERE条件がない場合でも下の書き方をする癖がついてしまった。。。)
248:NAME IS NULL
08/07/19 18:24:36
>>247
実際のところは実行プランを見ないとわからないが、
普通はその辺の書き方でプランに差は出ない。
どちらかのテーブルのCCCに索引があればどちらのSQLでもほぼ一定のプランになるはず。
両方のCCCに索引がない場合はSQLの書き方や統計情報にプランが
影響されやすくなるので差が出るかもしれない。
249:NAME IS NULL
08/07/19 21:22:53
て言うか、わざわざ書き換えるほど下の方がわかりやすいとは思えない。
1人でやってるなら、好きに書けばいいけど、その SQL を他の人がメンテ
する可能性があるなら、一般的な書き方をするべきだと思うよ。
250:NAME IS NULL
08/07/19 21:45:53
>>247
SQLに限らないが特殊なコーディング規約に慣れすぎるのは、
一般的や規約のコードに対する読解力が相対的に低下する
ことになるのでは?
きっと他のプロジェクトメンバは迷惑してるよ。
俺のプロジェクトでやるやつがいたら書き直しだな。
1つのSQLがあたりまえに数千行規模の場合、
期待しない実行プランになるリスクも高くなりそう。
251:NAME IS NULL
08/07/19 22:44:11
数千行規模のクエリとかどれだけ予想外な実行プランが走るか怖くて見たくないぞ。
252:NAME IS NULL
08/07/19 22:45:38
> 1つのSQLがあたりまえに数千行規模の場合、
ネタかバカのどっちかだろ。
253:247
08/07/19 23:34:54
みなさんご意見ありがとうございました。
ちなみに実際のコーディングでは下のような感じで書いてます。
こうするとクエリアナライザで個々のSQLが実行しやすいので。
SELECT t1.aaa
, t2.bbb
FROM (
SELECT *
FROM tbl1
WHERE ddd = ○○○
) t1
INNER JOIN (
SELECT *
FROM tbl2
WHERE eee = ×××
) t2
ON t1.ccc = t2.ccc
今後実行速度等の比較をしてみます。
あと社内のメンバーにも意見を聞いてみようと思います。。。
254:NAME IS NULL
08/07/19 23:37:04
前スペースって消えてしまうんですね。もう一回貼ります。
(スレ汚してスマン。。。)
>SELECT t1.aaa
> , t2.bbb
> FROM (
> SELECT *
> FROM tbl1
> WHERE ddd = ○○○
> ) t1
> INNER JOIN (
> SELECT *
> FROM tbl2
> WHERE eee = ×××
> ) t2
> ON t1.ccc = t2.ccc
255:NAME IS NULL
08/07/20 04:10:22
>>251
実業務のSQLが長くなるのは理由がある。
レコードあたりのフィールドの数がやたら多い。
select のフィールドのリストは縦に書くことが多い。select * は原則禁止。
(ここまでは仕方ない)
プログラム側にキャッシュできるような変更のない小さなマスターまで結合したがる。
(リザルトセットを直接利用するコントロールや帳票ツールのせいというのもある。)
外部キー関係がいい加減でやたら外部結合が必要。気が付くとcoalesceやdistinctを使いまくり。
サブクエリーにまでselect * は禁止!を守ってしまうアホがいる。
これを守れば一千行に手が届くようなSQLが出来上がる。
256:NAME IS NULL
08/07/20 10:38:32
× ネタかバカのどっちかだろ。
○ ネタかバカかアホのどれかだろ。
257:NAME IS NULL
08/07/20 15:11:05
>>255
概ねその通りだが外部結合のところがよくわかりません。
外部キー使うと外部結合が不要になるの?
258:NAME IS NULL
08/07/20 16:20:57
抜けのあるキーと結合するとなると内部結合ではデータが欠ける。
重複のあるキーと結合するとデータがだぶる。
参照整合性でその問題は発生しなくなる。
実際に物理的な制約をかけるかどうかは別にしてシステムとして
その辺の整合性を保障をしないと結合なんて使えませんがな。
259:NAME IS NULL
08/07/20 17:12:27
抜けのあるキーは別にして、キーがダブるって...
どんなレベルの奴が設計してるんだよ。
260:NAME IS NULL
08/07/20 18:53:08
既に大量のデータが存在するテーブルにクラスタ化インデックスを付けた場合、
インデックスの作成やデータの並べ替えなどが行われるのはCREATE CLUSTERED INDEX文を
実行した時ですか?それとも実行自体はすぐに終わってバッググラウンドで処理が継続されてる
んですかね?
(DROP_EXISTINGオプションが関係してくるのかな?)
261:NAME IS NULL
08/07/21 13:34:06
完了するまで戻ってこない。
他のプログラムからいじってもテーブルロックがかかって操作できないはず。
クラスタ索引の再編や付け直しはメインリーフページを再配置するから時間がかかる。
ケースによってはクラスタ索引なしという選択も悪くない。
262:NAME IS NULL
08/07/21 14:01:05
新しい職場で2005のMSDN版みたいな奴を初めていじったんだが
インストール手順書にメモリのチューニングがあった
みんなこれいじってる?
263:NAME IS NULL
08/07/21 14:02:18
訂正
MSDN→MSDE
264:NAME IS NULL
08/07/21 14:31:56
2Gや4Gの壁なら突破してるけど
メモリのチューニングってどれのことだよ
265:NAME IS NULL
08/07/21 16:31:20
>>261
レスありがとうございます。
ところで下記URLのページによると一度作ったインデックスはDBCC INDEXDEFRAGや
DBCC DBREINDEXで定期的に作りかえるよう勧められているのですが、>>261さんは
そういったことをされていたりしますか?(質問ばかりですみません。。。)
URLリンク(www.microsoft.com)
第 1 回 「インデックスアーキテクチャとデータアクセス方法を理解する」
266:NAME IS NULL
08/07/22 00:37:14
>>264
どこいじったのかよくわからんが
キャッシュの設定があった
267:NAME IS NULL
08/07/22 15:39:26
フルテキストインデックスなんですが
Like '%AAA%' と contains(カラム,'*AAA*') とでは
取得件数に大きな違いがあります
Like '%AAA%' と contains(カラム,'*AAA*') は
同じではないのですかね?
Like検索が遅いので、初めて全文検索を使ってみましたがよくわかりません orz
268:NAME IS NULL
08/07/22 15:40:37
SELECT * FROM HOGE WHERE HOGE1 > 100 AND HOGE2 < 200
といったSQLで引かれるテーブルがある場合
インデックスは
HOGE1とHOGE2別々につけたほうがいいですか?
ひとつのインデックスとしてHOGE1, HOGE2でいいですか?
269:NAME IS NULL
08/07/22 15:48:50
>>267
フルテキストはあらかじめ文章を単語に分解してそれを検索するイメージなので、
通常そこでは区切らないだろうような辞書にない単語や普通じゃない固有名詞などは
ヒットしない可能性が高い。
DBに登録してからフルテキスト検索にヒットするようになるまでタイムラグがある。
Linkと一致しないといってクライアントや上司(たよりにならね~)がバグだと言い出すので、
開発や導入前にどういうものかよく説明しておく必要がある。
SQLサーバーのは単語や類似語の登録が出来なかったように思うので、
企業内システムには割りと使いにくい。
(このへんは余り自信がない、出来るのかもしれない)
270:NAME IS NULL
08/07/22 15:51:08
>>268
別々につけても片方しか使われない。
複合キーした場合は2つ目は索引としては使われないが、
カバードインデックスとしての効果は出る。
271:NAME IS NULL
08/07/22 23:00:53
SQL server 2005 Service Pack2のセキュリティ更新プログラム(KB948109)だけ
何度再実行してもインストールされません。コード2B08ってのが出て、
問題のトラブルシューティングとかいうのも見てみたのですが、原因が全くわかりま
せんでした。種類が重要になってるので凄く気になります。どうすればいいんでしょうか?
OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
半角英数字のものにしましたがやっぱりダメでした・・・
272:NAME IS NULL
08/07/23 05:30:52
>>271
> OSはVistaです。ここのスレを教えてもらったスレで名前を2バイトじゃないもの
> にした方がいいかもしれないというようなアドバイスを頂いて、ユーザーアカウント名を
> 半角英数字のものにしましたがやっぱりダメでした・・・
ユーザーアカウントだけ?
コンピュータ名はどうなっているかな?
あと、コンピュータ名を半角の大文字で入力した方がいいはず。
(今回の件とは直接関係ないけど、念のため)
273:NAME IS NULL
08/07/24 22:19:22
昨日からExpress Editionで使い始めました。質問させてください。
テーブルにデータを入れるときは全て手動なんでしょうか?
csvファイルとかから読み込んで入れたいんですけど、そういう機能はないのでしょうか。
調べてもわかりませんでした。お願いします。
274:NAME IS NULL
08/07/24 22:31:06
>>273
DB右クリック>ウィザードで行けたような気
でも、型の推測がバカなので注意。
275:bcp
08/07/24 22:33:43
どうせ調べてないんだろ。
ググッた単語書いてみなよ。
276:NAME IS NULL
08/07/24 23:13:43
ツンデレな>>275に萌えw
(ヒント:名前欄)
277:NAME IS NULL
08/07/25 00:18:52
>>275
273です。
ありがとうございます。
しかし、Error = [Microsoft][SQL Native Client]サーバーへの接続確立時にエラーが発生しまし
た。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート
接続を許可していないことが原因である可能性があります。
というエラーが出て結局ダメでした。
ここを見てこの通りにやってもみたけどダメでした。
URLリンク(support.microsoft.com)
残念です。
>>274
Express Edition2008では「ウィザード」っていうコマンドが見当たりませんでした。
がんばって探したのですが。
278:NAME IS NULL
08/07/25 20:51:05
なにしろウィザードだからな
279:NAME IS NULL
08/07/25 20:59:22 zcVwMyen
>>277
ネタ? ちゃんと読んで、書いてある手順通りやんないと駄目だよ
#ちゃんとsql server 再起動してるよね?
>>Express Edition
には接続ウィザードないよ。
tool->データエースへの接続で mdf 直接指定じゃ無かったかな
ちゃんと調べなさい(もしくは書籍の立ち読み)
#Express ずいぶん使ってないから 覚えてないw
csvファイルの取り込みは DTSWizard.exe で探してクレイ
#なんかのバージョンで入っているらしい
#自分は、dev版使ってるからどれを入れればいいかわかんね>express
初めてさわるんなら、まず情報収集しなよ
280:NAME IS NULL
08/07/25 21:07:42
どうでもいいテストデータを少量入れる時、
Excelで作ってコピー>テーブルを開いてペーストとかやるな。
とんでもなく時間かかるからアレだがw100件未満推奨。
281:NAME IS NULL
08/07/26 02:58:17
なんか情報が錯綜しているんで、ちょっとまとめてみる。
> 昨日からExpress Editionで使い始めました。質問させてください。
> テーブルにデータを入れるときは全て手動なんでしょうか?
> csvファイルとかから読み込んで入れたいんですけど、そういう機能はないのでしょうか。
> 調べてもわかりませんでした。お願いします。
BCPというコマンドラインツールがあるから、これでテキストファイルのインポート/エクスポートが可能。
使い方としては、CSVファイルをインポートする場合
bcp データベース名.所有者.テーブル名 in CSVファイル名 -S.\SQLEXPRESS -T -t , -c
CSVファイルとしてエクスポートする場合
bcp データベース名.所有者.テーブル名 out CSVファイル名 -S.\SQLEXPRESS -T -t , -c
※詳しい使い方は、BCP /?入力するか、オンラインマニュアルを参照。
あと、Express Edition使っているんだったら、マイクロソフトダウンロードセンターから
Microsoft SQL Server Management Studio Expressをダウンロードしてインストールした方がいいよ。
URLリンク(www.microsoft.com)
282:NAME IS NULL
08/07/28 10:27:56
Express Editionでいちばん使い勝手がいいのはIBM DB2だよ。
あれは全部そろってる上に、そのまま業務に使える。
283:NAME IS NULL
08/07/28 19:48:11
Express EditionなんてDB2に無いぞ
284:NAME IS NULL
08/07/28 21:19:48
DB2 Express-C がそれです。
285:bcp
08/07/28 21:35:32
>>282
使い勝手などは人に依存する部分も多いので、一番とか根拠の
無いことを言う奴は宣伝と思っていいかな?
286:NAME IS NULL
08/07/28 21:39:43
いいですよ。私は”青い”血が流れているので
287:NAME IS NULL
08/07/29 12:06:06
ここで聞いて良いのかわからんのだが
VS2008のDVDでVSインストールしたら
一緒にSQLSERVER2005EXPRESSもインストールされたんだが
Microsoft SQL Server Management Studioがインストールされなかった
これは個別にインストールしろってことなのか?
288:NAME IS NULL
08/07/29 18:06:53
>287
ExpressEditionを使うなら別に入れる。
DeveloperEditionとか使うならVisualStudioのインストールオプションから削って最初から入れないでおく。
289:NAME IS NULL
08/07/30 14:28:40
>>288
トンクス
VS2008Pro版だったんだが
初めてのインストールなので戸惑った
290:287
08/08/01 13:25:01
本体からSQLEXPRESSを削除して
MSDNのSQL2005を入れたら
全部入ってくれたわ
いつの間にかXPでもSQLSERVERが動くようになったのね
291:NAME IS NULL
08/08/01 14:10:46
はじめからExpressとDeveloperEditionはXPでの動作は保証されている。
正規版はXPで動作するがライセンス上ほぼスタンドアロンでしか使用できない。
期間限定のお試し版はサーバー限定でXPはインストールできない。
確かこんなだったはず。MSDNのってDeveloer版じゃない?
292:NAME IS NULL
08/08/01 14:40:48 +ktCTmOk
>MSDNのってDeveloer版じゃない?
たぶん そのはず
293:291
08/08/01 17:52:04
確かにDev版でしたわ
ところで諸兄に質問
郵便局が発行してる郵便番号データのKEN_ALLってやつを
SQL2005のマネージメントスタジオでSQL2005にインポートすると失敗する
SQL2000のエンタープライズマネージャでMSDE2000相手にインポートだと成功するんだけど
これはうちだけなのかな?
294:NAME IS NULL
08/08/04 10:30:08
直前のSQLで更新された行の数を知る方法はないでしょうか?
MySQLのmysql_affected_rows()のようなものです。
URLリンク(dev.mysql.com)
295:NAME IS NULL
08/08/04 13:02:40
初心者丸出しの質問で申し訳ないのですが・・・
SQL Server 2005 EXPRESS が入っているサーバー間で
ミラーリングができないものかと思案中なんだけど
ググってもEXPRESSはミラーリングやフェイル・オーバー・クラスタ
とか構築できないという情報だけなんだが
やはり、EXPRESSエディション同士のサーバー間で
ミラーリングを構築することは不可能なのだろうか???
実際にExpress同士でミラーリングができる環境の構築に
成功している人がいたらアドバイスをお願いしたいのです・・・
296:NAME IS NULL
08/08/04 13:21:24
>>294
@@ROWCOUNT
297:NAME IS NULL
08/08/04 13:53:37 3h5OcO5t
>>295
MSDNに無いって書いてあるから、だめなんじゃない?
298:294
08/08/04 14:26:15
>>296 ありがとうございます。
299:bcp
08/08/04 23:28:26
>>295
不可能に決まってるだろ。
まじめな話し、エンジン部分の大きな違いはミラーリング/クラスタと
サイズ (プロセサの個数とかも含む) の制限だけなんだから、Express
でミラーリングなんかサポートしたらバカ高い Standard や Enterprise
Edition なんかを買う奴がかなり減るだろ。
300:NAME IS NULL
08/08/05 00:22:26
>>272
亀レスで申し訳ありません。インストール出来ました!!!
本当にありがとうございます。コンピューター名を半角の大文字にしたら
あっさりとインストール出来ちゃいました・・・本当に不思議ですね。
301:295
08/08/05 14:21:24
>297
>299
そのようですね^^;
とりあえず今回はトリガを用いて
DB(A)のテーブルの変化をDB(B)と同期させるように
するつもりです。
トリガ作るのがものっそい面倒なんで
ミラーリングができねーかなーなんて思ったのがきっかけでした。
ありがとうございました。
302:bcp
08/08/06 00:26:56
何でそんなことしたいのか知らんけど、仕事なら普通に
Standard Edition 買うのを勧める。
趣味なら、心置きなく楽しんでくれ。
303:NAME IS NULL
08/08/06 22:22:03
データ同期がしたいならログ配布っぽい仕組みにチャレンジした方がまだ現実的かも。
リアルタイムは無理だけどさ。
304:NAME IS NULL
08/08/07 00:35:39
トリガ使ってのミラーリングはやってる。
安定動作するまですごく大変だったよ。間違いなくお勧めしない。
305:NAME IS NULL
08/08/07 00:52:50
ミラーリングって一見簡単設定っぽいけど、一歩間違うと復旧させるの大変だろ?
ちょっとSQLかじった程度じゃ、トラぶった時、手に負えなくなるのが関の山。
306:bcp
08/08/07 22:47:38
そりゃミラーリング (=運用) と SQL (=開発) じゃあ、求められるスキルは違うだろうよ。
307:NAME IS NULL
08/08/08 02:43:48
Aというテーブルにデータが追加されたらBにも追加するというトリガ(after)があるとする。
Aでエラーが起きたらトリガは起動しない。
Bでエラーが起きたらAの追加もロールバックされる。
後者のBでエラーが起きてもAにはデータを入れておきたい場合はどのような手段がありますか?
308:NAME IS NULL
08/08/08 10:22:42
Bにエラーをさせないようによく言い聞かせておく
309:307
08/08/08 11:59:06
>>308
解決しました。ありがとうございました。
310:NAME IS NULL
08/08/08 12:36:20
ワラタ
311:NAME IS NULL
08/08/09 02:25:48
Oracle→SQL Serverに移行するんだけど
MSから出てるツールはどうなの?
データに完全に差分が出ないのなら使いたい
あと、複数のDBがあって、全TBLをまとめて同時に移行できる?
312:NAME IS NULL
08/08/11 22:09:31
>>311
自分でゴリゴリバッチ書けばいいじゃん
313:NAME IS NULL
08/08/12 04:18:53 ejoHNrE8
CREATE LOGIN したときの
DEFAULT_DATABASE は
どうやったら確認できますかね?
314:NAME IS NULL
08/08/12 21:04:24
SQL Server 2000で、datetime型の列の規定値を
データのupdate時の日時に設定することは出来ますか?
MySQLでいうところの
default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
みたいなことをしたいのです。
列の規定値の定義方法をご教示いただきたく。
315:NAME IS NULL
08/08/12 22:16:39
GETDATE()をデフォルトに指定しろ。
316:NAME IS NULL
08/08/12 22:49:53
ユーザーが勝手にDBに接続してくる・・・。Windows認証だと防げない・・・。
317:NAME IS NULL
08/08/13 00:32:31
>>316
ユーザーが勝手にDBに接続しなきゃ、データ見れないだろw
318:NAME IS NULL
08/08/13 05:05:32 9W/6/zwG
SQL Server 2005のデータベースのデータ型の設定で
nvarchar(255)にしていADO.net経由で書き込みすると、文字列データまたはバイナリ データが切り捨てられます。
というエラーが返ってくるのは何故でしょう?
書き込むデータは半角やら全角やら混ぜたものなんですが・・・。
319:NAME IS NULL
08/08/13 06:02:31
>>315
㌧
INSERT時のデフォルトはそれで良さそうなんですが、
UPDATE時に変更はされないですよね?
>>318
エラーメッセージを正確に記載するのが良いとオモ。
つかADO.NETのスレの方が良くない?
320:NAME IS NULL
08/08/13 08:20:28 4+Qu872F
>>318
書き込むデータの長さは?
321:NAME IS NULL
08/08/13 10:25:32
>>317
うんまあそうなんだけどユーザーが無許可で作ったアプリケーションかスクリプトで
接続してくるのを防げないかな。
322:NAME IS NULL
08/08/13 14:25:06
>>318
SqlParameterのサイズかデータタイプが間違っている可能性もあるな。
その部分をさらせ。
323:NAME IS NULL
08/08/13 16:30:41
>>321
Windows認証なんて使うからだろ
324:NAME IS NULL
08/08/14 01:08:19 m4R6Ogem
>>319
>>320
>>322
遅くなりました。
あれからテーブルやDataSetを作りなおしたり、
色々試していたらちゃんと登録されるようになりました。
結局、根本の原因がわかっていないので
少し怖いのですがとりあえず解決ってことで・・。
325:NAME IS NULL
08/08/14 07:39:13 1s/mhNXs
Expressのダウンロードページは入り口のバナーだけ2008になっているけど、
なかにはいると2005のままだな。
326:NAME IS NULL
08/08/14 09:22:07
>>323
SQL認証の方が危ないだろ。
>>321
SQL Server Management Studioで、[セキュリティ]-[ログイン]で当該ユーザーに対して、
適切なアクセス権を設定すればいいと思うけど。
327:NAME IS NULL
08/08/14 11:47:02
>>326
>>322
328:NAME IS NULL
08/08/14 11:47:59
>>326
>>321
まちがえた。
329:NAME IS NULL
08/08/14 12:01:16
>>326
同一のクライアント端末で、あるプログラムからの接続は許可し、それ以外のプログラム
からの接続は拒否する。これをWindows認証でどういうアクセス権を設定すれば
実現できるの?
330:NAME IS NULL
08/08/14 12:46:04
そもそも、Aというプログラムで見せるのはよくて、Bというプログラムで見せるのはダメというのが間違いなんじゃない?
というか、元発言者の意味が不明。
接続と一言で言っても、SQLの管理権限なのかデータベース単位の書き込み権限なのかテーブルの読み取り権限なのかさっぱりわからないじゃないか。
前提がわからなきゃ、Windows認証もSQL Server認証もへったくれもない。
331:NAME IS NULL
08/08/14 13:18:25
326だけど、「無許可で作ったプロシジャ」と勘違いしていた。
>>326は無かったことに。 m(_ _)m ペコリ
332:NAME IS NULL
08/08/14 14:20:15
>>330
各ユーザーにAdministrator権限が設定されていて、
SQL Serverに接続できてしまうというオチだったりして。
333:326
08/08/14 14:31:46
悔しかったんで、>>321への対応策を考えてみた。
SQL Server 2005 SP2以降からログオントリガが設定できるようになったんで、
ログオントリガ中でAPP_NAME()が返す内容を調べ、許可されたアプリ以外だったら
ログオンを拒否する事で対策は可能。
ただ、変にこんな仕組みを組み込んじゃうとトラブルの元になるから
オススメはしない。
ログオントリガについては、以下を参照。
URLリンク(msdn.microsoft.com)
334:NAME IS NULL
08/08/14 15:02:29
>>329
アプリケーションロールで解決できないかい?
URLリンク(msdn.microsoft.com)
335:NAME IS NULL
08/08/14 15:41:41
>>330
2層システムでのDB単位の読み書き削除権限だと思うが。
ていうかAは自分で書いたもので、Bは悪意を持った内部の
ユーザーが書いたものと言えば理解できるのか?
336:NAME IS NULL
08/08/14 15:49:31
>>334
なんかこれが正解っぽいけど、ADO.NETで自動コード生成できなくね?
ていうか別にこれならSQL Server認証でも同じじゃね?
337:NAME IS NULL
08/08/14 20:00:19
質問です。かなり困ってます。携帯からなので改行変だったらすいません。
SQL SERVER 2005 を使ってローカルサーバーのデータベースに接続してるんだけど
データベースの名前を変更してしまったので
SQL SERVER自体にログインできなくなりました。
コマンドプロンプト上で元の名前に戻すことは可能でしょうか。
コマンドプロンプト上じゃなくても何でもいいです。
3時間調べたのにサッパリわかりません。
誰か助けて下さい。お願いします。
338:NAME IS NULL
08/08/14 21:00:00
>>329
つアプリケーション巻
339:初心者
08/08/14 21:00:35 vu4PdX5p
すみません。SQLサーバーの本をよみはじめてものなんですが
ストアドで、AS まえ(ヘッダー)に変数を定義するものと、AS以降の中で
変数を定義するものの使い方の違いはなにがあるか教えてください
340:NAME IS NULL
08/08/14 22:36:50
>333
接続元のアプリから接続文字列のアプリ名を入れちゃえば好きなようにアプリ名を設定できるわけだが。
既存のアプリと同じアプリ名を名乗られてアウトになると思うよ。
341:NAME IS NULL
08/08/14 22:53:58
>>337
コマンドプロンプトからだったら、osqlコマンドがあるからシステム管理者でログインして
ALTER DATABASEでデータベース名変更。
あと、デタッチして新しいデータベース名でアタッチする方法もあるか。
というより、Management Studioでシステム管理者として接続してGUIで変更した方が早いけど。
システム管理者の権限があれば(データベースの名前を変えても)SQL Serverに接続できると
思うけど、何をどうしたの?
342:NAME IS NULL
08/08/14 23:01:44
windows認証にこだわる理由が分からんな
343:NAME IS NULL
08/08/14 23:15:07
>>342
Active Directoryと統合できるじゃん。(=パスワードポリシー等も統合できる)
あと、SQL Server 2005では改善されたけど、SQL Server 2000まではアカウントポリシーも
設定できなかったし。
余程、レガシーなアプリケーションを使っていない限り、Windows認証を使うべきだと思うけど。
344:NAME IS NULL
08/08/14 23:35:37
管理面倒だからWindows認証使わせてないけど
345:NAME IS NULL
08/08/14 23:41:06
>>341
ありがとうございます。
ローカルサーバーにAという名前のデータベースがあったのですが、間違えて名前をBに変えてしまいました。
そしたらSQL SERVERに接続出来なくなりました。
Aという名前で接続してたときと同じログイン名とパスワードを使用したら
localhostに接続出来ません。ユーザーの既定のデータベースを開けません。
ログインに失敗しました。ユーザー"(ユーザー名です)" はログイン出来ませんでした。
microsoft SQL server エラー4064
というエラーが出ました。
そのAというデータベースは違うユーザー権限で作成してありますが
ずっとシステム管理者の権限で接続していました。
マイクロソフトサポートのページを参考に下記をコマンドプロンプトで試しました。
sqlcmd -S InstanceName -d master -U SQLLogin -P Password
注 : InstanceName には、接続先の SQL Server 2005 インスタンスの名前が入ります。SQLLogin には、既定のデータベースが削除されている SQL Server ログイン名が入ります。Password には、SQL Server ログインのパスワードが入ります。
3. sqlcmd プロンプトで次の行を入力し、Enter キーを押します。
ALTER LOGIN SQLLogin WITH DEFAULT_DATABASE = AvailDBName(←ここをデータベースBに変更)
注 : AvailDBName には、SQL Server ログインでアクセスできる、そのインスタンス内の既存のデータベースの名前が入ります。
4. sqlcmd プロンプトで GO と入力し、Enter キーを押します。
これを試してBというデータベースに接続(?)はできたのですが名前の変え方が分かりません・・。
この方法自体が間違っているのでしょうか。
Management Studioでの変更の方法の方が簡単ならそちらのがいいのですが
詳しく教えていただけないでしょうか。長文すいません。
346:NAME IS NULL
08/08/14 23:48:47
>>345
Management Studioにシステム管理者の権限(sa、もしくはAdministrator権限)を持ったユーザーで接続して、
[データベース]ツリーを展開して、当該のデータベースで右クリックして[名前の変更]を
実行するだけだけど。
あと、名前を変更した後、[セキュリティ]-[ログイン]のプロパティで[規定のデータベース]の
変更するのを忘れないようにね。
347:NAME IS NULL
08/08/14 23:53:32
ちなみにクエリーでの変更方法は以下の通り。
alter database 旧データベース名 modify name = 新データベース名
348:NAME IS NULL
08/08/15 00:09:25
>>346 >>347
SQL SERVER自体(むしろDBそのものを)全然使ったことがないのでManagement Studioは触ったこともなく・・
なので347の方法でやった方が簡単っぽいですね。なんとなくですが。
コマンドプロンプトで
alter database 旧データベース名 modify name = 新データベース名
と打てばいいのでしょうか。
その前に345で書いた(4. sqlcmd プロンプトで GO と入力し、Enter キーを押します。 )
までを実行した後に alter database 旧データベース名 modify name = 新データベース名 を打てばいいのでしょうか。
馬鹿な質問を何度もすいません。
349:NAME IS NULL
08/08/15 09:20:19
348ですがマネージメントスタジオでデータベースを変えていました。。どうしよう。
350:NAME IS NULL
08/08/15 10:12:50 XhgDq30d
>>349
何をどう変えたのか 落ち着いて書かないと、だれも反応出来ないぞ
351:NAME IS NULL
08/08/15 15:37:07
>>343
マイクロソフトの宣伝文句そのままやんけ
352:NAME IS NULL
08/08/16 04:42:24 tVj6/05A
URLリンク(nobumatsu.cocolog-nifty.com)
より
-----------------------------------------------------
ちなみに、SQL Server 2005はバグフィックスが全くなかった
信頼性の高い製品だということはご存じの方も多いと思いますが、
-----------------------------------------------------
このblog捏造にも程があるだろ!バグだらけじゃねーかよ。
明らかに前バージョン(2000)より酷い。
353:bcp
08/08/16 07:33:06
まあ、SP2 + その後の修正モジュールまで出てるのに、
バグフィックス "0" はないわな。
ただ、2000 より酷いか?
おれは、2000 の方が相当酷かったと思うが。
354:NAME IS NULL
08/08/16 07:39:22
ACCESSのMDBにエクスポート、インポートでエラー出まくりという時点で2000以下。
355:NAME IS NULL
08/08/16 11:08:23 tVj6/05A
>354
それのせいでACCESSほとんど使わなくなったなぁ。
356:NAME IS NULL
08/08/16 15:28:41
>354
やっぱあれって2005の不具合だったんだ…
357:NAME IS NULL
08/08/16 22:12:07
使用メモリ増えたら普通に落ちるしな
358:NAME IS NULL
08/08/17 19:45:03 SfEuPb5O
SQL SERVER 7.0 を使用してテープバックアップとファイルバックを
行っていたのですが、テープドライブを交換した後にオンラインバックアップが
機能せずにDBの応答が止まるようになりました。
テープでのバックアップはもちろん、ファイルでのバックアップの時でさえ
DBへアクセスできなくなります。バックアップが終了するとDBへアクセスできます。
所謂、アクティブオンラインバックアップが機能していないと思われますが、
設定で元に戻すことは可能でしょうか?
何か改善する良い方法はありませんでしょうか?
359:NAME IS NULL
08/08/19 16:18:13
2005から2008にバージョンアップする際の、機能の比較表等は
Microsoftから出されてたりするでしょうか。
バージョンアップの際のチェックリストを作成するにあたって、
比較対象となる資料を探していますがなかなか出てこないので…
2005からのマイナーチェンジ版という位置づけであれば、
単に移行した中身の確認で済みそうですが…何か注意するポイントはありますか?
長分で申し訳ありませんがご教授ください。
360:NAME IS NULL
08/08/19 17:41:56
ここで聞くより、MSのホームパージ行った方が早いし情報が多いし正確。
日程が許せばセミナーに参加することもできるし。
URLリンク(www.microsoft.com)
361:NAME IS NULL
08/08/21 20:18:08
初心者の質問ですが、もしも知っている方がいたら教えてください。
sql server 2005 developer edition って、テストか運用かという概念的な制限が
あるだけで、物理的な制限はまったくないのでしょうか?
たとえば「○人以上がアクセスしに行くと読めなくなる」とか。
362:NAME IS NULL
08/08/21 22:30:19
ないよ。EEと同じ。