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/

過去スレとかめんどいから誰か適当に貼って
0268266
垢版 |
2017/03/03(金) 06:07:27.23ID:???
>>267
そうだった、オラクルだったw

10年以上前(受託開発やってた会社の正社員時代)に使ってたからすごくなつい気分になったよ、ありがとう。
そんな俺も今じゃ客先常駐のしがない派遣社員・・・orz
0269NAME IS NULL
垢版 |
2017/03/04(土) 17:12:25.44ID:???
sql server使う人は言語はphp?
0271NAME IS NULL
垢版 |
2017/03/05(日) 06:30:37.18ID:???
sql server使う人は言語はC#?
0272NAME IS NULL
垢版 |
2017/03/05(日) 11:37:02.05ID:???
SQLServerはStandardとEnterpriseのEdition機能差が酷すぎるわ
碌に新機能使えないならStandardなんて名乗らずにLiteとかにしろよと
0273NAME IS NULL
垢版 |
2017/03/05(日) 11:41:36.54ID:???
おれは C#,C++, PowerShell 辺りが多い
0275NAME IS NULL
垢版 |
2017/03/05(日) 17:53:33.74ID:???
Javaと聞くといつも風呂釜洗浄剤を思い浮かべてしまう
0279NAME IS NULL
垢版 |
2017/03/05(日) 20:35:26.58ID:???
>>277
ado(activex data object)でやってる
マスターの更新とかデータのセットや取得はエクセルでやったほうが楽チン
0280NAME IS NULL
垢版 |
2017/03/06(月) 00:11:22.47ID:???
OLEDB廃止だったはずだけど、いまだにADOで接続できるドライバあるのか
まあ、OLEDB-ODBCで行けるっちゃいけるんだろうけど
0281NAME IS NULL
垢版 |
2017/03/08(水) 14:25:17.42ID:???
現在2012にて動いている環境を2014に移行させようと思っています。

データは毎夜間にbcpコマンドを使って取り入れており、そのコマンド・フォーマットファイル自体は既存のものを流用予定です。
で、実際に動かしてみると2014のみ

SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]キャストした文字コードが無効です。

が2レコード出ました。原因のレコードは突き止めたのですが、問題は分からず。
いろいろ試すと以下の事が分かりました。

・datetime2を使用しているカラムが怪しい?
・2レコードのうち片方のレコードを削除すると全レコード取り込みOK
・問題の1レコードの位置を最下部に移動して保存し直しすると全レコード取り込みOK
・問題の1レコードのdatetime2の最下部を1桁切ると全レコード取り込みOK

この件に関しては対応方法はあるのですが、そもそもの原因が分からないのは気持ち悪いです。
何か思いつく事はありますでしょうか?
0282resumi
垢版 |
2017/03/08(水) 17:40:19.11ID:hjh5f++s
https://goo.gl/l3fSYl
これ本当??
普通にショックだね。。
0283resumi
垢版 |
2017/03/08(水) 18:04:56.55ID:hjh5f++s
https://goo.gl/l3fSYl
これ本当??
普通にショックだね。。
0284NAME IS NULL
垢版 |
2017/03/08(水) 20:59:53.54ID:???
>>281
暗黙の型変換かなあ

bcpじゃないけどバッチ処理で値によって引っかかって
手前側でcastして明示的に型変換かけてから突っ込んだことがあるな

1レコード削除したら動くとか、ケツに持ってったら動く
とは整合性取れないけども
0285NAME IS NULL
垢版 |
2017/03/08(水) 22:54:59.32ID:???
問題のレコードの末尾にエスケープコードか何か入ってるんじゃないの?
0286NAME IS NULL
垢版 |
2017/03/09(木) 10:10:24.96ID:???
NVARCHAR内のNULL文字(NCHAR(0))を検索または置換する方法はありますか?
LIKE '%'+NCHAR(0)+'%'
REPLACE(name, NCHAR(0), '')
等を試してみましたが、だめでした。
0287NAME IS NULL
垢版 |
2017/03/09(木) 13:06:16.75ID:???
>>286
正しいやり方かどうかはわからんが
select * from table where name like N'%' + nchar(0) + N'%' collate JAPANESE_BIN
で検索できたよ
0288286
垢版 |
2017/03/09(木) 17:08:09.99ID:???
>>287
できました
ありがと
0289NAME IS NULL
垢版 |
2017/03/09(木) 17:13:43.94ID:???
SQLサーバっていまだにNとかncharとかcollateとかいるのか
0291NAME IS NULL
垢版 |
2017/03/10(金) 11:42:27.96ID:???
>>290
あ、そうなの?
最近PostgreSQLしかやってないから、他DBがどうなってるのか知らない
0292NAME IS NULL
垢版 |
2017/03/28(火) 10:32:41.51ID:???
1回目もクエリだけやたら時間がかかるっていう経験ないですか?
2回目は速い
改善する方法あったら教えてください
0293NAME IS NULL
垢版 |
2017/03/28(火) 13:20:36.85ID:???
>>292
まずは、やたら時間がかかる原因を調べる。実行計画を見るとか。

