X



トップページDB@2ch掲示板
1002コメント327KB
Microsoft SQL Server 総合スレ 11 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/05/29(日) 16:50:08.13ID:dqKJQypQ
Microsoft SQL Server (Transact-SQL) の総合スレッドです。

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

過去スレとかめんどいから誰か適当に貼って
0455NAME IS NULL
垢版 |
2017/07/20(木) 09:59:09.19ID:???
ミラーリングは負荷分散に使えないが
0457NAME IS NULL
垢版 |
2017/07/31(月) 21:23:54.39ID:???
SQL Server絡みの地雷率が高すぎてうんざりしてきた
windowsしか使えないのでこれ使いました!
プログラムはよくわかんないので中身は適当です!
十数年分の滅茶苦茶に蓄積されたデータは再利用できるようにしてください!
みたいのしかねえ
0458NAME IS NULL
垢版 |
2017/07/31(月) 21:46:50.58ID:lcWS9MWM
>>457
知識の蓄積もない、Microsoftは利用者を育てることが重要だと思ってないからな。
0459NAME IS NULL
垢版 |
2017/08/01(火) 02:12:40.31ID:???
>>458
サポート費用払う前提だがそれなりの対応してると思う
何か問題でもあったのか?
0460NAME IS NULL
垢版 |
2017/08/01(火) 08:09:16.36ID:???
>>457はMSをディスってるんじゃなくてその利用者をディスってるんだろ
むしろそんな連中でもとりあえずのシステムが組めるMS製品群スゲーって話
まあ引き継ぎとかでうんざりする気持ちはよくわかるが w
0461NAME IS NULL
垢版 |
2017/08/01(火) 10:39:33.77ID:???
>>460
とりあえずじゃないからSQLServerの地雷案件が多いんだよな
設定もろくにせずに遅くなったら魔法の言葉「MSの製品だからしょうがない」で誤魔化そうとする阿呆多すぎる
0462NAME IS NULL
垢版 |
2017/08/01(火) 10:45:07.93ID:XS4cIuUu
>>459
日本マイクロソフトのサポートもレベルがひどい
0463NAME IS NULL
垢版 |
2017/08/01(火) 12:48:27.45ID:???
>>461
いちゃもんつけたいだけのアホ乙 w
0464NAME IS NULL
垢版 |
2017/08/01(火) 13:30:45.92ID:XS4cIuUu
>>463
日本ユニシスおつ
0465NAME IS NULL
垢版 |
2017/08/28(月) 21:43:46.23ID:???
教えてください。

SQLServer の View でトリガを使って別のテーブルの編集を行いたいと思います。
ほぼこのページの通りに書いてみたのですが、View の参照元のテーブルにレコードを追加してもトリガが実行されないようです。
https://msdn.microsoft.com/ja-jp/library/def01zh2(v=vs.120).aspx

実際のテスト環境は以下の通りです。
・DB: A
 テーブル01

・DB: B
 ビュー01 (DB:Aのテーブル01を参照)
  トリガ01 (ビュー01に対して INSTEAD OF INSERT でテーブル 02 に情報を追加)
 テーブル02 (テーブル01のキー項目に関連づけて、追加項目を登録)

DB:B は DB:A を参照した試験環境で、DB:B を削除するだけで後腐れなく試験環境を除去できないかな、と考えました。

DB:A のテーブル01にトリガを仕掛ければ問題なくやりたいことは出来るのですが。
ビューのトリガを動かすのには何か設定が必要なのでしょうか。
0466NAME IS NULL
垢版 |
2017/09/09(土) 20:24:20.28ID:???
SET ARITHABORT はヘルプやノウハウ掲示板ではON推奨になってるけど、逆の場合もあるようで、とあるストアドでは

パラメータ:日付指定→行番号取得→本処理
1.ADOのデフォルトでOFF: 1秒
2.SSMSのデフォルトでON: 20秒
3.ストアド内で SET ARITHABORT を記述: 20秒(1、2どちらもONでもOFFでも同じ)
4.ストアド内の記述を外し、SSMSのオプション設定でOFFに変更: 1秒

パラメータ:行番号指定→本処理
5.ADOのデフォルトでOFF: 20秒 ←これが問題だった
6.SSMSのデフォルトでON: 20秒
7.ストアド内で SET ARITHABORT を記述: 20秒(5、6どちらもONでもOFFでも同じ)
8.ストアド内の記述を外し、SSMSのオプション設定でOFFに変更: 1秒
9.その後、ADOのデフォルトでOFF: 1秒 ←解決

