Microsoft SQL Server 総合スレ 12
Microsoft SQL Server (Transact-SQL) の総合スレッドです。 ・Microsoft 公式サイト http://www.microsoft.com/japan/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 テーブルで実装できなかったことをごまかしている データの読み取りだけで高負担という欠点をさらしているわけだが、読み取り一貫性の実装が何度、作り直しても同じという諦めはマイクロソフト自身が諦めていること。 マイクロソフトドキュメントでわかるとおり、技術的にわかる人間を投入していないからこうなる。 >>770 データウェアハウス向けの機能追加したら、他のRDBMSと実装の方向性が違いすぎるってか >>データの読み取りだけで高負担という欠点 エビデンスは? >読み取り一貫性の実装が何度、作り直しても同じという諦めはマイクロソフト自身が諦めている エビデンスは? >マイクロソフトドキュメントでわかるとおり、技術的にわかる人間を投入していない たとえばどのドキュメント? せめて、具体的なURLの一つでもあげてから言えよ SQL Serverの営業職なのか? SQL Serverは同時実行性を切り捨てている。 2005から2008でコードを書き直したが、結局、仕様がたいして変わらないものが納品されたことぐらい歴史を勉強しろよ。 >>777 他のトランザクションを邪魔する形で、読み取り一貫性を実装している。 データそのものを排他ロックするSybaseの流れから方針転換できなかった。 だから、列ストアインデックスのようにテーブルのコピーを作って、読み取りの並列化をするしかなくなった。 批判をしているんじゃなくて、事実を書かれて頭に来ているのは、ちょっとおかしい。 だからエビデンスを出せと せめてURLの一つでも張らないと何の説得力もないよ >>778 >仕様がたいして変わらない 中身のコードはどうでもいいが、バージョン上がって仕様が変わってたら大変なんだが? >>779 ロックで一貫性を保つのは普通の方針だと思うが、それが実装の方向性が違うって? で、列ストア以前にスナップショット実装されてるはずだが、それについては? まあ、どうせ何の根拠もなく使い物にならないっていうんだろけど >>781 他のRDBMSは仕様を変えながら進化している。 後方互換性をマイクロソフトがアピールしていることもないし、そもそも後方互換性を気にしないのがSQL Server。 これを批難されているように受け取るんだろうけど、SQL Serverは日本マイクロソフトが作っているんじゃねえんだぞ? SQL ServerはSQL ServerのDBAはなかなかいなくて、マイクロソフトは売りっぱなしの商売下手。 すでに終わったSQL Serverの資格も普及させる気があるとは思えなかった。いまはAzureのおかげでセット販売ができているからいいけど。 だから、どこが崩壊してるんだよ。 結構真面目に聞いてたつもりだったけど、何の根拠を挙げることもできないのね。 ただのアンチさんの戯言だったわけだ。 SELECTだけで必要以上にレコードを排他ロックすることがいまだにあり、これによる同時実行性の低下対策として、レコードのコピーを使う仕組みが作られて、それを使わされている。 要するにマイクロソフトが指示した仕様を手抜きで前のバージョンのコピープログラムで再構築してしまったのが不幸の始まり。 マイクロソフトはいまだに「ロックエスカレーションは必ずしも悪いことではない」と説明せざるをえない。 >>785 テーブルをSELECTしながら処理するのと、テーブルをSELECTし、同じSELECT結果を登録した一時テーブルや同じデータを持つ列ストアインデックスを参照して処理するのを比べると、後者の方が短時間で終わる。 さらにやばいのがSQL Serverはいまでも単にSELECTしただけで、理由のわからない大幅な性能劣化が起きることがある。 マイクロソフトそのものが諦めているのに、SQL Serverに期待しすぎの人間がこのスレにいるのは、日本マイクロソフトの周知不足なんだろうな。 SQL Serverは同じテーブルに複数のセッションから同時にSELECT文を発行すると、極端に遅くなることがある。 さすがにこう説明すれば、作りに問題があることがわかるだろ? だから、どこが崩壊してるんだよ。 自分の台詞だろ。まずそこを説明しろよ。 何の根拠もなくここまで文句言えるとは SQL Serverに親でも殺されたのか >>786 聞いたことないけど、根拠は? まあ、いまだに自分で明示的にロックかけないとまともに動かないDBを使ってる人は 排他ロックと共有ロックの区別がつかないんだな >>787 どんな処理をしたらそうなるって? で、その理由をお前が理解できないから、なぜかそうなるですましてるんだろ 期待してるどうこうではなくて、正しく理解して使いたいだけで 正しいかどうかもよくわからん情報を垂れ流されても困るんだがな 3行めから6行目までのデータを抽出するときってどうやって書いたらいいですか? >>793 SELECT * FROM テーブル名 LIMIT 4 OFFSET >>794 OFFSET 6; とするとエラーが出ました この辺りのこと? ttps://sql-oracle.com/sqlserver/?p=857 >>796 すいません。 これです 調べきれてなかったです。 ありがとうございます。 2行目の5列目のみを抽出したいときってどうすればできますか? SELECT 5列目の列名 FROM テーブル名 まではわかったのですが。。。 >>799 同じように入力してみます。 すいません。 select s from テーブル名 s where s.email = $1; この s って何でしょうか? AS句を省略してる的な感じなのでしょうか? >>802 合ってたんですね。 ありがとうございます。 ググるにも何て調べたら良いかわからず困っていました。 ですか? 同じテーブルを隣同士に繋げても意味ない気がして。。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる