X



トップページDB@2ch掲示板
1002コメント327KB
Microsoft SQL Server 総合スレ 11 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001NAME IS NULL垢版2016/05/29(日) 16:50:08.13ID:dqKJQypQ
Microsoft SQL Server (Transact-SQL) の総合スレッドです。

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

過去スレとかめんどいから誰か適当に貼って
0820NAME IS NULL垢版2018/05/29(火) 09:13:12.99ID:???
中小でも社内で完結させられるならExpressで十分だしな。同時接続の人数によるが。
サイズオーバーしてもDB分ければいいし。
0821NAME IS NULL垢版2018/05/29(火) 12:18:56.63ID:7/O8R114
企業でexpressはほぼほぼライセンス違反とちゃうんか?
知らんけど
0822NAME IS NULL垢版2018/05/29(火) 13:25:46.38ID:???
expressは商用おkやぞ
ダメなのはDeveloper
0823NAME IS NULL垢版2018/05/29(火) 16:56:50.03ID:???
クライアントOSでやるとそっちのライセンスに引っかかるけどな
0825NAME IS NULL垢版2018/05/29(火) 21:20:02.44ID:Ay/YE4Sk
>>823
おまえのせいでアホにアホって言われてもうたわ
どう責任とってくれんねん
0827NAME IS NULL垢版2018/06/16(土) 13:18:37.96ID:???
bcp って評価はどうなの?
0828NAME IS NULL垢版2018/06/16(土) 18:31:45.50ID:UP0xR2sD
>>827
未だにダブルクォートとかの囲み文字付きファイルや改行入りが処理できない駄目ツール
(SSISではできるのに)
パフォーマンスはそこそこ。
あなたの評価は?
0829NAME IS NULL垢版2018/06/16(土) 23:26:28.39ID:???
SQL Server PowerShellってどうなの?
0830NAME IS NULL垢版2018/06/17(日) 00:38:22.75ID:DF4YrmFv
>>828
SSISも勝手にやられてしまう仕様が多くて使いづらいけどな。
0831NAME IS NULL垢版2018/06/21(木) 09:34:01.43ID:???
セッションの確認の事で教えてください。

物理的に別々の2つのサーバにそれぞれSQL Sever 2005が入っています。
それぞれの現在のセッション数を調べたく、以下のSQL文を実行するアプリを作りました。

select hostname, count(*) from master..sysprocesses where hostname != '' group by hostname

一方のSQL Serverはうまくセッションを取得できたのですが、もう一方の方は自分のアプリ分のセッションしか見えてきません。
SQL Serverの方の設定とか関係してるのでしょうか?他の方法でもいいのですが、うまくセッションの状態を調べる方法があれば教えてください。