パラメータは後者の方が処理が少ないのに、妙に遅かったという問題
接続コンポーネントのSET ARITHABORTのデフォルトの違いによって実行プランが分かれるという話を見て、以上のことをごちゃごちゃやってたら直った
でも解決法が逆

開発当時を覚えてないけど、前者は最初に実行プランができたのがADOでの実行で、後者はSSMSだったのかもしれない
つまり
A.先にADOでSET ARITHABORT OFFで実行→SSMSでONで実行→実行プランが分かれる
B.先にSSMSでONで実行→ADOでOFFで実行→ONの実行プランが使われる
C.Bを解除するにはSSMSでOFFで実行(および再コンパイル?)
つまり、散見するノウハウとは逆にSSMSを常にSET ARITHABORT OFFにした状態で開発した方がいいのかもしれない
ADOもSET ANSI_WARNINGSはONなので、SET ARITHABORTがOFFでも0除算エラーは出るし
ちなみに、SQL Serverは2014
0467NAME IS NULL
垢版 |
2017/09/09(土) 20:49:58.88ID:???
実際酷いのもいるけど、そういうのはむしろORACLE出身だったりするw(内部結合のビューのみでやりきろうとする信じられない低レベルもいる)
SQL Serverは同一ストアド内に制御文と問合せ文が同居できるため工夫の範囲が広く、むしろORACLEよりレベルの高い技術者も多いとも聞く

いずれにせよ前任者はそれを0から構築したわけで(おそらく低予算で)、前任者が悪いんでなく、引き継げない後任者のレベルが低いと考えるべき
前任者のレベルが低いと言うならむしろ引き継ぐだけでなく改善して、処理速度を数十倍〜数百倍に上げてみせるべき
0468NAME IS NULL
垢版 |
2017/09/27(水) 13:50:33.70ID:WjHJ/OaP
復旧モデルについてなのですが、「完全」よりも「単純」の方が余計なことをしない分
処理速度自体は総じて速いという認識で良いのでしょうか?
0470NAME IS NULL
垢版 |
2017/09/27(水) 19:15:37.86ID:???
>>468
処理速度はほとんど変わらないけど、完全はトランザクションログのメンテナンスを疎かにしてトラブル起きやすいイメージ
0471NAME IS NULL
垢版 |
2017/09/27(水) 22:49:22.28ID:???
単純でもトランザクションのロールバックはできるわけだから、ログは取ってるんだが
一括ログ可能な操作だと、単純でも一括ログ方式の最少ログしか取ってないのかな