そういうクエリ自身の問題ではない場合で、以下にあてはまるのなら、0回目のクエリを発行してデータをキャッシュにのせればいい。
(0回目:データベース起動後に重いクエリを実行するとか、テーブル全体を読んでキャッシュにのせるとか)
・単に対象データを物理ディスクから大量に読む必要がある
・なおかつ何回も類似クエリを発行する必要がある
・1回目が遅いのも改善したい

キャッシュミス多発なら、キャッシュサイズを拡大する。
ハード性能的に無理なら、より性能の良いハードに乗り換える。
0294NAME IS NULL
垢版 |
2017/03/28(火) 14:33:14.80ID:???
DBサイズくらいのメモリ積め
0295NAME IS NULL
垢版 |
2017/03/28(火) 14:55:00.82ID:???
今調べたら、Windows Serverは余裕でTBの領域に入ってるな。2016でmax 24TB。
メモリは32GB*4の128GBで17万程度。
0296NAME IS NULL
垢版 |
2017/03/28(火) 16:34:29.46ID:???
ストアドにしてコンパイル済みにする手もあるが
0297NAME IS NULL
垢版 |
2017/03/30(木) 00:46:03.18ID:???
ストアドにしたって、データのキャッシュミスは減らんと思うが
コンパイル時間で1回目だけやたら時間がかかるとか、どんな複雑なクエリ書いたらそうなるってんだ
0298NAME IS NULL
垢版 |
2017/03/30(木) 15:01:26.21ID:???
>>297
単にディスクからの読み込み量が多いだけでしょ
場合によっては、その読み込みが不要な場合もあるから、1回目のクエリから高速化できかもしれん
0299NAME IS NULL
垢版 |
2017/04/02(日) 18:33:09.18ID:???
>>298
データがキャッシュにヒットする以外に
ディスクからの読み込みが不要で高速化できる場合の具体例をあげてくれ
0300NAME IS NULL
垢版 |
2017/04/03(月) 13:31:22.61ID:???
>>299
説明不足ですまん。
ディスクからの読み込みがゼロになるということじゃなくて、不要な読み込みがなくなるかもという話。
例えば、
・インデックスがなくseq scan発生
・インデックスはあるがクエリがまずくてインデックスが使われずseq scan発生
とか。
0301NAME IS NULL
垢版 |
2017/04/04(火) 08:11:48.03ID:???
>>300
それストアドにしたって解決されないわけだが
むしろ実行計画の生成タイミングで悪化する可能性もあるんじゃね
SQL Serverのストアドがいつ実行計画立てるかしらんけど
0302NAME IS NULL
垢版 |
2017/04/04(火) 10:59:56.61ID:???
>>301
ストアドは関係ないよ
クエリの内容そのものに問題があったり、indexを作ったりしたら読み込みページ数が減るかもねという話
なので、まずは実行計画を見るところから始めましょうということ
0303NAME IS NULL
垢版 |
2017/04/04(火) 11:06:24.35ID:???
舐めるデータが多くて、初回はハードディスクから、2回目以降はキャッシュされたメモリーから
だから速度が違う

ストアドにすることで、コンマ何秒かは改善するかもしれないが、その程度

あとインデックスを見直すか
0304NAME IS NULL
垢版 |
2017/04/04(火) 11:23:43.06ID:???
ストアドストアド言ってる人は、90年代に生きてるんですかね
0305NAME IS NULL
垢版 |
2017/04/04(火) 12:18:00.83ID:???
今どきはストアド使わんのがトレンディなんか?
0306NAME IS NULL
垢版 |
2017/04/04(火) 13:22:41.59ID:???
>>305
実行時間短縮が目的でストアドを使う奴はいないだろうね
0307NAME IS NULL
垢版 |
2017/04/04(火) 14:30:20.24ID:???
数百KBレベルのクエリなら、parse->palnningでコンマ何秒かかかるかもしれん
0308NAME IS NULL
垢版 |
2017/04/04(火) 19:25:55.84ID:???
>>306
関係ない事を言うのに俺にアンカつけんのやめてもらえんかな
俺までバカに見えるやろが
0310NAME IS NULL
垢版 |
2017/04/05(水) 12:26:42.39ID:???
>>309
だからなんだよ?
お前がそう思ってる事が今なんか関係あるのか?
バカしかいないのかここは
0311NAME IS NULL
垢版 |
2017/04/05(水) 13:18:00.59ID:???
>>310
> だからなんだよ?
>>305みたいなマヌケなレスするなってことだよ
そんなこともわからんバカなの?
0312NAME IS NULL
垢版 |
2017/04/05(水) 13:28:16.18ID:???
>>305
いつまでも暴れられると困るので。
> 今どきはストアド使わんのがトレンディなんか?
そういうトレンドはありません。
0313NAME IS NULL
垢版 |
2017/04/05(水) 20:27:50.95ID:???
まあしかし、ORMの普及や回線速度の向上とかでストアド不要論が優勢な流れはあるかと
昔はトラフィック減らして速度向上させるためにストアドって流れはある事はあったからな
0314NAME IS NULL
垢版 |
2017/04/05(水) 21:15:40.39ID:???
>>311
だから関係ないレスでアンカつけんのやめてもらえんかな
俺までバカに見えるやろが
0315NAME IS NULL
垢版 |
2017/04/05(水) 21:58:10.55ID:???
>>313
SQLSeverと親和性高いC#がEF推しているのを見ると不要論が優勢でも不思議じゃないな
0317NAME IS NULL
垢版 |
2017/04/06(木) 10:50:33.00ID:???
>>313,315
ORMやEFが広まれば、よりストアドプロシージャ・ファンクションの需要が高まる気がするが。
ドメインロジックはサーバ側で実装し、クライアントはそれを使用するだけというスタイル。
0318NAME IS NULL
垢版 |
2017/04/06(木) 13:19:00.97ID:???
そんな思想があったらRailsなんぞ流行らんわ
何処の時空の話だよ
0319NAME IS NULL
垢版 |
2017/04/06(木) 13:59:58.76ID:???
>>318
まぁ、RailsだろうがEFだろうが、データをどかっと取ってきて、クライアントコードで
ごりごりドメインロジックを実装するような層には関係ない話かな。
0320NAME IS NULL
垢版 |
2017/04/06(木) 14:11:49.32ID:???
そんな話じゃねえよ
EFが何しにPOCOなんての売りにしてたかって話だ
0321NAME IS NULL
垢版 |
2017/04/06(木) 15:42:00.99ID:???
>>320
つまりは、
> データをどかっと取ってきて、クライアントコードで
> ごりごりドメインロジックを実装する
ということだろ?
POCOメインのプログラマには関係ない話だよ。

そんな話じゃないなら、どんな話なんだ?
0322NAME IS NULL
垢版 |
2017/04/06(木) 15:53:14.04ID:???
DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな
0323NAME IS NULL
垢版 |
2017/04/06(木) 15:58:59.46ID:???
>>322
> DB側でスキーマ書いて処理も書いてってのが古い思想という話をしている
なるほどね。
でも、ドメインロジックをデータベース側に寄せるか、クライアント側に寄せるかという問題は、
今でも存在する。ふるいも新しいもないと思うが。

> 開発スピードが無闇に上がってスキーマ変更朝令暮改でって今時はな
それこそ、データベース側にドメインロジックの実装を寄せた方がいいのでは?
0324NAME IS NULL
垢版 |
2017/04/06(木) 16:05:36.81ID:???
例えば、2003年のMartin Fowlerのブログポスト:
『ドメインロジックとSQL』
http://bliki-ja.github.io/DomainLogicAndSQL/

