MS SQL Server 総合スレ2

このエントリーをはてなブックマークに追加
942NAME IS NULL:2005/08/01(月) 21:35:46 ID:???
ある結果セットと、さらにその結果セット内の一部をUNIONにするって
何をしたいのか全然分からんのだけど?
あとSQL一文のみとか一時テーブル使わずに、とかの縛りの理由も聞きたい。
943937:2005/08/02(火) 00:23:38 ID:AOPF3Fnf
>>942
例えば次のようなテーブルにて「10000よりも大きい値について、
その値とその値を2倍した値の結果セットを求める」というような感じです。
いろいろな方法があると思いますがUNIONを使う方法で試したときに
エラーになったので質問しました。

TestTable
col1
------------
5000
12000
14000

ResultSet
col1
------------
12000
24000
14000
28000

まず単純に考えると・・・
SELECT col1 FROM TestTable WHERE col1 > 10000
UNION
SELECT col1 * 2 FROM TestTable WHERE col1 > 10000

同じような処理があるので次のように考えて・・・・
SELECT col1 FROM (SELECT col1 FROM TestTable WHERE col1 > 10000) AS T
UNION
SELECT col1 * 2 FROM (SELECT col1 FROM TestTable WHERE col1 > 10000) AS U

同じクエリの部分を一つにして・・・・
SELECT col1 FROM (SELECT col1 FROM TestTable WHERE col1 > 10000) AS T
UNION
SELECT col1 * 2 FROM T

しかし、「オブジェクト'T'が見つかりません」エラーが出ました。
そこでなぜ駄目なのかなーと疑問に思ったのです。

他にも方法があると思いますが、その方法を知りたいのではなく
これがなぜエラーになるのか知りたかったのですが・・・
944NAME IS NULL:2005/08/02(火) 01:22:48 ID:???
unionってそもそも2つの別々の結果をひとつにするのが目的だから、
一緒にするってのが根本的に間違ってる気がする。
945NAME IS NULL:2005/08/02(火) 02:20:59 ID:???
>>943
サブクエリやその別名の対する考え方がまちがっている。
そういう使い方は文法上できないというのが答え。
UNIONの下段のSELECT命令は上段SELECT命令の内容に左右されない、だから下の段では
サブクエリでは無く実際のテーブルやビューのTを参照しそれが無いというエラーになる。
そもそもサブクエリに別名をつけていてもそこで実際に中間の結果セットが
作られるかどうかの保証は無い。実際の実行プランはプランナに左右される。
最初のクエリで正解。実行計画によってはあなたが期待した動きをしている可能性もある。
あとUNION ALLでなくUNIONを使う必要があるかはよく検討するべき。
946937:2005/08/02(火) 07:37:00 ID:???
>>944-945
よく分かりました。ありがとうございます。
947NAME IS NULL:2005/08/02(火) 19:54:35 ID:IqfK276y
ストアドプロシージャで、大量のOpenTextFileを実行させると、
255ファイル目で、正常にオープン出来なくなります。
(戻り値=10077)

現在、3000ファイルをオープンさせようとしているのですが、
どうしたらいいでしょうか…
948NAME IS NULL:2005/08/02(火) 20:04:59 ID:???
SQL Server 2005の SQLCLRのクラスライブラリに関する
ドキュメントが見当たらん。どこにあるんだ??
Books Online探しても見つからねえ・・・orz
949947:2005/08/02(火) 20:21:10 ID:IqfK276y
>>947

ちなみに、1つ前のOpenTextFile後のCloseは、
正常に閉じれています。
950NAME IS NULL:2005/08/02(火) 20:39:48 ID:???
>>947
それって本当にストアドで読み込む必要があるの?
vbsでもperlでもいいから、外部プログラムで1ファイルにまとめてから
SQLに渡したほうが楽そうな気がする。
951NAME IS NULL:2005/08/04(木) 00:10:21 ID:???
今更かもだけど
http://support.microsoft.com/?kbid=888799
って酷くね?
http://support.microsoft.com/kb/887974/
FIX:動的なカーソルでフェッチと、 SQL Server 2000 Service Pack 3 に予期しない結果が発生します。
とか喰らってんだけど、

予期しない結果を発生するモノを想定してナニを書けば良いのか悩んでおりますw
952NAME IS NULL:2005/08/04(木) 07:11:13 ID:???
>>951
>>この修正プログラムを適用した後に、コンピュータを再起動するべきではありません。

( ゚д゚)?再起動したら元に戻っちまったりして?
953NAME IS NULL:2005/08/04(木) 09:43:20 ID:???
つまり,電源の切断が禁止になるパッチということだな。
954NAME IS NULL:2005/08/04(木) 10:58:49 ID:???
相変わらず間抜けだな、MSの自動翻訳。
You do not have to restart → 再起動する必要はありません。
だろ、普通…
955NAME IS NULL:2005/08/04(木) 11:26:47 ID:???
まぁhave to と have not to、
must toとmust not toは漏れも結構悩んだよ。






