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/

過去スレとかめんどいから誰か適当に貼って
0197NAME IS NULL
垢版 |
2016/12/02(金) 15:28:09.53ID:???
どうやったらInsとupd間違うんだろう
where句なしで実行ってこと?
ORマッパーみたいなツールの話だろうか
0198NAME IS NULL
垢版 |
2016/12/02(金) 15:30:42.82ID:???
言ってる意味がわからないけど
col2がidentityならそれでユニークは保障されるから
col1とcol3が全部同じでもなんの不思議もない

どう間違えたらinsert文がupdate文になるのか知らんが
そういうSQL流したんだろ
0199NAME IS NULL
垢版 |
2016/12/02(金) 17:00:30.97ID:???
col1   col2    col3
Aさん    1    データ1
Aさん    2    データ2
Aさん    3    データ3
Bさん    4    データ4
Cさん    5    データ5
Cさん    6    データ6

col1   col2    col3
Aさん    1    データ1
Aさん    2    データ1
Aさん    3    データ1
Aさん    4    データ1
Aさん    5    データ1
Aさん    6    データ1
こんなふうになりました。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0200NAME IS NULL
垢版 |
2016/12/02(金) 17:54:06.99ID:???
update 表名
set col1 = 'Aさん',col3 = 'データ1'

以外でこうなるSQLを考えるクイズの時間です
0201NAME IS NULL
垢版 |
2016/12/02(金) 18:25:05.90ID:???
>>196
つか、そもそもそのテーブルのPKがおかしい。
0202NAME IS NULL
垢版 |
2016/12/03(土) 09:08:53.55ID:???
>>201
複合主キーじゃあないの?
どのあたりがおかしい?
0203NAME IS NULL
垢版 |
2016/12/03(土) 18:56:22.41ID:???
>>202
普通 Identity だけにしないか?
複合にする意図がわからん
0204NAME IS NULL
垢版 |
2016/12/03(土) 19:34:14.99ID:???
clo2は単にユニーク保障のためだけで、実質はcol1+連番がキーなんだろ
そういう意図を表すためには複合主キーで良いんじゃね

あくまでcol2単独の検索はしない前提たが
インデックスがcol1からの(クラスタ化)インデックスひとつで済むってメリットもあるかもしれんw
0205NAME IS NULL
垢版 |
2016/12/03(土) 20:22:19.14ID:???
>>204
> そういう意図を表すため
いやその「そう言う意図」がイミフなんだが
0206NAME IS NULL
垢版 |
2016/12/04(日) 10:31:37.61ID:???
>196
のような手法は一般には使わないの?
0207NAME IS NULL
垢版 |
2016/12/04(日) 10:45:59.24ID:5zb5esCr
insertのつもりでupdateしてしまう手法のことか?
0208NAME IS NULL
垢版 |
2016/12/04(日) 11:20:07.32ID:???
>>196 のような手法
って言うのが Identity + 他の何か を複合キーにすると言う話なら俺は見たことはない
むしろ >>207 の言ってる方がまだあり得る
0210NAME IS NULL
垢版 |
2016/12/15(木) 15:38:31.31ID:???
調べものしててmsdnのサイト見てたら2016の次にVNextとかいうのがでてた
早いなあと思ってたら2016のSP1が既に出てて驚愕
Microsoftなんか焦ってる?
0211NAME IS NULL
垢版 |
2016/12/17(土) 16:44:00.77ID:???
linux版はvNext相当だっけ
0212NAME IS NULL
垢版 |
2016/12/21(水) 10:18:02.84ID:???
VPSでSQL SERVER EXPRESS 2016を使う場合には最低限どんなスペックが必要かな?
運用中の人がいたらCPU数、メモリGBなどアドバイスが欲しい。
0213NAME IS NULL
垢版 |
2016/12/21(水) 18:43:55.62ID:???
規模も用途も書かんのなら、公式の動作環境以上の回答があるとは思えんが
0214NAME IS NULL
垢版 |
2017/01/18(水) 23:26:29.67ID:???
カーソルのFAST_FORWARDって内部で何してるの?
INSENSITIVEやFORWARD_ONLYだとmaxdop数分のスレッドでカーソルオープンしてるのに、FAST_FORWARDだと1dopになる
クエリは単一テーブルのselect文で、group by、order by句がある
msdnのカーソルのとこ読んだけどわかんなかったよ
ちな2014のsp2です
0215NAME IS NULL
垢版 |
2017/02/01(水) 11:41:06.33ID:???
入門書としておすすめの書籍ある?
0216NAME IS NULL
垢版 |
2017/02/03(金) 18:34:25.46ID:0GL48OMF
2014でレプリケーションができないです
配布元のデータができないです
リカバリする方法ないでしょか?
0218NAME IS NULL
垢版 |
2017/02/04(土) 19:51:14.97ID:???
sql サーバーってマルチコアcpuで実行すると並列で処理されてレスポンス速くなったりするの?
0221NAME IS NULL
垢版 |
2017/02/04(土) 23:23:46.43ID:???
レスポンス変わるだろうけど、ディスクアクセスの要素のほうが強くて条件次第では大幅に、とはいかなそうね
0222NAME IS NULL
垢版 |
2017/02/05(日) 02:38:35.83ID:???
2016 express版を使っています。
20万件くらいのテーブルから全件をorder byして取り出すだけで
20秒くらいかかるんです、そんなもんですか?
0223NAME IS NULL
垢版 |
2017/02/05(日) 07:46:27.65ID:???
>>222
なんにもしなきゃそんなもんでしょ
0224NAME IS NULL
垢版 |
2017/02/05(日) 08:10:32.76ID:???
>>223
速くする方法を教えて下さい。
データは1時間に一回くらい更新されるので、例えばその時にorder byした
データを作成しておけば良いかなあと思うのですが、そういう方式で速くなりますか?
0227NAME IS NULL
垢版 |
2017/02/05(日) 09:07:02.46ID:???
>>225
なんですかそれは?
>>226
ああ、勘違いでした。
order byしてもしなくてもクエリ自体は一瞬で終わっていました。
時間が掛かるのは
C#でDataTableにloadで読み出しているところでした。
1行が1KBくらいのデータ
200,000行なので、200MBくらいのデータを読み出している計算になりますか。
その場合、20秒くらい掛かるもんですか?1秒以内くらいにできますか?
0231NAME IS NULL
垢版 |
2017/02/07(火) 11:16:26.90ID:???
sql serverとsql server express は速さは違うのでしょうか?
0235NAME IS NULL
垢版 |
2017/02/07(火) 12:57:17.68ID:???
>>231
条件による
使えるメモリーとかコア数違うから
0237NAME IS NULL
垢版 |
2017/02/07(火) 18:00:30.07ID:???
なんだこのアホなやりとりは
0238NAME IS NULL
垢版 |
2017/02/07(火) 19:31:44.18ID:???
レス古事記だろ
スルーでいいよ
0239NAME IS NULL
垢版 |
2017/02/21(火) 14:26:23.03ID:???
updateするときに、違いがなかったらupdateされないようにしたいです。
(トリガーで履歴を取っているのと、timestamp列が無駄に変わるのを防ぎたいため)

そこで、updateのwhereに
binary_checksum(項目1,項目2,項目3,・・・)<>binary_checksum(@項目1,@項目2,@項目3,・・・)
ってのを追加してます。

概ねいいんですが、かなり単純な条件でコンフリクトが発生しました。
bit型の項目1と項目9があって、項目1:1→0,項目9:0→1 のとき、binary_checksumが一緒になるという・・・

HashBytes だと () の中に複数の項目が書けません。
binary_checksumみたいな () に複数項目が書けるもので、もうちょっとコンフリクト起きにくいなにかないですか。
0240NAME IS NULL
垢版 |
2017/02/21(火) 14:48:31.75ID:???
>>239
コンフリクトの使い方間違ってるんじゃないか?

それはともかく、単純にwhere old_item1 <> new_item1 or old_item2 <> new_item2 or ...
ってやるのは駄目なのか?
0241NAME IS NULL
垢版 |
2017/02/22(水) 08:27:45.48ID:???
binary_checksumがどうやって計算してるかしらんが、たとえば単純なsumだったら
(1,0)と(0,1)が同じ値になるのは当然だわな
素直に全項目比較する方がいいんじゃね

どういう状況かわからんが、本来はホストアプリ側で更新する(UPDATE発行する)かどうか判断するべきだと思うけどな
0242239
垢版 |
2017/02/22(水) 10:07:47.80ID:???
ありがとうございます。
仕方ないので
where ・・・ and (binary_checksum(項目1)<>binary_checksum(@項目1) or binary_checksum(項目2)<>binary_checksum(@項目2) ・・・)
という風にやりました。
HashBytesにしなかった理由は、項目1つならコンフリクトの可能性が低いと判断したためです。
(演算の軽いほうで)
0243NAME IS NULL
垢版 |
2017/02/22(水) 21:31:00.62ID:???
SQLServerを使用したいと思っているのですが、全くの無知なので教えて頂きたいです。

現在、accessを使用しています。
接続人数は3人(3台)で、バックエンドデータを1つ作成しフロントエンドを3台に配布してリンクテーブルを使って使用しています。
最近、同時接続時にクエリ実行が遅くなってきて困っています。