ここに書かれていることは、全然古いとは思わない。
逆に、自動生成されるコードをメインに使うようになる場合は、ドメインロジックを
ストアドファンクションで実装してViewにした方がいい場合も結構あると思うんだが。
0325NAME IS NULL
垢版 |
2017/04/06(木) 16:19:28.98ID:???
昔々のウォーターフォールで上流で設計決まる時代ならそれもよかろうさ
だが今はデータ構造から卓袱台返される
その時アプリとDB両方に手ぇ入れるのと
アプリだけで済むのとどっちが早いか?
自明だろ
0326NAME IS NULL
垢版 |
2017/04/06(木) 18:53:09.88ID:???
DB側でごりごり書いたストアドって、InMemoryでUnitTestできるのかい?
0327NAME IS NULL
垢版 |
2017/04/06(木) 20:44:49.38ID:???
Web系とかで高速開発/デプロイな現場なら
コードファーストも面白いし効率あがりそうと思うけど
DevOpsの時代っても考えなしに書くでなし
結局はV字開発なんだからDB側でスキーマ決めるくらい
やれば?みたいな思いはあるな古い考えなんだろうけど

SIerソルジャーだから>>324もよくわかる
SQL一発取得+コーディングレスなアプローチが
楽/効率的な局面は現場じゃザラにあるよねえ

SSRS/PowerBIとかDataSpiderだの触るととくにそう
ストアド書いてぽちぽちするだけでけっこう
運用に耐えるもんできるし変更追従も保守も楽だしな
基幹から社内向けWebで集計帳票や明細表な要件なら
SQL以外のコーディング自体がそもそもバカバカしい
0328NAME IS NULL
垢版 |
2017/04/08(土) 22:23:48.60ID:???
>>327
純粋なコードファーストはある程度以上の規模だと使い物にならんと思ってた
スキーマはDB側でかっちり決めんと話にならんだろうと

これが古い考えだと言われればそうなんだろうかと思ってた
が、既存のデータベースからコードファーストなんて手法が出来た所を見ると
やはりスキーマをDB側で決めるのは今でも必要なんじゃないか

ストアドにいろんなものを閉じ込めるのは、手法の新旧で言えばそれこそ古い手法だと思う
ストアドの保守はアプリの保守よりコストが高いのが現状じゃないかと思う
ストアドの保守がアプリの保守より低コストだって言う所ならそれを採用するのもありなんだろうけど
0330NAME IS NULL
垢版 |
2017/04/09(日) 18:40:23.01ID:???
with(nolock)をselect文全てに付けるとヤヴァイ?
ググったらコミット前のデータが返ってくるとか
ページ分割が起こった場合行の重複や欠落が発生するとか書いてあるけど
今仕事で触ってる既存のselect文のコード全部そうなってる
0331NAME IS NULL
垢版 |
2017/04/09(日) 19:22:13.71ID:???
ヤバイかどうかは業務内容による
0332NAME IS NULL
垢版 |
2017/04/10(月) 14:48:01.02ID:???
>>329
質問の真意が図りかねるが
>ストアドにいろんなものを閉じ込める
の事であるなら、たとえば
ビジネスロジックをストアドとして実装することや
DBアクセスの結果をストアドの帰りとすることでスキーマ変更をアプリに意識させないこと
などの手法を指してる

純粋にストアドの意味が分からないなら
DBに格納できる一連の手続きかな
0333NAME IS NULL
垢版 |
2017/04/10(月) 15:17:23.17ID:???
>>330
常に1スレッドからしか触られない前提なら別にヤバくない
0334NAME IS NULL
垢版 |
2017/04/10(月) 22:02:15.03ID:mMYNtWws
ストアドってPGのたしなみとして
できて当たり前だと思うけど
今の新人は>>329みたいなのが
多いのか。
0335NAME IS NULL
垢版 |
2017/04/11(火) 07:27:15.05ID:???
>>333
誰も同時に触らないならnolock必要なくね?
何のために入れたのやら

何処かでnolock入れると速くなるよ!とかデッドロック回避できるよってのを聞いてよく考えずに入れたのか

