ある結果セットと、さらにその結果セット内の一部をUNIONにするって
何をしたいのか全然分からんのだけど?
あとSQL一文のみとか一時テーブル使わずに、とかの縛りの理由も聞きたい。
943 :
937: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'が見つかりません」エラーが出ました。
そこでなぜ駄目なのかなーと疑問に思ったのです。
他にも方法があると思いますが、その方法を知りたいのではなく
これがなぜエラーになるのか知りたかったのですが・・・
unionってそもそも2つの別々の結果をひとつにするのが目的だから、
一緒にするってのが根本的に間違ってる気がする。
>>943 サブクエリやその別名の対する考え方がまちがっている。
そういう使い方は文法上できないというのが答え。
UNIONの下段のSELECT命令は上段SELECT命令の内容に左右されない、だから下の段では
サブクエリでは無く実際のテーブルやビューのTを参照しそれが無いというエラーになる。
そもそもサブクエリに別名をつけていてもそこで実際に中間の結果セットが
作られるかどうかの保証は無い。実際の実行プランはプランナに左右される。
最初のクエリで正解。実行計画によってはあなたが期待した動きをしている可能性もある。
あとUNION ALLでなくUNIONを使う必要があるかはよく検討するべき。
946 :
937:2005/08/02(火) 07:37:00 ID:???
947 :
NAME IS NULL:2005/08/02(火) 19:54:35 ID:IqfK276y
ストアドプロシージャで、大量のOpenTextFileを実行させると、
255ファイル目で、正常にオープン出来なくなります。
(戻り値=10077)
現在、3000ファイルをオープンさせようとしているのですが、
どうしたらいいでしょうか…
SQL Server 2005の SQLCLRのクラスライブラリに関する
ドキュメントが見当たらん。どこにあるんだ??
Books Online探しても見つからねえ・・・orz
949 :
947:2005/08/02(火) 20:21:10 ID:IqfK276y
>>947 ちなみに、1つ前のOpenTextFile後のCloseは、
正常に閉じれています。
>>947 それって本当にストアドで読み込む必要があるの?
vbsでもperlでもいいから、外部プログラムで1ファイルにまとめてから
SQLに渡したほうが楽そうな気がする。
>>951 >>この修正プログラムを適用した後に、コンピュータを再起動するべきではありません。
( ゚д゚)?再起動したら元に戻っちまったりして?
つまり,電源の切断が禁止になるパッチということだな。
相変わらず間抜けだな、MSの自動翻訳。
You do not have to restart → 再起動する必要はありません。
だろ、普通…
まぁhave to と have not to、
must toとmust not toは漏れも結構悩んだよ。
中学生の時だけど・・・
958 :
955:2005/08/04(木) 14:41:08 ID:???
いや、MSの翻訳エンジンは中学生並じゃねーのかと!
959 :
NAME IS NULL:2005/08/04(木) 17:39:35 ID:t9Obyxtq
ADOの話だったりしますが、以下の件についてご存知の方がいましたら、教えてください。
ADODB.Commandオブジェクトでパラメータの数が不定な場合はどうすればいいんでしょうか。
たとえば以下のような感じのSQL。
select * from foo where id in (?)
このとき、?の部分に来るパラメータの数が一定ではない場合です。上記の書き方だと、
パラメータはひとつしか渡せないのですが、パラメータはひとつの場合もあれば、三つの
場合もあります。なんかうまい方法は無いでしょうか。
よろしくお願いします。
>>959 テーブル名可変の場合、だけど、何かもっと上手い方法が有るんじゃないか、
と思いつつ、ストアドの中で
set @sql=N'select * from ' + @テーブル名 + ';'
sp_executesql @sql文
ってやってるなぁ。in句の場合は一時テーブルに入れてしまって
sql文は固定してしまう方がパフォーマンスは上がりそうだけど。
CommandTextを動的生成すりゃいいだけじゃ無いん?
963 :
NAME IS NULL:2005/08/09(火) 14:34:53 ID:Lv2nBy4V
SELECT文のWhere条件で、
Like条件を課すときに、
ひらがな、カタカナを区別なしにSELECTしてしまいますが、
ひらがな、カタカナを区別することは可能でしょうか?
例)
Like'%あ%'
の場合
・あいうえお
・アイウエオ
両方ともSELECTしてしまう。
>>963 select * from テーブル where カラム like '%あ%' COLLATE Japanese_CI_AI_KS
TechED行ってきたんだけどさ、2005はミラーリング時に待機系と監視系のSQL Serverライセンスが
要らないんだってYO
>>965 フェイルオーバークラスタの待機系はもとからライセンスは要らなかったと思ったが
監視系ってなんだろう。
>>968 Index付けするときの制約が2005で弛んだとかじゃまいか。
ANSI_NULLS をONにしろとか色々あったじゃん。
970 :
NAME IS NULL:2005/08/10(水) 16:39:51 ID:XqhE6Lry
SQL2005はいろいろよさそうではあるが、
ANSI SQLのinterval型とdate型の追加は欲しかった。
喪前らに SQL 2005 絡みで相談なんですが…
いまだに SQL Server 7.0 (Win2K)を使ってるのだが
WSUS や Groupboard 使いたいので
アップグレードを検討してます。
SUS は来年6月でサポートが切れるらしいので
それまでに SQL をアップグレードしたいのだけど
今すぐ SQL 2000 を買うべきか
それとも SQL2005を待つべきか
どうでしょう。
>>971 GroupBoard と WSUS を使いたいだけなら今すぐ2000を買う。
これから.NET開発を始めたりするなら2005を待つ。
予算に余裕があるなら L+SA でアシュアランスを付けて2000を買う。
手感じ?
>>971 サポートが切れて、おまいがいつ頃どれだけ困るかによると思うけど。
長々βテストやってたとはいえ
出始めの2005に乗っかるのは危険ではなかろうかと思ったり。
>974
同意。
W2003とかを見る限り、以前より出始めの品質はマシになった気はするが。
いつどれだけ困るかを量るのって難しいよ。
有事に混乱しないためにはサポートが切れる前に予算を組むのが常套なんじゃないかな。
SUSはセキュリティに直結するソフトだし。
新バージョンが出ても新機能を使わなければ、それほどトラブルはないと思うが。
まあ、漏れは後1年はWinXP+VS.NET2003+SQLserver2000体制で行くが。
SQL2005を買っておいてSQL2000にダウングレードして使うというのもいいんじゃないか。
979 :
971:2005/08/11(木) 08:11:14 ID:???
お前ら、ご助言ありがとうございます。
>>972 .NET開発の予定はありません。
7.0 で機能面では今まで事足りてた程度のことしか
してませんので。○| ̄|_
>>973 SUS はサポートが切れた時点でセキュリティアップデートの
供給が現実的に止まってしまいますので、即、困ります。
なのでミグレーション期間も考慮に入れると
遅くとも来年5月頃までにはアップグレートしなくては
いけません。
>>974 普段はOSなどでも原則として SP1 が出るまで導入しない慎重派です。
SQL2005のSP1って何時頃でしょうね。
>>978 その方法ならSQL2Kのライセンスフィーは要らないということですか?
SQL2000を買って2005にアップグレードとの違いというか
あえてダウングレードするメリットが良く理解できないのですが…
だうんぐれーどってタダみたいな値段?
だったら1本で2種類買えてウマー。
>980
ダウングレードはタダみたいな値段と言うより無償やね。
同時に二種類以上使える訳ではないので、念の為。
ちなみに、OSでもOfficeでもVisual Studioでも可能です。
>979
ダウングレードするメリットは、要は既に正規パッケージや
ライセンスを購入できない製品を使用できること、それに尽きる。
今回の場合だと、2000で様子を見ながら、2005が安定したと
判断できた所で追加費用を必要とせずに2005に変更できる所だと
思う。
>>979 ミグレーション の検索結果 約 126 件
マイグレーション の検索結果 約 132,000 件
ダウングレード権は箱売りのソフトには付いてなかった希ガス。
SQL Serverは例外かもしれないけど。
各テーブルのデータ型、キーインデクスなどのテーブル構造を一覧で抽出したいんだが
SQL文で可能でしょうか
ちなみにSQL2000です
2000です
データを誤って全部削除してしまいました
削除前に復元する方法がありましたら教えてください
ファイルの容量は大きいままです
>>985 sp_help だとフィールド情報とかも取れた。
990 :
NAME IS NULL:2005/08/12(金) 14:50:13 ID:LFPiNd2K
sp_xxxはクエリアナライザでグリッド表示させるにはいいが、
isql や sqlcmd などで手軽に表示できるのはないものか。
りばーすえんじにやツールでも作ってくれよ!