そうじゃないなら、速度的には一括ログが一番早いんじゃないんじゃね
体感できるとは思えんけど
0472NAME IS NULL
垢版 |
2017/09/28(木) 01:01:37.66ID:???
バッチ処理で大量にデータを
ローディングするようなシステムではそれなりに差が出るよ
BULK INSERTでだいたい20~25%くらい短縮できる
0473NAME IS NULL
垢版 |
2017/09/29(金) 16:50:08.86ID:???
>>472
完全と一括ログの比較じゃなくて
単純より一括ログの方が早いって話?
0474NAME IS NULL
垢版 |
2017/09/29(金) 23:26:37.10ID:???
>>473
単純は一括と同じでしょ
そこは試してないけどマニュアルにはそう書いてるよ
0477NAME IS NULL
垢版 |
2017/10/05(木) 20:59:09.87ID:???
まだ2005が現役で動いているのに
0479NAME IS NULL
垢版 |
2017/10/05(木) 22:00:44.94ID:???
>>478
保守契約切れても何も言ってこないので他社システムに移行したと思ったら、単にケチってただけだったという・・・
0480NAME IS NULL
垢版 |
2017/10/06(金) 22:25:21.69ID:???
うちの社内システムなんてSqlServer2000+VB6だぞw
0481NAME IS NULL
垢版 |
2017/10/07(土) 14:58:41.23ID:???
安定稼働してるDBMSを変更する理由がないからなぁ
ORACLEとかサポート切れたら不安しかないけど
0483NAME IS NULL
垢版 |
2017/10/07(土) 17:07:32.43ID:72uw01jP
格好の標的だね
metasploitみたいの使って簡単に攻撃されるよ
0484480
垢版 |
2017/10/07(土) 17:54:07.20ID:???
>>481
そういやいまだにoo4o使ってるシステムもあったw
0486NAME IS NULL
垢版 |
2017/10/08(日) 22:37:59.43ID:???
そもそもDBに不特定多数が直接接続できるシステムがまれだと思うが
0487NAME IS NULL
垢版 |
2017/10/08(日) 22:42:53.11ID:XmeriWwC
そもそもそういう発想がセキュリティを理解してない
0488NAME IS NULL
垢版 |
2017/10/08(日) 22:43:14.23ID:???
いやまあSQL Slammerみたいな例もあるから何とも言えんけど
DBサーバそのものがネットワークに晒されてるような環境とそうじゃない環境じゃ
求められるセキュリティ強度も違うんじゃないかね
0489NAME IS NULL
垢版 |
2017/10/09(月) 06:16:11.40ID:???
>>486
DBに(社内の)不特定多数が直接接続できるのはまれだと思うがDBが入ってるサーバーに(ログインはできないけど)直接接続できるケースは多いと思うぞ
0490NAME IS NULL
垢版 |
2017/10/09(月) 09:17:26.00ID:???
別サーバーからSSMSからは接続出来ないのに
sqlcmdからは操作出来ちゃうアホな設定のDBがあったなあ
0492NAME IS NULL
垢版 |
2017/10/09(月) 17:49:41.05ID:???
>>490
技とそういう設定にしてるんじゃないか?
0493NAME IS NULL
垢版 |
2017/10/16(月) 09:56:16.87ID:cuhMHRkq
SSMSの最新版が出ているようですが、入れると何か良い事ありますか?
0494NAME IS NULL
垢版 |
2017/10/18(水) 23:00:33.28ID:???
病気が治って彼女が出来て宝くじに当たって出世しまくるなどいい事ずくめ
0495NAME IS NULL
垢版 |
2017/10/21(土) 12:57:32.75ID:???
Queryのウインドウでは、色付きで分かり易くクエリが表示出来ますよね。
コピペしてワードなどに貼り付けるとその色情報が失われますが、
どうにかして文字だけでなく色もコピペできませんか?
0496NAME IS NULL
垢版 |
2017/10/21(土) 13:11:28.80ID:???
>>495
文法読み取って色表示しているのがクエリエディタの機能だから無理じゃね
0497NAME IS NULL
垢版 |
2017/10/21(土) 14:17:38.53ID:???
>>495
同じ機能を持ったテキストエディタに張り付ければいいじゃん
0498NAME IS NULL
垢版 |
2017/10/21(土) 17:12:43.60ID:???
例えば社員テーブルに複数の社員のデータを一気に追加する場合に
社員番号をキーとして、
もしテーブルに該当社員がいればUpdate、
いない場合はInsertしたいのですが、
そう言う処理を簡単にやるコマンドはありますか?
0501NAME IS NULL
垢版 |
2017/10/21(土) 17:57:32.74ID:???
ありがとうございました。
0502NAME IS NULL
垢版 |
2017/10/21(土) 21:16:04.76ID:???
>>495
「形式を選択して貼り付け」じゃないの?
rich text formatでクリップボードにはコピーされてるはず
0503名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 07:09:30.09ID:???
その後、mergeをいろいろ試しています。
社員更新データを#で始まるローカル一時テーブルに入れておいて、
社員テーブルにマージする方針で出来たのですが、そのやり方で良いでしょうか?
調べていると、Temporal tablesと言うのもあるようですが今回のマージ処理に使うと何か良い事ありますか?
0508名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 14:58:58.59ID:???
>>503
名前紛らわしいけど
temporary tableとtemporal tableは全く別物

テンポラリテーブルは一時テーブル
テンポラルテーブルは決まった日本語訳ないけど”時間テーブル”みたいな意味
バージョン管理や履歴管理のために使う
0510NAME IS NULL
垢版 |
2017/10/22(日) 21:45:55.65ID:???
>>506
テーブルに入れずにmergeできる?
0513NAME IS NULL
垢版 |
2017/10/22(日) 23:17:00.45ID:???
>>512
マニュアル読めよ
ダメな子だな
0514NAME IS NULL
垢版 |
2017/10/23(月) 12:22:06.75ID:???
他は知らんがSQLServerのmergeはただの場合分けでupdateとinsert書いてるだけなんだから
updateとinsertに書けることは大体書ける
0516NAME IS NULL
垢版 |
2017/10/23(月) 15:13:53.67ID:???
>>515
マニュアルに例も含めてまんま書いてるのにそれすら読めないのか?
仕事でデータベースさわってるなら今すぐ辞めろ
みんなが迷惑する
0517NAME IS NULL
垢版 |
2017/10/23(月) 15:27:52.10ID:???
505辺りから質問者とは別の人だろ
0518NAME IS NULL
垢版 |
2017/10/23(月) 15:28:32.51ID:CzSV0ugc
普通のワークテーブルも作ったらいけない決まりがあるのか?
0519NAME IS NULL
垢版 |
2017/10/23(月) 21:08:58.07ID:???
>>516
具体的に書けないなら黙ってろよ
マジでウザイわ
0520NAME IS NULL
垢版 |
2017/10/23(月) 21:11:50.12ID:mf1jBI9V
データの途中経過も分からない作りにしたい人はどういう感覚なんだろうね。
0521NAME IS NULL
垢版 |
2017/10/23(月) 21:58:30.84ID:???
>>517
503の書き方からして同一人物だろ
0522NAME IS NULL
垢版 |
2017/10/29(日) 00:25:48.63ID:???
SQL Serverの操作に特化したPowerShellがあるって聞いたんだけど
このスレには使ってる人いないのかな?
SSMS使えない環境だとそれなりに威力を発揮するのか知りたかったのだが
0523NAME IS NULL
垢版 |
2017/10/30(月) 22:53:25.46ID:0uDb1bS4
壊滅的にcliのセンスがないmsにそんな期待するだけ無駄
0524NAME IS NULL
垢版 |
2017/10/30(月) 23:07:01.23ID:???
sqlserverでpowershell使っている人いないだろ