ちなみに接続文字列は以下でアクセスしています。
Data Source=xx;Initial Catalog=DvtReport;Persist Security Info=True;User ID=xx;Password=xx;Pooling=false;
0832NAME IS NULL垢版2018/06/21(木) 13:35:19.88ID:???
普通に考えて、そのログインの権限が違うんだろ
0833NAME IS NULL垢版2018/06/21(木) 14:04:47.96ID:???
>>832
ありがとうございました。見えました。
アホな質問ですみませんでした。
0834NAME IS NULL垢版2018/06/23(土) 15:02:34.02ID:???
一般的に接続の作成、開放はコストが高いと言うけど、この場合のコストって何?
クライアントから見た時間は当然として、サーバー側はどんなコストがかかるの?やっぱりその間の処理が重くなるとかあるのかな?
0835NAME IS NULL垢版2018/06/23(土) 15:16:13.35ID:tpSzsfc7
>>834
0836NAME IS NULL垢版2018/06/23(土) 17:02:33.78ID:???
コスト=負荷と思っとけ
接続口を作るのはOSとやり取りするからけっこう大変な処理
0837NAME IS NULL垢版2018/06/23(土) 21:08:58.69ID:???
>>834
サーバはリソース(CPUとメモリ)
クライアントは時間
0838NAME IS NULL垢版2018/06/23(土) 21:40:32.04ID:???
>>836 >>837
例えば常時だいたい100くらいセッションがプールされてるとして、新たに100のクライアントが増える場合、サーバーにとって100プールが増えるのと増加100分は毎回接続、開放してもらうのと、どっちがいいかな?
0839NAME IS NULL垢版2018/06/23(土) 22:29:07.38ID:???
そもそもサーバは接続プールとかしてるのかね
プールしてるならなおさら、クライアントは毎回解放してもらわんとプールが有効に使えないわけだが
0840NAME IS NULL垢版2018/06/23(土) 22:30:11.62ID:???
そもそもサーバは接続プールとかしてるのかね
プールしてるならなおさら、クライアントは毎回解放してもらわんとプールが有効に使えないわけだが
0841NAME IS NULL垢版2018/06/23(土) 22:46:40.47ID:???
>>838
プールはクライアント側の実装だからサーバにとっては単に長時間の接続でしかない
サーバが許容する上限を超えるまではプールしたほうが良いことが多いが、
限界をこえるようなら毎回接続開放するしかない
クライアントの数が多いとか、接続毎のクエリ発行頻度が低い場合は
プールせずにこまめに切断したほうが良いこともある
0842NAME IS NULL垢版2018/06/24(日) 10:15:42.74ID:???
SSMS の軽量版、簡易版を出してほしい。
DB管理者向け機能を省略し、一般ユーザ向けのバージョン。
0843NAME IS NULL垢版2018/06/24(日) 10:24:36.26ID:???
SSMS に一般ユーザーが使う機能なんてあるか?
0844NAME IS NULL垢版2018/06/24(日) 13:04:29.63ID:???
え?SSMSって一般ユーザがSQL投げて問合せするツールじゃないの?
0845NAME IS NULL垢版2018/06/24(日) 13:31:19.84ID:???
テーブル間にリレーション定義してあって着目セルがリンク対象だったとき
右クリとかでリンク先の該当テーブル表示、みたいなところまでやってもらいたいところだ
0846NAME IS NULL垢版2018/06/24(日) 13:51:04.78ID:???
リレーションシップなんて飾りです 偉い人にはそれがわからんのですよ
0847NAME IS NULL垢版2018/06/24(日) 13:54:29.71ID:???
SQL投げてる時点で一般ユーザーじゃねーだろ
0849NAME IS NULL垢版2018/06/24(日) 17:14:17.60ID:???
SQL分からんようなやつに直接触らせるDBはねーよ
0850NAME IS NULL垢版2018/06/24(日) 17:16:02.63ID:???
おまえに食わせるSQLはねぇ!
0851NAME IS NULL垢版2018/06/24(日) 19:11:03.77ID:???
ssmsの悪い所は
オブジェクトエクスプローラがテーブルやプロシージャ含めて全てツリー表示している所だな
増えてくるとスクロールが大変。
それからテーブルやビューを見るとき次々タブが増えてどれ修正していたのかわからなくなる

SIオブジェクトプラザという有料のツールだとそこら変うまく出来てる
データベースをまたぐ依存関係もわかる
だけど高いのと時々固まるのでおすすめできない
0852NAME IS NULL垢版2018/06/24(日) 19:40:37.73ID:???
>>851
>次々タブが増えて

JaneStyleみたいにタブが横方向に表示しきれなくなるたびに縦方向に1段増やすようにして欲しいね
0853NAME IS NULL垢版2018/06/24(日) 23:23:46.74ID:???
昔はエンドユーザーがSQLを投げていた。あな恐ろしや
0854NAME IS NULL垢版2018/06/30(土) 10:49:48.52ID:???
bcp はデータのインポート、エクスポートが主目的。
sqlcmd は SSMS の簡易なCUI版アプリケーション。オラクルでいうところの sqlplus。