中学生の時だけど・・・
956NAME IS NULL:2005/08/04(木) 13:19:36 ID:???
>>955
何の自慢?(w
957NAME IS NULL:2005/08/04(木) 14:32:05 ID:???
>>955は優秀な翻訳猿人
958955:2005/08/04(木) 14:41:08 ID:???
いや、MSの翻訳エンジンは中学生並じゃねーのかと!
959NAME IS NULL:2005/08/04(木) 17:39:35 ID:t9Obyxtq
ADOの話だったりしますが、以下の件についてご存知の方がいましたら、教えてください。
ADODB.Commandオブジェクトでパラメータの数が不定な場合はどうすればいいんでしょうか。
たとえば以下のような感じのSQL。

select * from foo where id in (?)

このとき、?の部分に来るパラメータの数が一定ではない場合です。上記の書き方だと、
パラメータはひとつしか渡せないのですが、パラメータはひとつの場合もあれば、三つの
場合もあります。なんかうまい方法は無いでしょうか。

よろしくお願いします。
960NAME IS NULL:2005/08/04(木) 17:52:37 ID:???
>>959
テーブル名可変の場合、だけど、何かもっと上手い方法が有るんじゃないか、
と思いつつ、ストアドの中で

set @sql=N'select * from ' + @テーブル名 + ';'
sp_executesql @sql文

ってやってるなぁ。in句の場合は一時テーブルに入れてしまって
sql文は固定してしまう方がパフォーマンスは上がりそうだけど。
961NAME IS NULL:2005/08/04(木) 18:33:10 ID:???
>>959
・パラメータ数に合わせたSQLを用意する
・1個のSQLだけど複数パラメータの有効・無効を切り替えられるようにする
 ttp://www.codeproject.com/useritems/sql_WHERE_clause.asp

ただし完全に任意個数だと動的にSQL文字列を構築することになるような気もしますが。
962NAME IS NULL:2005/08/04(木) 20:14:45 ID:???
CommandTextを動的生成すりゃいいだけじゃ無いん?
963NAME IS NULL:2005/08/09(火) 14:34:53 ID:Lv2nBy4V
SELECT文のWhere条件で、
Like条件を課すときに、
ひらがな、カタカナを区別なしにSELECTしてしまいますが、
ひらがな、カタカナを区別することは可能でしょうか?

例)
Like'%あ%'
の場合
・あいうえお
・アイウエオ
両方ともSELECTしてしまう。
964NAME IS NULL:2005/08/09(火) 15:02:44 ID:???
>>963
select * from テーブル where カラム like '%あ%' COLLATE Japanese_CI_AI_KS
965NAME IS NULL:2005/08/09(火) 17:02:22 ID:???
TechED行ってきたんだけどさ、2005はミラーリング時に待機系と監視系のSQL Serverライセンスが
要らないんだってYO
966NAME IS NULL:2005/08/09(火) 17:11:03 ID:???
>>965
フェイルオーバークラスタの待機系はもとからライセンスは要らなかったと思ったが
監視系ってなんだろう。
967NAME IS NULL:2005/08/09(火) 20:13:30 ID:???
>>966
ミラーリング構成にしたときのウィットネスだろ
http://pcweb.mycom.co.jp/cgi-bin/print?id=23491
968NAME IS NULL:2005/08/10(水) 11:15:47 ID:???
SQL Server 2005では計算列という機能が追加されました。
http://naka.wankuma.com/site/column/server/00003.htm

これってSQLServer7.0とかSQLServer2000の計算列とどう違うの?
969NAME IS NULL:2005/08/10(水) 12:42:32 ID:???
>>968
Index付けするときの制約が2005で弛んだとかじゃまいか。
ANSI_NULLS をONにしろとか色々あったじゃん。
970NAME IS NULL:2005/08/10(水) 16:39:51 ID:XqhE6Lry
SQL2005はいろいろよさそうではあるが、
ANSI SQLのinterval型とdate型の追加は欲しかった。
971NAME IS NULL:2005/08/10(水) 17:00:10 ID:???
喪前らに SQL 2005 絡みで相談なんですが…

いまだに SQL Server 7.0 (Win2K)を使ってるのだが
WSUS や Groupboard 使いたいので
アップグレードを検討してます。

SUS は来年6月でサポートが切れるらしいので
それまでに SQL をアップグレードしたいのだけど
今すぐ SQL 2000 を買うべきか
それとも SQL2005を待つべきか
どうでしょう。
972NAME IS NULL:2005/08/10(水) 19:19:02 ID:???
>>971
GroupBoard と WSUS を使いたいだけなら今すぐ2000を買う。
これから.NET開発を始めたりするなら2005を待つ。