複数のsqlserver運用している人がサーバ設定いちいち手作業でするのが面倒くさい場合設定変更のスクリプトをpsで作ったり

あるいはベンダーがクライアントの設定を変えたい時psでスクリプト作ってクライアント送って実行してもらうとかじゃね
0525NAME IS NULL
垢版 |
2017/10/31(火) 11:37:21.58ID:IzoEenp0
>>524
SQL Serverそのものが、PowerShellのスクリプトを吐くんだが?
0526NAME IS NULL
垢版 |
2017/10/31(火) 12:30:18.27ID:???
>>525
>SQL Serverそのものが、PowerShellのスクリプトを吐く
kwsk
どこでどんなスクリプト吐くんだ
それはクライアントツールじゃなくてSQL Serverそのものが吐いてるのか?
0527NAME IS NULL
垢版 |
2017/10/31(火) 13:10:45.30ID:IzoEenp0
>>526
management studio
0528NAME IS NULL
垢版 |
2017/10/31(火) 17:24:38.56ID:???
>>527
SSMSがどんなサーバ設定のスクリプト吐くの?

まあそもそもSSMSはクライアントツールであって、それがPSスクリプト吐いたからって、SQL ServerそのものがPSスクリプト吐いてるわけじゃないんだけど
0530NAME IS NULL
垢版 |
2017/10/31(火) 22:56:42.42ID:???
教えてください。

他のジョブの状態によって特定のジョブを実行するかどうかを判定するストアドを書きたいと思います。
ジョブの状態は システムのストアドの msdb.dbo.sp_help_job を利用することで取得できます。
これの特定のカラム(current_execution_status)の値を参照したいので一時テーブルに結果を保存しました。

insert into #temp
exec msdb.dbo.sp_help_job;

これを単体で実行する分には問題ありませんが、自作のストアドの中で実行すると
「INSERT EXEC ステートメントは入れ子にはできません」とエラーが発生します。

無視しても一時テーブルには結果が保存されるのですが、あまり気持ちよくないことと、
自作のストアドをトリガなどの中で実行すると例外を捕捉されてそこで終わってしまいます。
ので、対策を行いたいと思います。

1) 諦める
2) msdb.dbo.sp_help_job の中身を解析して自作する
3) SQL CLR で msdb.dbo.sp_help_job の結果を返すファンクションを作る?

どちらもなんだかな、な気がします。
ネットを見る限りではこのストアドを使用した記事は多そうなので、使用事例も多いはずなのですが解決策が見つかりません。


問題は、内部で insert into を使用しているストアドの結果を insert into するとエラーが発生することなのですが、
こういうケースでは一般にどのように対応するのが定石なのでしょうか。
0531NAME IS NULL
垢版 |
2017/10/31(火) 23:03:51.74ID:???
>>530
ストアドをテーブル関数化すればselect使えるからうまくいくかも
0532NAME IS NULL
垢版 |
2017/10/31(火) 23:48:42.51ID:???
とりあえずエラートラップして握りつぶせば良いんじゃね
0534530
垢版 |
2017/11/01(水) 22:25:35.36ID:???
みなさん、ありがとうございます。

>>531
自分のスキルでは出来ませんでした。。

>>532
try catch で握りつぶすってことですよね。
それをやると件のエラーが出たところで catch の側に行ってしまうので、結果がテーブルに保存されないのです。

>>533
教えていただいた URL の手法で出来ました。
ただ。本番機の設定を変更せねばならないのですが、NG を出されました。
残念。無念。

スケジュール調整の件、覚えておきます。
今回のは幸いに単純なのでなんとかなりそうなのですが。すっきりしないなぁ。
0535NAME IS NULL
垢版 |
2017/11/09(木) 01:07:32.60ID:???
初心者です。
二つのテーブルが有って、その両者に同じ名前のカラムが有って、それらはそれぞれプライマリキーに設定されています。
その二つのテーブルをマネージメントスタジオでダイアクラムを表示してリレーションシップで結びます。
これで外部キーの設定が出来たと思ったのですが、そうでは無いようでした。
外部キーの設定には、また別の操作が必要でした。
ここで疑問なのですが、二つのテーブルをダイアクラムでリレーションシップの線を結んだだけの状態は、どういう状態なんですか?
0536NAME IS NULL
垢版 |
2017/11/09(木) 12:30:07.76ID:3vuEsp4f
見てのとおり、二つのテーブルをダイアクラムでリレーションシップの線を結んだだけの状態、です。
0537NAME IS NULL
垢版 |
2017/11/09(木) 13:09:26.62ID:???
>>536
なるほど。
その場合、リレーションシップを結んでいるかいないかで
それらのテーブルに対するSQLの結果が異なる場合はありますか?
つまり単に線で結んでいるだけなら、SQLには影響しないと考えて良いですか?
0538NAME IS NULL
垢版 |
2017/11/09(木) 13:19:48.42ID:???
SQL欄表示すりゃ何してるか分かるよ
0539NAME IS NULL
垢版 |
2017/11/10(金) 10:43:05.09ID:???
SQLServerというよりか、ManagementStudioの話なんですが
ビューの作成や保守が死ぬほど使いづらいです。

ダイアグラムペイン、抽出条件ペイン ともに要らなくてSQLペインのみで作業しようにも
タブ入らないし、保存後に開き直すと勝手に整形されるし・・・

ストアドの作成/保守するときと同じく
CREATE(ALTER) VIEW 〜 っていう画面にできないんでしょうか。
0541NAME IS NULL
垢版 |
2017/11/10(金) 12:56:12.39ID:???
新規クエリタブ開いてコピペしろ
アホらしいがこれが一番早い
0542NAME IS NULL
垢版 |
2017/11/10(金) 13:18:24.75ID:???
新規に作る分にはいいんですが
以前に作ったビューの手直しをするとき
SQL文を勝手に整形するのだけでも止められないですかねぇ
0543NAME IS NULL
垢版 |
2017/11/10(金) 13:22:51.03ID:???
ムリダナ(・x・)
0544NAME IS NULL
垢版 |
2017/11/10(金) 18:53:31.86ID:???
普通viewなんかexcelの計算式でviewのsql文作ってコピペで張り付けて作るだろう
項目数が100以上あろうがexcelのファイル定義書があれば数分でできるぞ
0545NAME IS NULL
垢版 |
2017/11/10(金) 18:57:49.31ID:+oA2Me4B
エクセルにsql作れる関数なんかあったっけ?
0546NAME IS NULL
垢版 |
2017/11/10(金) 19:42:05.74ID:???
>>545
関数はない計算式だよ

例えば、excelのA列にカラム名
B列に別名があったら
C列1行目に=",["&A1&"] AS ["&B1&"]"
と計算式を1つ作り下へコピーすれば
カラム部分のSQL文が簡単にできる
sumしたいカラムとかも計算式を工夫すれば簡単にできる。
0547NAME IS NULL
垢版 |
2017/11/10(金) 21:18:25.39ID:5FHSQ6Bb
そういう話ではない。初心者なのかSQLスクリプトを使用する習慣がないようだよ。
0548NAME IS NULL
垢版 |
2017/11/15(水) 10:18:50.96ID:6Q/c6Tcb
LEFT JOINする時に、両方のテーブルに例えば共通のidと言うカラムがあると、
select * from T1 left join T2 on T1.id = T2.id;
を実行すると、idのカラムが二個出て来ますよね。
それを一個にするにはどうしたら良いですか?
select * をやめて必要なカラムを書き並べて取り出すしか無いですか?
0551NAME IS NULL
垢版 |
2017/11/15(水) 11:44:10.62ID:???
内部結合ならともかく、外部結合だと
その二つは違う場合があるんだが
0553NAME IS NULL
垢版 |
2017/11/15(水) 12:19:38.98ID:2A3D0a21
で?
0554NAME IS NULL
垢版 |
2017/11/15(水) 12:29:05.63ID:???
>>548
select T1.* ,T2.hage1 ,T2.hage2 from T1 left join T2 on T1.id = T2.id;
とか T2だけカラムを羅列する
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況