Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。
・Microsoft 公式サイト
http://www.microsoft.com/japan/sql/ >>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やインデックスは作成後にメモリに常駐し続けるものなんでしょうか? >>740
キャッシュにブロック単位で読み込まれて残ってることはあるけど常駐はしない SQL Server for LinuxでActive×Activeの遠隔地マルチマスター構成作れるの? >>742
WindowsかLinuxかに関係なくSQL Serverが持ってる機能だけじゃできないと思うぞ
Oracleと同じでGoldenGateみたいな3rdパーティの製品依存 大規模システムはOracleDB、
中小システムはSQL Serverという棲み分けは
結局、変わらなかった。
今後も変わることはない。
なぜならマイクロソフトが諦めているから。 十数年前ならともかく
本当に大規模なシステムでは
もうオラクルやSQL Serverを検討するような時代じゃないからな >>747
勘違いしすぎだぞ
クラウドでも大企業はオラクルクラウド、AWSやAzure上で同じ製品を使っている >>749
大規模なシステムと大企業のシステムの違いもわからないのかww
脳みそバグってるね 単にお金がない企業は安いものを選択するしかないだけの話 そうなんだよ
お金がないからAmazonもOracle全部やめようとしてるんだよなぁ Googleもお金がないからオラクルなんてボッ・・・高価なものは使えない
Facebookも右肩下がりだから節約してMySQL AWSなんてすげーお金がかかるのに騙されて契約するのが日本人 本番環境しか見積もらずにAWSに完全移行して、運用保守環境がなくて積む企業が多発しているのが現状。 SSE2017相手なんだけど
SSMS19は18から設定を引き継ぐと繋がるけど
設定をクリアして新規で接続しようとすると
証明書がどうたらって出て接続エラーになる
でアンインストールしてSSMS18を入れ直すと
新規設定からでも接続できた
SSE2019以降の組み合わせだとどうなるか…
検証が非常に面倒だw SSMS19の接続問題は接続の暗号化オプションが原因だった
SSMS18は暗号化が既定でオフだった >>762
SSMSだけの問題じゃなくて、ほかのクライアントでも問題出てるから
サーバーかクライアントドライバでのデフォルト設定が変わってるっぽい
とりあえず接続文字列修正してるけど、デフォルト設定変える方法探さんとなぁ SSMS19は設定ファイル自体を削除しちゃうと
接続暗号化オプションにもチェックが入るけど
詳細メニューで一度リセットボタン押しとくと
その後は既定で暗号化オプションがオフになる Azureの方も更新来てたけど
引継でも新規接続でも問題無いな SQL Serverは他のRDBMSと実装の方向性が違いすぎて、もはや作りが崩壊している。 >>767
特定のインデックスがあるとテーブルが不要になるあたり >>769
列ストアインデックス
根本的に実装がおかしいと言っているようなもの いや、個別の機能とかそういうのはいいから。
それをどう使うとどういう風になにが崩壊するのか実際的に語ってみて。 >>771
テーブルで実装できなかったことをごまかしている