このバックエンドデータをSQLServerに移し、ODBC接続でリンクすればクエリ速度等は解決するのでしょうか?
また、SQLServerに移行したとしてもフロントエンドのacceesでは同じようにクエリやVBAでテーブルの印刷処理やクエリでの更新等も特に設定などを変えずにそのまま使用出来るのでしょうか?

初歩的なことだと思うのですがよろしくお願いします。
0244NAME IS NULL
垢版 |
2017/02/22(水) 21:55:11.78ID:???
>>243
とりあえずやってみると良いよ
費用かからないし
しかし今時こんなが環境あるんかな
20年くらい昔によくあったやつ
0245NAME IS NULL
垢版 |
2017/02/22(水) 23:17:15.03ID:???
>>243
アップサイズは全部が全部改善するとは限りませんが基本的には改善します
下の方が書かれている様に、まずやってみると良いですよ
これくらいか〜と体感できますので

ODBCリンクであれば基本的にフロントのAccessはそのまま使用できます
SQL Serverは文字コード、ソート順、キー、インデックス
くらいは確認しておいた方が良いですよ
0246NAME IS NULL
垢版 |
2017/02/23(木) 12:33:19.21ID:???
>>244
>>245
有り難うございます。
バックエンドをSQLServerに移行すると、フロントエンドでのVBAやクエリでの処理が今まで通り使えるのかが分からずに悩んでいました。

基本的には、バックエンドがacceesファイルからSQLServerに替わっても、特に編集し直すこともなくフロントエンドを使用することが出来るで大丈夫ですか?
0247NAME IS NULL
垢版 |
2017/02/23(木) 14:40:40.20ID:???
>>246
.mdb or .accdbでODBC接続なら編集不要だと思うけど
SQL SERVERの照合順序は気を付けて
照合順序はアプリ側の実装に依存するから自力で調べて
0248NAME IS NULL
垢版 |
2017/02/23(木) 18:48:24.75ID:???
>>247
助言有り難うございます。
accdbなのでそのまま使えそうです。

とりあえず、SQLServerをインストール、accessデータをインポートしODBC接続までしました。
何故かテーブルデータをフロントエンドのaccessで編集出来なかったのですが、主キーが設定されてないのか、ファイアーウォールがまだ未設定だからなのか調べ中です。

疑問なのですが、
10万件のデータがあり、1件のデータを更新したい為に、単純な更新クエリを作成したとします。
単純な更新クエリなので抽出や選択もなく、10万件の全てのデータが更新されます。つまり9万9999件は無駄な更新です。
これをaccessデータのリンクテーブルではかなり時間がかかりますが、SQLServerでのリンクテーブルでは数秒で処理が終わるほど変化があるのでしょうか?
それとも、このような無駄なクエリではあまり速度は変わらず、クエリ自体を考え直すべきなのでしょうか?
0249NAME IS NULL
垢版 |
2017/02/23(木) 20:18:10.72ID:???
>>248
テーブル編集はSQL Server Management Studioを使うか、DDL直接投げるか
単純なUPDATEなら10万レコードだろうが一瞬で終わるよ(※データ量次第)
0250NAME IS NULL
垢版 |
2017/02/23(木) 20:51:17.86ID:/7OWtulZ
思わせぶりな※
0251NAME IS NULL
垢版 |
2017/02/23(木) 21:19:27.58ID:???
>>248
昔のAccessしか知らないけど
主キー無い場合はテーブルリンク作成時にキー項目選択するとかだったはず
当然可能なら主キーは設定すべきだけど

「9万9999件は無駄な更新」ってのが意味不明
何万件あろうが更新対象が1件の場合は1件しか更新しないよ
その場合の更新は文字通り一瞬で終わる
0252NAME IS NULL
垢版 |
2017/02/23(木) 22:30:45.12ID:???
>>249
フロントエンドのフォームでテーブルのデータは編集出来ないのでしょうか?
>>251
私の勘違いでしょうか。
いつも日報等で更新したいデータはカレントレコードの1件なのですが、更新クエリを使うと〜万件(全件)のデータを更新します、と表示されて、数分かかります。
クエリはフィールドAが空白ならフィールドBに"合格"の文字、フィールドAが空白以外なら"不合格"の文字を入れる、というクエリです。
これでは全レコードがクエリの対象になっていると解釈すべきですか。
0253NAME IS NULL
垢版 |
2017/02/24(金) 02:51:11.36ID:???
>>252
テーブル開いてデータ変更できるよ
更新権限のないユーザーで接続してると思う
0254NAME IS NULL
垢版 |
2017/02/24(金) 06:17:19.75ID:???
>>252
このロジックだったら全件更新だよ