予算に余裕があるなら L+SA でアシュアランスを付けて2000を買う。

手感じ?
973NAME IS NULL:2005/08/10(水) 21:45:30 ID:???
>>971
サポートが切れて、おまいがいつ頃どれだけ困るかによると思うけど。
974NAME IS NULL:2005/08/10(水) 22:35:26 ID:???
長々βテストやってたとはいえ
出始めの2005に乗っかるのは危険ではなかろうかと思ったり。
975NAME IS NULL:2005/08/10(水) 22:41:14 ID:???
>974
同意。
W2003とかを見る限り、以前より出始めの品質はマシになった気はするが。
976NAME IS NULL:2005/08/10(水) 22:41:59 ID:???
いつどれだけ困るかを量るのって難しいよ。
有事に混乱しないためにはサポートが切れる前に予算を組むのが常套なんじゃないかな。
SUSはセキュリティに直結するソフトだし。
977NAME IS NULL:2005/08/10(水) 23:51:56 ID:???
新バージョンが出ても新機能を使わなければ、それほどトラブルはないと思うが。
まあ、漏れは後1年はWinXP+VS.NET2003+SQLserver2000体制で行くが。
978NAME IS NULL:2005/08/11(木) 01:51:01 ID:???
SQL2005を買っておいてSQL2000にダウングレードして使うというのもいいんじゃないか。
979971:2005/08/11(木) 08:11:14 ID:???
お前ら、ご助言ありがとうございます。

>>972
.NET開発の予定はありません。
7.0 で機能面では今まで事足りてた程度のことしか
してませんので。○| ̄|_

>>973
SUS はサポートが切れた時点でセキュリティアップデートの
供給が現実的に止まってしまいますので、即、困ります。
なのでミグレーション期間も考慮に入れると
遅くとも来年5月頃までにはアップグレートしなくては
いけません。

>>974
普段はOSなどでも原則として SP1 が出るまで導入しない慎重派です。
SQL2005のSP1って何時頃でしょうね。

>>978
その方法ならSQL2Kのライセンスフィーは要らないということですか?
SQL2000を買って2005にアップグレードとの違いというか
あえてダウングレードするメリットが良く理解できないのですが…
980NAME IS NULL:2005/08/11(木) 08:50:56 ID:???
だうんぐれーどってタダみたいな値段?
だったら1本で2種類買えてウマー。
981NAME IS NULL:2005/08/11(木) 10:05:01 ID:???
>980
 ダウングレードはタダみたいな値段と言うより無償やね。
 同時に二種類以上使える訳ではないので、念の為。
 ちなみに、OSでもOfficeでもVisual Studioでも可能です。


>979
 ダウングレードするメリットは、要は既に正規パッケージや
ライセンスを購入できない製品を使用できること、それに尽きる。
 今回の場合だと、2000で様子を見ながら、2005が安定したと
判断できた所で追加費用を必要とせずに2005に変更できる所だと
思う。
982NAME IS NULL:2005/08/11(木) 10:44:36 ID:???
>>979
ミグレーション の検索結果 約 126 件
マイグレーション の検索結果 約 132,000 件
983NAME IS NULL:2005/08/11(木) 11:12:51 ID:???
ダウングレード権は箱売りのソフトには付いてなかった希ガス。
SQL Serverは例外かもしれないけど。
984NAME IS NULL:2005/08/11(木) 12:29:24 ID:???
985NAME IS NULL:2005/08/11(木) 16:55:02 ID:???
各テーブルのデータ型、キーインデクスなどのテーブル構造を一覧で抽出したいんだが
SQL文で可能でしょうか

ちなみにSQL2000です
986NAME IS NULL:2005/08/11(木) 18:12:02 ID:???
2000です
データを誤って全部削除してしまいました
削除前に復元する方法がありましたら教えてください
ファイルの容量は大きいままです
987NAME IS NULL:2005/08/11(木) 20:57:05 ID:???
>>985
sp_helpindexとかどう?
988NAME IS NULL:2005/08/12(金) 08:49:47 ID:???
>>983
http://www.microsoft.com/japan/sql/evaluation/license/downgrade.asp

パッケージの場合は予め旧バージョンを持ってることが前提かな?
989NAME IS NULL:2005/08/12(金) 09:27:34 ID:???
>>985
sp_help だとフィールド情報とかも取れた。
990NAME IS NULL:2005/08/12(金) 14:50:13 ID:LFPiNd2K
sp_xxxはクエリアナライザでグリッド表示させるにはいいが、
isql や sqlcmd などで手軽に表示できるのはないものか。
991NAME IS NULL
りばーすえんじにやツールでも作ってくれよ!