っていう位置づけでよろしいか。
0855NAME IS NULL垢版2018/07/01(日) 13:16:46.05ID:iOtlwpag
>>854
bcpはOracle Databaseで言えばSQL*Loaderにあたるもの。
0856NAME IS NULL垢版2018/07/04(水) 22:27:52.09ID:???
最近は、mssql-cli というのもあるね
0858NAME IS NULL垢版2018/07/11(水) 01:23:22.13ID:???
>>853
select権限だけなんだから好きにしろって話だろw
0859NAME IS NULL垢版2018/07/12(木) 12:54:12.43ID:/YTA8M6s
【上流きどり、都民″】 マ7トLーヤ『大洪水は都会人の弱者切捨ての結果、大地震は核爆発の結果』
http://rosie.5ch.net/test/read.cgi/liveplus/1531363082/l50


豪雨のどさくさにカジノ法案強行、火事場泥棒!
0860NAME IS NULL垢版2018/07/12(木) 21:34:55.74ID:RO0MxO/p
一日に数件のレコード(数百文字くらい)が新規に追加されるDBなのだが、
追加されたタイミングで自分宛てに通知メールを送ったり出来ますか?
メール本文には追加されたテキストデータが有れば尚良し。
0861NAME IS NULL垢版2018/07/13(金) 19:38:57.79ID:???
前のSQL Mail 今はデータベースメールって言うらしい でメール送信はできる

トリガー仕込んでやればできるんじゃね
0862NAME IS NULL垢版2018/07/14(土) 00:07:50.29ID:aYAJ4wRd
>>861
ありがとござんした。
0863NAME IS NULL垢版2018/07/20(金) 18:14:47.36ID:???
プロシージャでSELECTの結果を返してるんですが、INFORMATION_SCHEMAなどで、何個のSELECT結果を返してるかを、調べる方法はありませんか?
やっぱり、実行しないと厳しいですかね
0864NAME IS NULL垢版2018/07/21(土) 13:29:57.03ID:???
何個のSELECT結果ってどういうことだ
0865NAME IS NULL垢版2018/07/21(土) 14:37:14.53ID:???
プロシージャ内で
select * from table1
select * from table2
と書くと2つのSELECT結果が返ってくると思うんですが、いくつのSELECT結果が返ってくるかが知りたいです。
この場合、2つです。
ちなみに、.netを使ってます
0866NAME IS NULL垢版2018/07/21(土) 16:44:00.45ID:???
はっきりいって、それを知る意味がわからん。
0867NAME IS NULL垢版2018/07/21(土) 17:10:38.16ID:???
プロシジャってのが何を指してるかわからんが
そのSQLが静的なら、そのSQL見ればわかるし
動的に生成してるなら、動的に生成するロジックでわかるとおもうが
0868NAME IS NULL垢版2018/07/21(土) 17:17:54.97ID:???
複数 レコードセット
でググれ
0869NAME IS NULL垢版2018/07/21(土) 17:26:51.48ID:???
「俺が必要な機能が用意されてないのはおかしい」って思ってる奴が定期的に湧いてくる不思議
0870NAME IS NULL垢版2018/07/21(土) 18:39:30.83ID:OaX/dGdR
>>865
やってみればとりあえず分かるだろうに。
0871NAME IS NULL垢版2018/07/21(土) 19:12:18.09ID:???
Oracleだと、パラメータのRefcursorの数でわかるんですが、SqlServerでは分からないんですね
0872NAME IS NULL垢版2018/07/21(土) 19:35:43.12ID:???
>>871
パラメタで返すならパラメタ見れば同じようにわかるけど?