以下なら2件の更新になるよ
それでも時間かかる場合はAとBのインデックスを作成すれば一瞬で終わる
Aが空白でBが合格以外の場合は、Bに合格を入れる
Aが空白以外でBが合格の場合は、Bに不合格を入れる
0255NAME IS NULL
垢版 |
2017/02/24(金) 07:23:35.87ID:???
>>252
> いつも日報等で更新したいデータはカレントレコードの1件
そのレコードを抽出する選択クエリを作成すればいいだけじゃね?
0256NAME IS NULL
垢版 |
2017/02/24(金) 11:13:40.64ID:???
>>252
>全レコードがクエリの対象になっていると解釈すべきですか
どんなクエリ(SQL)流したかとどんなテーブル(インデックス)だったか分からんと分からん
が、全件読み込んでる可能性が高いなぁ

>>254
クエリの検索条件にACCESSの関数入れたりしたら全件取得するかもしれんぞ

メインはサーバ側の話じゃなくてACCESSの動作の話だし
ACCESSのスレ探すが作るかして移動したほうが良いんじゃね
0257NAME IS NULL
垢版 |
2017/02/24(金) 12:27:49.62ID:???
皆様有り難うございます。一度クエリを見直してみます。

色々と調べたのですが、単純なフロントエンドをaccess、バックエンドをSQL ServerでODBC接続では、
クエリ等の処理はサーバー側でななくクライアント側で処理されるのであまり速度の恩恵はないと見たのですが、やはりそうなのでしょうか?
これをサーバー側で処理する場合、かなりVBA等の手直しが必要なそうですが、そこまでいくと素人レベルでは難しそうです。
0258NAME IS NULL
垢版 |
2017/02/25(土) 03:47:54.77ID:???
やってみてそう感じたなら恩恵はないんだろうね
0259NAME IS NULL
垢版 |
2017/02/25(土) 11:50:18.21ID:???
>>257
SQL文の実行はAccessではなくSQL Serverだよ

>>254で改善できると思われ
0260NAME IS NULL
垢版 |
2017/02/25(土) 17:40:28.48ID:???
>>259
有り難うございます。
SQL文はSQL Serverで処理されるのですね。

今の解釈としては
accessのみのリンクされたデータベースでは、処理は全てクライアント側の仕事になりネットワークトラフィックが膨大になる。
SQL ServerとのODBCのリンクテーブルでは、SQL文をSQL Serverに渡し、SQL Serverが処理を行い、その解をクライアントに渡すのでネットワークトラフィックが少なくてすむ。
という理解で大丈夫でしょうか?

今までクエリ処理が重かったので、VBAを使ってきたのですが、出来るものはクエリに変えた方がいいのでしょうか?
0261NAME IS NULL
垢版 |
2017/02/25(土) 19:54:24.52ID:???
アクセスでodbcリンクテーブルを使うとデータが多いと遅いから
更新ない一覧表示とかの時はパススルークエリ使ったほうがいいと思うわ
0262NAME IS NULL
垢版 |
2017/02/25(土) 23:10:34.44ID:???
>>260
>SQL文をSQL Serverに渡し、SQL Serverが処理を行い
は正しいんだが、実行する内容によって、まずACCESSがどんなSQLを発行するか
その結果を受け取った後にどんな処理をするかによるので
>ネットワークトラフィックが少なくてすむ
とは限らん
>>254で言ってるように、検索条件にACCESSの関数入るような処理だと結局ACCESS側で全件取得して検査するかもしれん
なんにしてもACCESSの話だからこれ以上はどっか移動しろ
0263NAME IS NULL
垢版 |
2017/02/26(日) 23:01:28.87ID:???
「上位200行を編集」で表示されたデータを全選択してコピーすると
選択したデータにはあった括弧などの文字が欠落してコピーされる」みたいになバグがSqlServerにあると聞いたのですが
本当なのでしょうか?(例えば"(ABC)"を選択してコピーし、メモ帳などに貼り付けると"(ABC"になってたなど)
0264NAME IS NULL
垢版 |
2017/02/26(日) 23:28:44.28ID:???
なんでどこで聞いたか言わないのかねえ
0265NAME IS NULL
垢版 |
2017/02/27(月) 08:15:54.58ID:???
自分で試せる環境はないのかね。
0266NAME IS NULL
垢版 |
2017/03/03(金) 00:00:11.98ID:???
VB6からSqlServerに接続する時はoo4oとかいうのを使うんだっけ?
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:???
ストアドにしてコンパイル済みにする手もあるが
■ このスレッドは過去ログ倉庫に格納されています

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