Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。 ・Microsoft 公式サイト http://www.microsoft.com/japan/sql/ >>299 仕様どおり FORWARD_ONLY All insert, update, and delete statements made by the current user (or committed by other users) that affect rows in the result set are visible as the rows are fetched. … FORWARD_ONLY is the default, unless the keywords STATIC, KEYSET, or DYNAMIC are specified STATIC Specifies that the cursor always displays the result set as it was when the cursor was first opened, … https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-cursor-transact-sql?view=sql-server-ver15 あとカーソル使わなくてもINSERT SELECTで対応できるケースだったりしない? >>300,301,302 教えてくださってありがとうございます 300さんに教えていただいたように試してみたところループは一回で終わりました カーソルの挙動についてはいろいろなサイトで調べていたのですが、 カーソルの宣言時にSELECTした結果がカーソルのオブジェクトに入って、 フェッチはそこから一行ずつ取得しているというように読み取ってしまっていたので今回のSQLで大丈夫だと思ってしまっていました こういった仕様なのですね 実際のSQLはループ内でIF分岐でいろいろと処理が別れているのでINSERT SELECTが難しいかなと思ったのですが、 もう少しやるべきことを整理した上でINSERT SELECTに替えることも視野に入れて見直してみようと思います とても勉強になりました!皆さん本当にありがとうございました!! >>302 確かにカーソル使う処理は遅いのでまずはinsert selectで対処できるかを検討すべきやね >>303 カーソルオープンのことを、カーソルの宣言と言わないでほしい。 これだけで何を言っているのかわからない。 >>303 カーソルオープンで行われるのは結果セットの取得ではないよ。 フェッチ構文はなんだと思ってんの? >>306 INSENSITIVEやSTATIC付ければ カーソルオープンで結果セットの取得が行われる >>302 に書いてるよね? >>307 別人だけど、それ知らんかったわ まず使わんとは思うんだけど勉強になった 取得っていう言い方がなぁ カーソルオープンで結果セットが生成されて、フェッチで取得される っていう言い方のがよくね? 生成されているのが、静的コピーかキー情報のみなのか、実体はフェッチ時に生成してるのかの違いだろ >>309 確かに表現がよくなかった。カーソルオープンはレコードの特定で、レコードの値をコピーするのがフェッチ。 データベースや指定によってはカーソルのSELECT文の対象レコードがロックされたり、対象レコードのコピーが作成される。 SQL Serverでデータ量が少なければ、一時テーブルを使うのが無難かな。 Management Studioで 左側にオブジェクトエクスプローラ 右側にクエリウインドウが開いてる状態で オブジェクトエクスプローラの幅を変えようと思って オブジェクトエクスプローラ右端の境界線をマウスで左右にドラッグしても うまく変わってくれないことが多いんですが、何が原因でしょうか? うまくいかないって具体的にどうなんだよ OSとかSSMSのバージョンとか詳しく書けないのかよ お前のマウスがぼろいだってオチな気がするがな 教えて下さい 環境 サーバAとサーバBがあって、それぞれにSQLServerが入ってます。 どちらもユーザ名、パスワードは同一で変更できません。 質問 サーバAのManagement Studio上からサーバBに誤って接続させたくないのですが いい方法ないでしょうか? (ユーザ名、パスワードが同一なので誤って接続&ログインで来てしまう) 例えばManagement Studio起動時のサーバ名選択なリストボックスに自身のインスタンスしか表示させないとか。 双方サーバで固定IPならSQLのアクセスをファイヤーウォールでブロックしてしまう。 >>318 サーバ名は(local)のみ使うことを徹底するでもいいかなぁ sa 使わず、別の保守用アカウント作って、それで SMSS したらいいんじゃね? WindowsファイアウォールでSSMSの外向け通信遮断とかで行けるんじゃね ファイアウォールじゃなくLogon Triggerでも制御可能 あとミスオペを防ぐにはコネクション別に色を変えるのは結構有効 >>323 それしらんかった ありがとう、勉強になった >>326 コネクションのプロパティで出来るでしょ ステータスバーの色が変わる アドオン入れればもう少し違う箇所の色を変えたりできるかもしれない >>327 探したけど、その説明では...探したが、接続後では変えられないっぽい サーバーへの接続ダイアログで、オプションをクリック 接続プロパティタブで、カスタム色を使用にチェックして、選択ボタンから色を選択 でステータスバーの色を変えれるようになった セキュリティ的に絶対繋げたくないとかじゃなければこっちのが良いな アドオン作れば色々出来るんだろうけど、アドオン作るための資料ってみたことないんだよなぁ なるほど 基本Visual Studiのエディタ部分だから、アドオンそのものはVSのアドオンなのか あとは各種SSMSのオブジェクトのリファレンスさえあればなんとなる、かも しかしまあ、日本語のドキュメントほしいよなぁ csvファイルからデータをインポートしたいのですけど、 読み込ませようとしたら、 全てvarcharの長さ50バイトに なってしまいます。 実際のデータはもっと長い文字列の項目があります。 どうすればデータ長に合う長さで 読み込むでしょうか? ちなみにcsvは先頭行から データとなっています。 >>331 >読み込ませようとしたら import wizardみたいので普通に設定できたと思うんだが違うやり方なんかな? ここはエスパースレではないので せめてどうやって読み込ませたのかぐらいかけよ >>318 Management Studioに接続を登録して使うようにしたら良いと思うよ > 例えばManagement Studio起動時のサーバ名選択なリストボックスに自身のインスタンスしか表示させないとか。 起動時のダイアログは表示しない設定にできるよ 誤って接続させないなら、これで十分じゃないかな 接続の登録は、エクスポートできるから、みんなで同じ環境にするのも簡単だよ csvからインポートしてるのですけど 数値項目のところにスペースのみとか、 スペース+数値文字列(リーディングスペースっていう?)は、 読み込み中にエラーが発生するようです。 という、ところまでわかりました。 次は、文字コード混在(932と1252)しています、というエラーに 悩んでいます。 csvを調べても932(シフトJIS)に なってるはずなのです。 なにかアドバイスください! >>337 まずはcsvファイルをいくつかに分割したりして、エラーの原因の行を特定してみてはどうか で、特定できた行と、使ってるBULK INSERT文なりbcpコマンドなりが出されると 悩みに効くかもしれない >>337 いったん文字列として別のテーブルに取り込めぱいいんだよ。途中をすっとばして一気にやろうとすれば何もかもたいへんになる。 >>338 >>340 コメントありがとうございます。 プログラムは詳しくありませんので、 csvインポートは、SSMSで 画面から指定してやっています。 いろいろ試してみます。 mssqlの物理設計の仕事をすることになりそうなんですが、この仕事って将来性ありますか? SQL ServerのDBAは供給が常に足らないから、仕事はあるよ。 職場のPCなんですけど、SQL serverをインストールしてないのに、 SSMSを使ってデータのインポートをするとテーブルが作られて、 クエリも実行できるのですけど、 SSMSをインストールするだけで、自動的にSQL serverが インストールされるのでしょうか? >>344 SSMSはクライアントツールだ SSMSのインストールではサーバはインストールされない SSMSでどこにつないでるだよ WinPro+SQL2013+Excel2013で使えてたtime型が、 WinHome+SQL2019+Excel2019で使えなくなった SQLの実行ではエラーは起きないので、Excel側の問題だけど OLEではレコードセットの該当列を見ると「複数のステップ」エラー ODBCではレコードセットの何か(EOFとか)を見ると「数値の範囲」エラー 数か所だったのでchar(5)に変えたけど(hh:nn) ※書き込めない原因はこの行だったかーw char(5)か(hh:nn)のせいかな? DB板でこれを半角で書けない意味はw https://docs.microsoft.com/ja-jp/sql/integration-services/import-export-data/connect-to-a-sql-server-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15 >重要 >Microsoft OLE DB Provider for SQL Server と SQL Server Native Client は、 >SQL Server 2012 より後のバージョンではサポートされません。 >代わりに、ODBC ドライバーを使用します。 ほんと? OLEDBもまだあったけど、一応最新の{ODBC Driver 17 for SQL Server}にしといた 名前がナンバリングってことは、次回買い替え時にまたメンテが必要… >>346 > SSMSでどこにつないでるだよ 会社のPCを見てないんですけど、 (localDB)SQLSERVERというような名前を設定したと思います。 この設定は、 「こういう文字列を設定するとできたことがある」 と先輩が教えてくれたものです。 >>352 Visual studio とか ASP.NET とかを入れてるんじゃね? その他にもSQL-Server LocalDB使うアプリを入れるとインストールされたりする >>351 https://docs.microsoft.com/ja-jp/sql/connect/oledb/oledb-driver-for-sql-server?view=sql-serv OLE DBそのものが非推奨になったのでその二つも非推奨になったんだが OLE DBの非推奨が取り消された だがそのドライバは非推奨のままで、新しいOLE DBドライバ使えってスタンス まあ迷走してる感はあるが、新しめの使っとけば数年で使えなくなることはなさそう >>354 使えない先輩というか、この程度の知識でSSMSでクエリ発行する業務そのものが理解できん >>356 システムの事なんか全然知らず、サーバを構築したりすることもなく、 SQLでクエリーを作る作業者って想像できないわけじゃないよ。 でもトラブルがあった場合とかパフォーマンスが出ない時とかどうするんだろうなあとは思うな。 SSMSはVer18からストアドプロシージャのデバッグができなくなってたんだね 2008が残ってたからVer17を使い続けてたんだけど、現行は、VSDTを使えってことなのかな >>357 相手によってはとりあえず使えるように必要な設定を呪文として提供することならままあると思う。 その呪文をきちんと理解できるように自分で調べる、問題があるなら質問を返す、などの器量は受け取る側の問題じゃないかと。 >>355 おお、さんくす 2020/05/06 2018 年に OLE DB の非推奨が取り消しとなり、リリースされました。 2020/06/29 2012 より後のバージョンではサポートされません。 代わりに、ODBC ドライバーを使用します。 日付は逆だけど… でも直観的に、「非推奨が取り消し」の方が強いイメージ なのでMSOLEDBSQLに戻した 俺が1人で作ったシステムを社内政治都合で廃止しようとした連中が5000万かけてIBMに発注したことがあった 半年後、元のシステムを使い続けることに決定しましたと、会議で役員が宣言 IBMのが機能不足の上に遅くてどうしようもなかったらしい 廃止の取り消しは、強い技術的な壁を感じる ODBC駄目だな、と思ったのは20年近く前だったかな SQLの解釈が違うような、変な癖があった あとちょっと遅かったかな 今回も、EOF見るだけで特定の列が起因のエラーが出るっておかしい気もする OLEもバグってるけど、エラーの出方が素直(ただしメッセージは分かりにくい) 下請けのプロに凄いもん作らせて、社内の素人に「保守」させるという よくあるよ 「誰でもできる」は買い叩きのためなの神話なのに、多数が心から信じてる様子 それがブラック社会 ただ俺の場合、凄過ぎて引き継げない >>361 その「保守」って大丈夫か? データベースに限らずソフトウェアは、後からの要望で、あれ付けてくれ、これやってくれをいちいち聞いていると酷いことになる。 「××を行わないことを大前提で最適化している」なんて説明しても全然理解してくれなかったりする。 自分で作らない人は、後から注文しても普通に付け足すだけで済むと思ってる人多いよね 最初にどれだけ考えて設計してるか知らないから仕方ないけど 極度の属人性を受け入れられるんなら開発費を10分の1にすることだってそう難しいことじゃないんだよ ベンダーに発注すると高くつくのは属人性を排除するために一見無駄に見えることに時間と金がかけてるから ついでにそういう属人性が高いシステムのリプレース案件は 大手ベンダーとしてはやりたくない場合が多くてワザと高い見積もりを出すんだよ >>364 >そう難しいことじゃないんだよ それw そういうのが買い叩きのための神話 そういう嘘で多大な損害が出たり、人が死ぬ すまんが、SSMSってコピペ用の接続文字列表示してくれないんだっけ? あれはVisualStudioのみの機能だったっけか・・・・? >>356 >>357 契約していた業者さんがずっと SQL serverのメンテナンスやってくれていたのですけど、 6月末で契約が切れて、 それでもSQL serverを使うシステムが 残っていて、いくつかやることがあります。 全員がSQL serverはほぼ素人なんですけど、 やらざるをえないという状況です。 いろいろググりながら頑張ってみます! 文字列の最初にN’’と見かけるのですが、この最初のNはどういった意味があるのですか? 省略可能でしょうか? >>368 自己解決しました。 N’Unicode文字列’ということですね。 SQL serverをインストールしたのですけど、 一部のGUIが動かないので 他のPCと比べてみたら、 どうやらVisual Studio 2005のライブラリ(?) というのがインストールされてないみたいです。 SQL serverのGUIで使ってるらしいですけど、 後からVisual Studio 2005のライブラリというのを インストールする方法を教えてください よろしくお願いします! すいません時代錯誤してました。 というか分かっておりませんでした NetFrameWork 3.5というのをMicrosoftのサイトから ダウンロードすればいいはずと聞きまして、 やってみます。 >>371 あのね、からかうだけなら 書かないほうがいいですよ。 「バカだから何も知らないくせに マウントしたいんだろう、このFランの馬鹿がw」 と、みんな思ってますからw >>372 恥の上塗りはやめとけってww SQL ServerやSSMSのバージョンも書かない上に ライブラリの名前も正確に書けないようじゃまともに相手されなくて当然 必要なVC++の再頒布パッケージが入ってないならインストールに失敗してるんだよねそれ sqlserverのパッチは出たら積極的に当てた方がよい? 問題がなければほっとくべき? >>374 どういう種類のサービスに使ってるかとパッチの内容次第 セキュリティ系なら基本的に当てる 最近のは統合パッチ?になって選択出来ない と思っていたが OS:Windows server 2016 DB:SQL server 2016 Standard Edition SSMS:SQL server ManagementStudio17 上記環境でSQL server Management Studioに 設定したメンテナンスプランがスケジュール実行で 動きません。 ・認証:SQL server認証 ・メンテナンスプラン内容:データベースバックアップ (メンテナンスプランウィザードで作成) ・ MSSQL13.MSSQLSERVER\MSSQL\Logにログの作成なし ・該当メンテナンスプランを右クリックして、履歴の表示を 選択しても、履歴の記録なし ・SQL server エージェント−ジョブ−該当メンテナンスプランを 右クリックして、履歴の表示を選択しても、履歴の記録なし ・該当メンテナンスプランを右クリックして実行を選択すると 正常に実行され、実行後履歴も表示され、ログも作成された スケジュール実行するためには、何か特別な設定が必要なのでしょうか? >>380 > ・ MSSQL13.MSSQLSERVER\MSSQL\Logにログの作成なし server 2016ならフォルダが違わない? 旧バージョンからのアップデートならあり得るけど、インスタンス間違えてないか すみません、教えて下さい。 クエリ実行時にエラーになったときに、 どのエラーコードだったらリトライすべきとかの標準的なガイドラインのようなものってあったりするのでしょうか? 要件は特に無いといいますか、聞けていないのですが、どのような手順で整理すべきでしょうか? エラーが出たら困るときにリトライすればいいんじゃね リトライしたらエラーが解消される可能性があるケースで 呼び出し側が1回でエラーを返されるよりも 複数回トライしてからエラーを返してほしいという要件に当てはまるものがあるかどうか 接続系じゃなくクエリ実行中のエラーでとなると結構絞られるとは思うが 運用開始前に対象をもれなく洗い出すのは現実的ではないので 運用開始後に簡単にリトライ対象を追加したり削除したりできるようにして 追加/削除の判断が迅速にできるような運用監視体制を整えておくほうが現実的 ロックタイムアウトでリトライすべきかどうかは要件次第だよね 普通はやらないと思うけど 単純にリトライするだけなら、ロック外れるまで待てばいいからじゃね >>389 手動リトライじゃなくコードで自動リトライするのは普通やらないって意味 対処を自動化したくなるくらいロックタイムアウトが発生するのは設計に問題がある可能性が高いのと 単純な固定delayだと同時実行性が落ちたり連鎖反応でエラーが頻発したりする可能性もあるから デッドロックとかと似たようなもの サーバーリプレイスする場合の引っ越しはデタッチ→アタッチでおけ? >>392 この前それでやったらなんの問題もなかった >>392-394 リプレースするならバージョンアップはしないの? システムデータベースをリストアとかやったことないんで 面倒なんで仮想環境を新しいサーバに移してからバージョンアップした >>395 システムデータベースなんて障害復旧以外では移行したことないっぺよ 移行はバックアップのリストアでやったほうがパフォーマンスが上がった感じがあった デフラグみたいなのがされるんじゃないかな ?? バックアップ/リストアなら普通にデフラグされるでしょ 基本バックアップ・リストアが良いと思うが。 なにしろオリジナルファイルとは別にバックアップファイルができるというのが作業安心度が高い。 >>400 システムデータベースのバックアップは同じバージョンにしか書き戻せないでしょ? 新しいバージョンに直接書き戻すことできるの? 調べればどっかに出てるんだろうけど、単純だからインストーラのアップデートを使ってる read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる