タグ付けされた質問 「view」

別の方法で1つ以上のテーブルのデータを表す仮想テーブル。

2
単一のビューへのアクセス権を持つユーザーを追加するにはどうすればよいですか?
MSSQL Server Management Studio 2008を使用していますが、データ調整のためにビューをサードパーティに公開する必要があります。適切なビューを作成しましたが、ユーザーを作成して、そのユーザーにビューから選択するための適切なアクセス許可を与えることができません。 ウィザードに従ってログインとユーザーを作成し、[選択可能]チェックボックスをオンにして[セキュリティ保護可能]セクションにビューを追加しました。すべてが順調に見えましたが、そのユーザーとしてログインして「Select * from MyViewName」を実行しようとすると、選択権限が拒否されたことがわかりました。 私はユーザーを再作成し(今回はウィザードの代わりにSQLを使用するだけです)、選択権限を明示的に付与しましたが、今ではエラーが発生しています:( Msg 916, Level 14, State 1, Line 2 The server principal "username" is not able to access the database "unrelated_db" under the current security context.無関係なデータベースにアクセスしようとする理由がわかりません...) ここからどこに行くべきか本当にわかりません。繰り返しますが、基本的に必要なのは、サードパーティにデータベースに接続してこのビューから選択させるために、サードパーティに提供できるユーザーを作成することです。

2
CREATE VIEWでWITHを使用したTransact SQL
WITH句を使用してVIEWを作成したいのですが、実際には正しい構文に関する参照が見つかりません。 こんな感じ WITH TempTbl AS (SELECT ...) CREATE VIEW SomeView SELECT * FROM TempTbl そして、いくつかのWITH句を使用するための正しい構文は何ですか? MSDNで有用なものはありません:(
13 t-sql  view 


3
ビューのORDER BY句の代替手段は何ですか?
この質問はこのサイトにある必要がありました:) このビューを使用する場合、複数のorder byが存在する可能性があるため、ORDER BYはビューでの使用を禁止されています。 たとえばTOP 99.999999 PERCENT、この制限を回避する方法があることは知っていますが、ハッキングの方法ではなく、ベストプラクティスを知りたいと思います。 したがって、個人使用のためにデータベースにビューを作成する場合、つまりデータベースに接続し、固定およびソートされたデータのみを表示する場合、ビューを注文できない場合はどうすればよいですか? 現在、SQL Server DBには、TOPハックに関するビューがあり、よく使用していますが、間違っていると感じています。


5
この更新が一意キー制約違反で失敗するのはなぜですか?
私は「偶然の」DBAであり、比較的経験が浅く、この問題に困惑しています。 MS SQL Server 2012を実行しています。問題はこのUPDATEステートメントにあります。 UPDATE dbo.tAccts SET Ticket = 'ARP.ExGE' , Method = 'smtp' , AcctOwner = 'r00417819' , DisplayName = '~AppLight HBSFax-Inactive' , Destination = 'r00417819@mail.ad.ge.com' , UpdatedBy = SYSTEM_USER , UpdatedOn = CAST(GetDate() AS DATE) FROM dbo.vReclaimable WHERE OHR_EmpStatus <> 'A' これは、vReclaimableビューによって返されるtAcctsテーブルの行のみを更新する必要があります。 vReclaimableビューはtAcctsテーブルに基づいており、tAcctsの行のサブセットを返します。 実行すると、一意のキーエラーで失敗します。 (0 row(s) affected) …

1
非エンタープライズ版とパフォーマンスのnoexpandヒント
パフォーマンスを上げるには、インデックス付きビューを使用する必要があります。この比較表からわかるように、Standard Editionはインデックス付きビューをサポートしていません。しかしBOLは言う: インデックス付きビューは、SQL Serverのどのエディションでも作成できます。SQL Server Enterpriseでは、クエリオプティマイザーは自動的にインデックス付きビューを考慮します。他のすべてのエディションでインデックス付きビューを使用するには、NOEXPANDテーブルヒントを使用する必要があります。 それでうまくいくでしょう(私はパフォーマンスについて話している) select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals) SQL Server Standardエディションと同様に select * from dbo.OrderTotals エンタープライズ版では? ビューのコードは次のとおりです。 CREATE VIEW dbo.OrderTotals WITH SCHEMABINDING AS select OrderId = r.OrderId , TotalQty = SUM(r.Quantity) , TotalGrossConsid = SUM(r.Price * r.Quantity) , XCount = COUNT_BIG(*) from dbo.Order r …