結果セットで複数返したときならクライアント側ライブラリの話だが
ADO.NETのスレってなかったっけ?
ざっと見た感じではNextResultで自分で数えないとダメっぽいなぁ
0873NAME IS NULL垢版2018/07/21(土) 20:42:46.11ID:???
>>872
SqlServerにはCursorの引数ないから、実際に実行するしかなさそうですね
ありがとうございました。
0874NAME IS NULL垢版2018/07/22(日) 00:56:34.48ID:???
いやSQL Sevrerでもカーソル引数にできたはずだが、と思って調べたが
できるけど、T-SQLからしか呼べないのか

つか引数で指定するってことは、ストアド作成時に数は決まってるわけだが
0875NAME IS NULL垢版2018/07/22(日) 01:03:32.64ID:???
いやSQL Sevrerでもカーソル引数にできたはずだが、と思って調べたが
できるけど、T-SQLからしか呼べないのか

つか引数で指定するってことは、ストアド作成時に数は決まってるわけだが
0876NAME IS NULL垢版2018/07/25(水) 10:18:39.05ID:dCc9syc1
OS:Windows server 2008R2
DB:SQL server 2008R2

で動くアプリケーションソフトがあります。

これを、以下の環境にDBを移行しました。

OS:Windows server 2012R2
DB:SQL server 2016

CPU、メモリ数、HDDなどハードウェアの条件は全く同一なのに、
アプリケーションからのデータの閲覧、検索、修正、上書き
などの動きが見違えるほど速くなりました。

SQL server のバージョンが新しくなった効果でしょうか?
0877NAME IS NULL垢版2018/07/25(水) 10:41:42.64ID:???
HDD同じって、同じ規格で同じスピードのまったく同一の型番のディスクだよな

逆に今のスピードが本来の性能で、古いほうが遅くなってたと考える方が妥当じゃね
0879NAME IS NULL垢版2018/07/25(水) 10:58:23.73ID:dCc9syc1
>>877
ハードディスクは全く同じ型番です

現行システムが動いているサーバと全く同じ機種(スペック)のサーバが
存在していて、今回移行テストに使用しています
ハードウェアの条件が同じで、動きがこんなにも違うので、SQL serverが
劇的に改善されているのかなと思いまして
0880NAME IS NULL垢版2018/07/25(水) 19:53:09.80ID:???
移行元と先のデータ件数は同じなの?
件数が同等であれば、
物理ファイルの断片化の解消
インデックスおよび統計の更新
等が考えられる。
0881NAME IS NULL垢版2018/07/25(水) 20:04:51.15ID:???
どうせインデックスがぐちゃぐちゃになっていたという落ちだろ
インデックスの再構成とかしていたのかだな
0882NAME IS NULL垢版2018/07/25(水) 22:13:41.70ID:dCc9syc1
>>880
データ件数は全く同じです
SQL server 2008R2のデータベース完全バックアップを取って、
SQL server 2016に復元し、アプリケーションの接続先データベースを
2016にしただけで動きが速くなりました

>>881
インデックスの再構成、再構築はメンテナンスプランで毎日実行して
いましたが、統計の更新は毎日行う必要ないと開発部から聞いていたので
月1回程度行ってました
0883NAME IS NULL垢版2018/07/25(水) 23:43:20.55ID:???
2008と2016だと、エディション同じならそう大きな速度差は出ない気がするけどなぁ
そもそものデータファイルがフラグメントしてたとかじゃないのか
ま、早くなったんならよかったんじゃね
0884NAME IS NULL垢版2018/07/26(木) 06:15:55.29ID:???
>>882
2008R2のデータベース完全バックアップを、
2008R2にそのまま復元すれば早くなる可能性大だな
0885NAME IS NULL垢版2018/07/26(木) 11:24:28.64ID:???
クエリプランが変わったから速くなったと仮定すると、基数推定のバージョンが変わったことによる可能性もある
検証する余裕があるなら2016のほうにトレースフラグ9481セットして再起動して、旧バージョンで動かしてみるのもありかと
0886NAME IS NULL垢版2018/07/26(木) 12:26:11.40ID:???
2008R2ではメモリー制限設定してたのに2016ではディフォルトで使ってるとか
まあ2008R2で調査する気ないんなら
ラッキー、持ってる俺は違うな
とでも思ってりゃいい
0887NAME IS NULL垢版2018/07/26(木) 12:48:46.96ID:???
あるいはmaxdop指定してるとかね
テスト用だとその辺デフォルトでやっちゃいかねないからな
で、いざ本番用にとちゃんと設定したらテストの時のパフォがでないっていう
0888NAME IS NULL垢版2018/07/26(木) 12:53:31.13ID:???
maxdopで思い出したけど2016ってたしかデフォルト0じゃなくてインストール時にインストーラが設定するんだっけ
あとtempdbも数指定できたよな
0889NAME IS NULL垢版2018/07/27(金) 00:55:38.36ID:???
以下のFunctionを作成し
create function dbo.fncA
returns varchar2
as
begin
return 'asdf'
end

以下のsqlで呼ぶと、結果がaとしか返って来ないんですが、asdfと返すにはどうしたら良いでしょうか?
select dbo.fncA()
0890NAME IS NULL垢版2018/07/27(金) 04:23:27.78ID:???
SQL Serverにvarchar2なんてないだろ
自分でvarchar (1)とかで定義してるんじゃないのか
0891NAME IS NULL垢版2018/07/27(金) 07:33:42.56ID:???
>>889
戻り値に桁数していしないからじゃないかな
0893NAME IS NULL垢版2018/07/27(金) 15:53:18.16ID:???
SELECT
M.ID
,(SELECT A FROM テーブル値関数(M.ID, M.DATE)) AS A
,(SELECT B FROM テーブル値関数(M.ID, M.DATE)) AS B
,(略)
FROM M
WHERE (略)

こういう風にテーブル値関数を使うと、テーブルM・1行当たり 2回 動いてしまうと思います。
構造体かTUPLE型か、そういう風な概念を使って、効率的に動かす手段はないでしょうか?
0894NAME IS NULL垢版2018/07/27(金) 19:43:37.80ID:???
その関数が何してるかしらんが、それテーブル値関数の必要ないんじゃね
関数が2行以上返したら実行時エラー吐くんじゃね

実行時の効率もとめるなら関数じゃなくてビューにしてJOINしろよ
テーブル値関数とでもJOINはできるはずだけどな
0895NAME IS NULL垢版2018/07/28(土) 13:20:30.52ID:tm98Iqt0
>>882
そもそもあんたは設定が同じかどうかも確認せずに比較している。

あなたのいう同じは同じではないと思うよ。
0896NAME IS NULL垢版2018/08/01(水) 21:41:38.16ID:???
質問なのですが、SQLでファイルの存在まで確認するのは不可能でしょうか?

例えば

SELECT *
FROM T_Anken
WHERE AnkenID = '00123'
AND FileExist('C:\AnkenFile\00123.txt')

みたいなことをしたいんですが、難しいですかね?
0898NAME IS NULL垢版2018/08/02(木) 20:55:49.33ID:???
データベースのバックアップを定期的に取りたい、っていう場合、
.mdf ファイルだけバックアップしておけばOK?
SSMSの機能は使わず、ファイルのバックアップという意味で。

あと、巨大な .ldf ファイルがあるんだけど、これ削除してよい?
0899NAME IS NULL垢版2018/08/02(木) 22:02:05.14ID:mcP8wWdh
>>898
mdfとldfはセットだ
復旧モデル
BACKUP DATABASE
DBCC SHRINKFILE
とかで検索
0900NAME IS NULL垢版2018/08/03(金) 00:13:09.11ID:???
復旧モデル単純にすることからだな
そんな質問するとこからしてトランザクションログから復旧する要件なんてなかろう
0901NAME IS NULL垢版2018/08/03(金) 14:34:29.02ID:???
>>899 サンクス。ldf が2GBあるんだよ、これ消したい。