同時に一人(1スレッド?)しか触らないなら
2つのロックが対立することは無いんだから
0336NAME IS NULL
垢版 |
2017/04/11(火) 13:39:32.49ID:???
>>335
nolock指定すれば雀の涙ほど速くなる
それ以外の理由? 知らんそんなものは管轄外だ
0337NAME IS NULL
垢版 |
2017/04/11(火) 19:12:06.12ID:???
Hyperーvのレプリカサーバーに入っているSQLSERVERもライセンスって必要ですか?
0338NAME IS NULL
垢版 |
2017/04/11(火) 19:42:30.31ID:???
>>337
OSのライセンスが2つ必要ならそりゃSQLServerのライセンスも同じじゃね
0339NAME IS NULL
垢版 |
2017/04/11(火) 20:03:02.82ID:???
>>338
ありがとうございました。
不要と理解しました
0340NAME IS NULL
垢版 |
2017/04/12(水) 01:11:00.92ID:???
>>333,335
スレッド一つでも複数コネクション持ってゴニョゴニョすると問題が出る気がする
0341NAME IS NULL
垢版 |
2017/04/12(水) 03:42:34.42ID:???
>>340
さすがにそれはない
まさかCOMMITせん訳でもあるまい?
0342NAME IS NULL
垢版 |
2017/04/12(水) 06:15:01.88ID:???
>>330
マルチスレッドの場合でも全トランザクションを
同期化してスレッドセーフにすればヤバくない
0343NAME IS NULL
垢版 |
2017/04/13(木) 00:21:38.38ID:???
>>341
コミットしてから次のトランザクション始めるならコネクション二つとか必要ないだろ
ようは同時実行するトランザクションがあるかどうかで、スレッドとか関係ないって話
0344NAME IS NULL
垢版 |
2017/04/13(木) 14:55:41.05ID:???
スレッド内でトランザクション完了しないで別のトランザクション始めるとかどんな状況だよ
特にSQLServerだと無駄に昇格起こってMSDTCエラー起こすぞ
0345NAME IS NULL
垢版 |
2017/04/13(木) 15:49:12.08ID:???
スレッドがどうこうとか、あんまり関係ない。
別プロセスでも話は同じ。

要は、トランザクション分離レベルがダーティーリードになっても大丈夫かどうかで決定すべき。
ダーティーリードとは、自分以外の誰か(別プロセスも含む)のコミット前のデータを読むことに
なっても問題ないかどうかという話。
0346NAME IS NULL
垢版 |
2017/04/13(木) 17:00:25.60ID:???
>>344
シーケンスなかった時に、連番とるためにやったことあるわ
0349NAME IS NULL
垢版 |
2017/04/13(木) 19:49:56.90ID:???
>>347-348
まさかと思うが入れ子トランザクションでドヤってんじゃあるまいな…?
0350NAME IS NULL
垢版 |
2017/04/13(木) 20:10:39.13ID:???
>>349
何のために別にコネクション(トランザクション)が必要か考えたら
入れ子トランザクションではダメなことぐらいわかるだろうに
0351NAME IS NULL
垢版 |
2017/04/13(木) 20:15:54.97ID:???
>>350
連番取るのにトランザクション外からやるっての?
ますますもって意味わからんぞ
0352NAME IS NULL
垢版 |
2017/04/13(木) 21:36:54.46ID:???
>>351
連番管理用のテーブルと、連番を利用するテーブルを別のテーブルにするんだよ
短時間で終わる連番の発行と、時間のかかる更新系の処理を別トランザクションにすることで
連番管理用のテーブルのロックを解放する
0355NAME IS NULL
垢版 |
2017/04/14(金) 11:06:49.82ID:???
結論は何も考えずにnolock入れるつもりなら止めとけってことじゃないの
0358NAME IS NULL
垢版 |
2017/04/14(金) 20:02:12.33ID:???
>>354
今時の代替手段はどんなの?

>>356
何を懸念してるか知らんが問題ない
欠番の発生は想定内
0360NAME IS NULL
垢版 |
2017/04/14(金) 20:31:11.74ID:???
>>358
> 今時の代替手段はどんなの?
シーケンスだろ
0361NAME IS NULL
垢版 |
2017/04/14(金) 21:37:16.31ID:???
シーケンス互換性ないじゃん
0362NAME IS NULL
垢版 |
2017/04/15(土) 14:02:49.32ID:???
>>361
シーケンスと何が互換性ないって?
0363NAME IS NULL
垢版 |
2017/04/16(日) 08:42:49.91ID:???
>>362
違う
シーケンスとかIDENTITYは製品間で互換性無いって言ってんだろ
0364NAME IS NULL
垢版 |
2017/04/17(月) 00:45:52.25ID:???
今の流れでそれがどうだと?
0365NAME IS NULL
垢版 |
2017/04/17(月) 13:04:14.32ID:???
シーケンスって…なに?
0367NAME IS NULL
垢版 |
2017/04/17(月) 16:51:13.99ID:???
何でこの程度のことググらないのか、毎度ながら不思議
■ このスレッドは過去ログ倉庫に格納されています

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