2
PostgreSQLのビューとトリガーを通じて現在のユーザーを追跡する
現在のユーザーに応じてレコードへのアクセスを制限し、ユーザーが行った変更を追跡するPostgreSQL(9.4)データベースがあります。これはビューとトリガーによって達成され、ほとんどの場合これはうまく機能しますが、INSTEAD OFトリガーを必要とするビューに問題があります。私は問題を減らすように努めましたが、これがまだかなり長いことを前もってお詫びします。 状況 データベースへのすべての接続は、単一のアカウントを介してWebフロントエンドから行われますdbweb。接続されると、SET ROLEWebインターフェースを使用するユーザーに対応するように役割が変更され、そのような役割はすべてグループ役割に属しdbuserます。(詳細については、この回答を参照してください)。ユーザーがであるとしますalice。 テーブルのほとんどは、ここで呼び出しprivateて所属するスキーマに配置されていますdbowner。これらのテーブルには直接アクセスできませんdbuserが、別のロールにはアクセスできますdbview。例えば: SET SESSION AUTHORIZATION dbowner; CREATE TABLE private.incident ( incident_id serial PRIMARY KEY, incident_name character varying NOT NULL, incident_owner character varying NOT NULL ); GRANT ALL ON TABLE private.incident TO dbview; 現在のユーザーaliceが特定の行を使用できるかどうかは、他のビューによって決定されます。簡略化された例(減らすことができますが、より一般的なケースをサポートするには、この方法で行う必要があります)は次のようになります。 -- Simplified case, but in principle could join multiple tables to determine allowed …

3
Oracle:階層テーブルを照会するにはどうすればよいですか?
バックグラウンド これは、レポートに使用するいくつかのビューを作成するためのものです。 場所のテーブルがあり、キーフィールドは「場所」と「親」です。 これらの2つのフィールドが作成する構造は、レベルごとに、会社名->キャンパス名->建物名->フロア名->部屋名のラインに沿っています。この場合、会社名は変わりませんが、キャンパス名は変わりません。 ロケーションの構造は、通常、次のようになります。 +-----------+ | Org. Name | +-----+-----+ | +-----v-----+ +--------------------+|Campus Name|+---+--+-------------+ | +--+--------+ | | | | | | | | | | +--+-----+ +------+-+ +--+----+ +---+---+ +--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds| | +--------+ | +--------+ +-------+ +-------+ +-+------+ +-----+--+ |Floor-01| |Basement+-------+ +-+------+ +--------+ | …
10 oracle  query  view  hierarchy 

2
ウィンドウ関数は、外部パラメーター化された 'where'句を含むビューから呼び出されると、ひどい実行プランを引き起こします
私はずっと前にこの問題を抱えていましたが、自分に合った回避策を見つけ、それを忘れていました。 しかし、今はその問題がSOにあるので、この問題を取り上げるつもりです。 非常に簡単な方法(注文+注文明細)でいくつかのテーブルを結合するビューがあります。 where句なしでクエリを実行すると、ビューは数百万行を返します。 しかし、誰もそれをそのように呼ぶことはありません。通常のクエリは select * from that_nasty_view where order_number = 123456; これは、5分のうち約10レコードを返します。 重要なこと:ビューにはウィンドウ関数が含まれています。ウィンドウ関数はrank()、ビューが常に照会されるフィールドによって正確に分割されます。 rank() over (partition by order_number order by detail_line_number) さて、このビューがクエリ文字列のリテラルパラメータでクエリされた場合、上記とまったく同じように、ビューは即座に行を返します。実行計画は問題ありません: インデックスを使用して両方のテーブルのインデックスシークorder_number(10行を返します)。 返された小さな結果に対するウィンドウの計算。 選択。 ただし、ビューがパラメーター化された方法で呼び出されると、状況が悪化します。 Index scanインデックスを無視してすべてのテーブルで。5m行を返します。 巨大な参加。 すべてpartitionのsのウィンドウを計算しています(約500kウィンドウ)。 Filter 5mから10列を取る。 選択する これは、パラメーターが関係するすべての場合に発生します。それはSSMSである場合もあります: declare @order_number int = 123456; select * from that_nasty_view where order_number = @order_number; これは、ExcelなどのODBCクライアントにすることができます。 …

1
他のデータベースのアカウントなしで、他のデータベースのテーブルに基づいてビューにアクセスする
database2のテーブルに基づいて、database1にビューを作成しました。SELECTdatabase1にのみアクセスできるユーザーに許可を与えました。データベース2にアカウントがないため、ユーザーはこのビューを機能させることができません。この問題を解決するにはどうすればよいですか?database2にアカウントを作成したくありません。

1
PostgreSQL:ビューから列を削除
VIEW進化スクリプトを作成しようとしている場所があるので、それに列を追加できます。その部分は問題なく動作します。列は問題なく追加されました。ただし、その逆は機能しません。最後に追加された列を削除すると、ERROR: cannot drop columns from viewメッセージが表示されて失敗します。問題は、この特定のビューにはfromとtoの両方に多くの参照があるため、私はまったくDROP CASCADE気の毒なことはできないということです。 新しく追加された列を指定されたものから削除できない理由はありVIEWますか?次に、このタスクを実行するにはどうすればよいですか? (注:ここに示すのは状況ですが、他の多くの場合でも、ビューから列を削除するなど、同じような状況がよくわかります。)

1
データベースプロジェクトでOPENQUERYを使用したリンクサーバーを使用する
SQL Server 2008でTFSに投入したいデータベースを実行しています。したがって、私はDBをインポートしたVisual Studio 2013データベースプロジェクトを使用しました。たくさんのエラーを修正した後、エラーが1つだけ残っています。 1つのビューではOPENQUERY、リンクサーバーへのアクセスに使用される開発者。そこで、適切なデータベースを含むDACPACをインポートAdd Database Referenceし、次の参照オプションを使用してプロジェクトに追加しました。 スクリプトの初期バージョン 以下は、元のビュー作成の短いバージョンです。 CREATE VIEW dbo.vwStatus AS SELECT StatusID, StatusName FROM OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1 これにより、次のエラーが発生します。 エラー136 SQL71501:ビュー:[dbo]。[vwStatus]には、オブジェクト[LinkedServer]への未解決の参照があります。 最初の試み それで、サーバー名変数を挿入しようとしました FROM OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1 につながる エラー176 SQL46010:$(LinkedServer)付近の構文が正しくありません。 さらなる試み 私は少し手探りで次のことを試しました(引用符付き識別子を有効にした場合と有効にしない場合): FROM OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS …

2
mysqldumpコマンドは、DBに存在するすべてのビューもバックアップしますか、それとも特別なコマンドがありますか?
ビューとともにデータベース全体をバックアップしようとしています。mysqldumpコマンドを使用します。それがすべてのビューをコピーするのか、それとも別のコマンドを使用する必要があるのか​​と思っていました。 答えを教えてください。どんな助けでも大歓迎です。
10 mysql  backup  mysqldump  view 

2
ビューには独自の外部キー制約が必要ですか?
免責事項:私はDBAではなくプログラマーなので、我慢してください... 2つのエンティティを一緒にマッピングするために使用するビューがあります。それを取得するには、いくつかの異なるテーブル間で結合を行う必要があります。 CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS ( SELECT SG.SCREENING_GROUP_ID, V.SITE_ID FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD WHERE VD.VISIT_ID = V.VISIT_ID AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID); 上記は説明用です。あまり気にしないでください。私が知る必要があるのは、新しいV_SCREENING_GROUP_SITESビューのフィールド(SCREENING_GROUP_IDおよびSITE_ID)を、SCREENING_GROUPおよびSITEテーブルへの外部キーとして動作させる方法です。それとも問題ですか? それがテーブルだったとしたら、 ALTER TABLE V_SCREENING_GROUP_SITES ADD CONSTRAINT FK_SCREENING_GROUP_ID FOREIGN KEY (SCREENING_GROUP_ID) REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID; ... しかし、それは明らかに機能しないビューなので、FKを設定するために機能するALTER VIEW構文が見つかりませんでした。私は何をすべきか? (これはMySQLデータベースです)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.