>>900 そうそう。localDB で自分のPC内で遊びでやってるだけ。
でもPCや 保存先のSSD がダメになった時のことを考えて定期的に外部にバックアップ取りたいのよ。
0902NAME IS NULL垢版2018/08/03(金) 14:36:16.45ID:???
ログが肥大すんのは復旧モデルが「完全」だからだ「単純」に変えろ
0903NAME IS NULL垢版2018/08/03(金) 15:46:02.26ID:???
mdfだけでも保証はされないけど一応復旧できるんだっけ?
サービス停止するかデタッチしないとコピーできんかったと思うし、バックアップとるにもDB複製ふるにも普通にバックアップするほうがお手軽だから忘れちゃった
0904NAME IS NULL垢版2018/08/03(金) 21:40:23.92ID:???
>>903
> サービス停止するかデタッチしないとコピーできんかったと思うし
コピーはできるけど役に立たないデータがコピーされるだけ
0905NAME IS NULL垢版2018/08/04(土) 03:34:48.90ID:???
「単純」にして毎日夜間バックアップの一週間ローテ(5世代)とかでやってる企業も多いね。
0906NAME IS NULL垢版2018/08/04(土) 03:53:35.36ID:???
圧縮あるしサイズ小さけりゃ差分とか考えなくていいからな
うちはたまにテストや確認で○時のときのDBを検証環境に作ってって要望がくるから完全にしてる
0907NAME IS NULL垢版2018/08/04(土) 09:49:44.89ID:???
結論としては、

・エクスプローラ上からのファイルコピー等でのDBバックアップは不可
 (ファイルコピーはできるがDBとして復元できない)

でよいの?
0908NAME IS NULL垢版2018/08/04(土) 13:14:32.38ID:???
ファイルロックされててコピーも出来ないんじゃ
0909NAME IS NULL垢版2018/08/04(土) 13:42:01.94ID:???
>>907
デタッチすればファイルコピー出来るし、コピーしたものを他のSQL Server入ったPCで復元(アタッチ)することも出来る
0910NAME IS NULL垢版2018/08/04(土) 20:08:07.47ID:???
VSS使ってMDF,LDF取得はよくしている
0911NAME IS NULL垢版2018/08/05(日) 22:49:40.30ID:???
>>907
DB停止状態(コールドバックアップ)なら可能
0912NAME IS NULL垢版2018/08/07(火) 20:01:05.52ID:L4EDfhvX
リレーショナルデータベースがそんな単純なものだと思っているやつは、Windowsもファイルのコピーで別のハードディスクに移せると思っているんだろうな。
0913NAME IS NULL垢版2018/08/07(火) 20:12:13.66ID:???
パーソナルユースの場合は単純な方が利点が多い
0914NAME IS NULL垢版2018/08/07(火) 23:40:21.32ID:???
MSのAccessとか、あと開発とかしたことないけどSQLiteとか、お手軽に使えるのもあるからねえ
そういうのしか知らないとぴんとこないかもな
0916NAME IS NULL垢版2018/08/08(水) 00:39:43.49ID:???
データベースじゃなくてDBMSって言ってほしいがな
0917NAME IS NULL垢版2018/08/08(水) 06:18:27.55ID:???
>>914
SQL-Serverだってmdf, ldfをコピーするだけなら大して変わらん
MS-AccessとかSQLiteだって稼働中にコピーしたらガラクタになるのも同じ
0918NAME IS NULL垢版2018/08/08(水) 06:20:49.10ID:???
>>916
DBMSはどっちかって言うとSQL-Server本体の方
今の話はデータファイルの方だからDBMSはちょっとピントずれてる
0919NAME IS NULL垢版2018/08/09(木) 10:14:10.09ID:jylyPhQF
>>893
クロスアプライしろ
レス数が900を超えています。1000を超えると表示できなくなるよ。

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