Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。 ・Microsoft 公式サイト http://www.microsoft.com/japan/sql/ >>640 Expressを使わずにDeveloperを使わないといけない理由は? >>641 別にexpressでもいいんだけど 単にdevelopは制限が全くないのでこっち使おっかな、程度の事です >>640 止めとけ 素直にMySQLかPostgreSQL使え >>647 そんな理由で別製品にするなんて素人が言うことだろw SSMSでストアドのテストドライバ生成機能ってありますか? ※Sqldeveloperみたいな感じの、っていう表現で伝わりますかね あるいは皆さんの、ストアドの単体テストの楽な方法とかも何かtipsがあれば Visual StudioのSQL Server Data Tools(SSDT) >>649 そもそもTransact-SQLをわかってますか? 接続文字列のData SourceとServerに違いはあるの? どちらもサーバーのインスタンス名かIPアドレスとポートの指定だと思ってるけど SQLServerでServerといったら基本的にはSQLServerがインストールされているサーバーかサーバーとそのインスタンス名まで DataSourceとなるとSQLServer以外のDBMSやフラットファイルも含まれる 久々にSSMS2008を触ってて クエリショートカットのカスタマイズした機能が動かなくなってるんだけど 同じようなことしてる人いる?(COMMITとROLLBACK) https://dotup.org/uploda/dotup.org2767912.png >>656 ごめん自己解決 間違ってF5押してたわ 教えて下さい。 ACCESS2019、SQL Server2012利用しています。 ACCESSからSQL ServerのテーブルへODBCでリンクテーブルを貼っている環境があるんですが、 特定の端末だけ、リンクテーブルを開くと、内容が突然すべて#DELETEになってしまう に現象に見舞われました。 https://pctips.jp/pc-soft/access-sqlserver-deleted このサイトを始めとして、同様の現象を解説しているサイトには、SQL Server側でbigint型を使ってるせいとありましたが、 bigint型は使っていませんし、特定の端末のみこの現象が発生しています。 再起動やODBC設定の作り直し、リンクテーブルの貼り直しなどしても治りません。 更に不思議なことに、次の日になると治ってしまいます。 で、しばらくたつとまた同じ現象に見舞われます。 (ここ一週間で3回です) 私も長年SE・PGやっていますが、このような現象は初めてで、 途方にくれています。 最悪PC変えれば治りそうな感じではあるのですが・・ なにか情報をお持ちの方のお知恵を拝借したく・・・ 何卒よろしくお願いいたします。 bigintだけじゃなくて、bit型で値がNULLだったりしたらそんな感じになった気がする まあ、クライアントがまったく同じバージョンでまったく同じデータを表示して起こるなら ネットワーク系の問題の可能性が高そうだけど それかODBC定義が違ってるとか ウィルスチェック系のソフトが悪さしてるんじゃね sql serverにアプリから接続しているクライアントPCって 利用状況モニターで確認できますが、過去の履歴ってどこから見れますか? >>663 利用状況モニターってたぶん動的管理ビューから情報とってるから、それの過去データ見たいならそれをとるように設定しないと データコレクションがそれなんだろうが自作でクエリ組んでSQLAgentで動かすほうがカスタマイズしやすいと思う あとは、どういう風にデータを見たいかだけど拡張イベントでログインログアウトとるとかも有りかな どういうログがいるのかわからんが、監査ログで良いんじゃないか 監査ログって拡張イベントを監査用にまとめただけでしょ 簡単にやれるぶん融通がきかない 項目とフィルタの設定の自由度ほしいなら拡張イベント一択 sql sever 2019で、ファンクションを作成しています。 その処理の中で、番号を管理する列から最大値を取得して1を加えたものを新しい番号として同じテーブルにインサートしようとしています。 その処理の間に、他からこのファンクションを呼び出されて割り込まれることを防止するため、ファンクションが完了するまでテーブルロック(排他ロック)をかけたいのですが、どのような記述が必要でしょうか。 begin transaction commit のような感じで関係するステートメントをかこえたらよいのですが。 >>667 自作せずにSEQUENCEをNO CACHEで使えばいいよ >>668 早速のレスありがとうございます。 連番はSQL SEVERに自動で振ってもらおうと思います。 そして、INSERTとOUTPUT inserted.*を使って、 その新しい番号を得たいと思います。 >>669 訂正します INSERTにOUTPUT inserted.*を組み合わせて >>671 エクスプレス版を取りあえずダウンロードだけしといたw SSMSが同じだからなあ…どうなんだろ 質問です。 テーブルA(1)---(∞)テーブルB(∞)---(1)テーブルA こういう関係になるテーブルBを考えています。 即ち、テーブルAの外部キーをテーブルBの2列で持つことになります。 同じテーブルAについて外部キーを持っても、テーブルBの2列の意味はそれぞれで異なります。 こういうテーブルBの2列は、テーブルAの外部キーを持つので、列名の設定に困ります。 一列だけならforeignkeyofA_CDという列をテーブルBに設定すれば良いですが、こういう場合はどんなふうに列名を設定するのが良いのでしょうか。 >>674 foreignkeyof ってググっても出ないから、そんな作法は一般的じゃないよね 普通に名詞だけの単語でテーブルA,B共通の名前にして、エイリアス名で分ければ? 悩むくらいなら、 /* コメントxxxxx */ みたいにメモを残すほうが、あとでみてもわかる >>674 列名? 外部キー制約名じゃなくて? 列名ならそのカラムがテーブルAで持つ意味でつければいい 外部キー制約名はFK_テーブルA_テーブルBが一般的 2つ同じテーブル同士で外部キー制約を貼るなら テーブルA側の列名も使って外部キー制約名を付ける >列名ならそのカラムがテーブルAで持つ意味でつければいい buyerとsellerとか primary_contact/secondary_contactとか スレが盛り上がったところで、質問させていただきます SQLCLRなんですが、複数のアセンブリがあって、その中の、一部のメソッドを仕様変更したとき、アセンブリとストアドの依存関係なしに、全部createやり直すのは普通ですか?邪道ですか? 再作成必要ないものまでcreate assembly、create procedureしてしまうんですよね >>679 普通ではないように思うが署名やテストも含め自動化できてるなら好きにすればいいんじゃない? 皆様、レスありがとうございます。 参考になりました。 結局、次のようにしました。 table_A.列名あいう(table_Aの主キー) table_B.列名あいう(table_A外部キー) table_B.列名あいう_用途(table_A外部キー) このように、用途がわかるように列名を設定しました。 ありがとうございます。 同じ列名で格納かれているデータ異なるけど、関連があるなんてわかりにくいにもほどがあるだろw 1対Nを、1対「無限大」と表記する表記法なんて初めて見たわ。 >>682 わるい 「列名ならそのカラムがテーブルAで持つ意味でつければいい」と書いたけど 「列名ならそのカラムがテーブルBで持つ意味でつければいい」の間違いだったわ message.sender -> account.id message.receiver -> account.id 外部キー列と参照される列を混同するのは初心者あるあるだが、 純粋に間を取り持つテーブルを作った方がいい。 説明がいるデータモデルにしておくと、自分でもわからなくなる。 トランザクションデータの親子関係と、マスタデータの関係がごっちゃになっているのかな? table_A.列名あいう(table_Aの主キー) table_B.列名あいう(table_A外部キー) table_B.列名あいう_用途(table_A外部キー) table_Aの外部キーが保存されるこの2列ですが、table_Aの同じ行とリンクするものではありません。 table_B.列名あいう_用途(table_A外部キー) は、たとえば >>689 table_B.列名あいう_用途(table_A外部キー) は、たとえば、 table_B.列名あいう_処理ターゲット(table_A外部キー) とでもして、処理と処理済みであることを銘記するためのものです。 table_B.列名あいう(table_A外部キー)がリンクするtable_Aの行とは違う行とリンクします。 >>686 ありがとうございます。 そのように考えました。 >>685 アクセスのGUIってそうなってなかった? >>690 table_B.列名あいう(table_A外部キー) table_B.列名あいう_用途(table_A外部キー) つまり、table_Bは、table_Aのサブテーブルでありながら、処理のターゲットにもされるテーブルということになります。 テーブルAの別のレコードの列を参照する列を同じレコードに持つテーブルB これCOBOLの発想か? >>693 親子関係なのか それならそういう命名もある程度納得できる taskテーブルとtask_dependencyテーブルがあって task_dependencyテーブルではtask Aが終わったら task B, C, Dを実行するみたいな依存関係を管理する時に ↓こういうイメージの構成にして(A, B), (A, C), (A, D)の3レコードを登録する形だよね task.task_id task_dependency.task_id -> task.task_id task_dependency.depentent_task -> task.task_id 他サーバーのテーブルを参照するビューがクソ重くて辛い データ転送バッチ作るしかないのか? >>697 ありがとう 他サーバーは他の人が管理してるものだからいけるか謎だけどちょっと相談してみるわ >>698 SQL Serverはマテリアライズドビューがない これはかなりの欠点 >>700 それは標準SQLのマテリアライズドビューではなく、データベースそのものの物理的なレプリケーションでしかない。 こんなの乱暴すぎてアプリケーションからは危険すぎて使えない。 マテリアライズドビューがわからないのなら、マテリアライズドビューを知ってから反論した方がいい。 >>701 何いってんのww レプリとマテリアライズドビューの区別もできない上に マテリアライズドビューが標準SQLになった妄想見てんのかww 恥ずかしいやつだなwww オラクルしか知らんとマテリアライズドビューの本来の意味もわからんようになるのか こうはなりたくないな オラクルだと昔はスナップショットと呼んでたから マテリアライズドビューをスナップショットレプリケーションだと思い込んでるんだろ おまえらSQL Serverしか知らねえのまるわかりじゃねえかw >>702 あのさ、他のRDBMSではレプリケーションという言葉は広い意味の言葉で、製品ごとに定義が異なる。 さらにマテリアライズドビューはデータベースオブジェクトですよ? SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。 他のRDBMSはSQLでマテリアライズドビューの操作ができる。 >>703 「スナップショットレプリケーション」なんて言葉が出てくるのはSQL Serverくらい 日本マイクロソフトのサポートや、日本マイクロソフトが作らせたOracleDBとの比較資料も大間違いだらけなんだぜ? そのくらいマイクロソフトは自社製品がわからない。 日本マイクロソフトの品川本社のSQL Serverサポートもひどいレベル。 普通のデスクトップPCで試してみているだけ。 さも知ってましたみたいに答えるが、Bing検索で検索して答えるレベル マイクロソフトはSQL Serverの欠点を指摘されて、マテリアライズドビューはあるみたいなことを世界に発信している。 マテリアライズドビューは、ビューにインデックスを作成すれば解決みたいなことを言い出して、そのインデックスが実態がもはやただのテーブルにすぎない。 同じようにロックエスカレーションも悪く言われて、これも正反対のロックエスカレーションはすばらしいと言って回っているので、ますますSQL Serverが売れなくなった。 >>705 > SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。 よくそんなレベルでレスできるもんだな... >>709 データがそんな大きくなければそうやるよ? あなたは何と戦っているの? そうじゃない、そうじゃないと言っていても、ただのイタいおじさんを通りすぎて、追放されるレベルだよ。 > こんなの乱暴すぎてアプリケーションからは危険すぎて使えない。 とか言ってた奴が > SQL Serverで似たようなことをするには、全レコードをSELECTして他のテーブルに登録するくらいしかない。 とかw とりあえず何が危険なのか書いてみ それでお前のレベルがわかる まいどまいど斜め上のレスを上から目線で書いちゃってwww いつも笑わせてもらってる こいつは特別アホだとしても オラクル信奉者ってなぜか低レベルなやつ多いよなぁ よろしくお願いします。 Date型で、日部分のみ指定した値に変更したいのですが、そういう関数はあるでしょうか。 元となる年月日から足し引きするような関数はあったのですが、直接指定するというものが見つかりません。 年、月、日に分解したあとに、日のみ変えてまたDATE型を組み立てるしかないのでしょうか。 >>712 他のDBMSに精通したらオラクルを信奉したりしないからね >>713 SQL-Server 2022 なら dateadd(day, n - 1, datetrunc(month, 日付)) でできると思うけどどう見ても素直に datefromparts(year(日付), month(日付), n) の方がわかりやすいと思う >>715 早速レスをいただき、ありがとうございます。 専用関数がないのは残念ですが、確かにわかりやすいので、組み立て方式でいきたいとおもいます。 参考になりました! >>717 こういうのがあるからアップデートしたくない 最初にテストしたら、そのまま何の変更も加えてほしくない Sql server 2019と、SQL Server Management Studio(SSMS)について SSMSを使って、Sql serverにsaで接続し、 ファンクションを作成しました。 作成用Create functionスクリプトの実行は完了しました。 しかし、SSMSの左ペインに表示されるはずの作成したファンクションが見つかりません。 そのファンクションも、SSMSには認識されておらず、dbo.ファンクション名を打とうとしても、インテリセンスが機能しません。 このとき、SSMSを再起動したのですが、状況は変わりませんでした。 しかし、Sql serverも再起動した後に試すと、SSMSはさきのファンクションを認識しました。 こういう挙動は普通ですか? ストアドプロシジャなら、直ぐに認識されなくても、いくらなんでもSSMSで再接続さえすれば認識されたと思います。 >>719 データベースの情報を完璧に取得し直して表示するという仕様は、完璧である必要があると思っているんですか? データベースオブジェクトを検索して表示するのも負荷のかかることです。 SSMSで一時的に見えなかったことを問題視してますが、そんなに重大な問題ですか? SSMSではなく、クエリで存在を確認する習慣をつけた方がいいですよ。 ストアドプロシジャ内で、 サブクエリによるテーブルの導出を テーブル値ファンクションで行うとパフォーマンスは落ちるのでしょうか。 各ストアドプロシジャ内で、同じ導出を行うのも非効率だなと思って、流用しやすい形でfrom 句にファンクションを使おうと思っています。 >>719 SSMSってDB情報とかキャッシュしてるから、まあよくあることなんじゃね >>721 テーブル値ファンクションって、おそらく実行時に展開されないので サブクエリより実行計画の幅が狭いはず なのでサブクエリより実行効率が上がるとは思えん >>719 手動でRefreshしなよ わからなかったら「SSMS Refresh」でググって インテリセンスのキャッシュも同じ DBに不必要な負荷をかけないために昔からそういう仕様だったはず >>721 Inline Table Valued Functionなら SELECT文を直接書くのと同じように展開されてから オプティマイザが実行プランを生成するのでパフォーマンスは変わらない >>722 >>724 レスありがとうございます。 テーブル値ファンクションを、From句や、 OUTER APPLYで使うと、パフォーマンスおちないか心配でした。 ストアドプロシジャにベタ書きするように最適化されると聞いて安心しました。 しかし、再利用性を高めるとはいえ、 SQLにサブルーチン的な発想をもちこむのは心が痛みます。 >>725 整合性の取れた最新のデータを取得しないといけない理由があるんですか? 理由がないのならそんなやり方は捨てるべきです。 しかもデータ量について言及がないので、データ量が少なければ、どういう方法でやっても速度性能なんてほとんど変わりません。 パフォーマンスは低下するが、1.00秒かかるクエリが1.01秒になるような性能悪化なら気にしても意味はありません。 >>726 >整合性の取れた最新のデータを取得しないといけない理由があるんですか?理由がないのならそんなやり方は捨てるべきです。 どういうこと? 静的テーブルに、予めデータを用意しておいて、 これを使うということ?? >>725 通常のビューや、CTEでダメな理由がなにかあるのか? >>729 そこで言う再利用って何? CTEはともかく、ビューが再利用できないわけないんだが >>730 テーブル値ファンクションで、定義しとけば、 他でテーブルのように何度でも使える。 修正も一箇所ですむので簡単。 >>727 そいつはDB板の有名荒らしなので相手にするのは時間の無駄だよ 条件となる値が固定ならビュー 条件となる値が可変ならinline TVF >>734 引数なしのテーブル値ファンクションは駄目? >>731 だからそれだと、ビューがダメな理由にならないんだが? >>736 ビューはかつて使ったことないけど、 from句や、OUTER APPLYできるのかな。 ファンクションで作っておくと、引数追加したくなっても変更しやすそう >>737 >from句や、OUTER APPLYできるのかな。 当然使えるよ SELECTするだけならTableが使えるところならどこでも使えると思うよ 更新系はいろいろ制約があってそれを満たしてなければ使えない SQL ServerのPKやインデックスは作成後にメモリに常駐し続けるものなんでしょうか? read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる