特定のビューがデータベースに存在する場合、実行する必要のあるSQLコードがあります。ビューが存在するかどうかを確認するにはどうしたらいいですか?ビューがデータベースに存在するかどうかを確認するにはどうすればよいですか?
EDIT:DBMSが使用されては、SQL Server用のMicrosoft SQL Serverの
特定のビューがデータベースに存在する場合、実行する必要のあるSQLコードがあります。ビューが存在するかどうかを確認するにはどうしたらいいですか?ビューがデータベースに存在するかどうかを確認するにはどうすればよいですか?
EDIT:DBMSが使用されては、SQL Server用のMicrosoft SQL Serverの
ある
IF EXISTS(select * FROM sys.views where name = '')
これは、ほとんどのポータブル、少なくとも侵入的な方法である:
select
count(*)
from
INFORMATION_SCHEMA.VIEWS
where
table_name = 'MyView'
and table_schema = 'MySchema'
編集:これは、作業を行いますSQL Serverでは、ビューのスキーマを取得するためにsys.schemas
に参加する必要はありません。すべてがdbo
の場合、これはあまり重要ではありませんが、スキーマをうまく利用している場合は、そのことを覚えておく必要があります。
各RDBMSにはこのようなメタデータをチェックする独自の方法がありますが、information_schema
は実際にはANSIですが、Oracleと明らかにSQLiteが何らかの形でサポートしていないと思います。
を働くことはありません。 –
@lutz:+1、SQLiteの上のサポートの欠如のためにそうしないと、これはsqliteのを使用して:) –
Oracleの場合は、「all_views」テーブルを使用します。
これは実際にあなたのdbmsに依存します。
ケビンの答えを広げる。
private bool CustomViewExists(string viewName)
{
using (SalesPad.Data.DataConnection dc = yourconnection)
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(String.Format(@"IF EXISTS(select * FROM sys.views where name = '{0}')
Select 1
else
Select 0", viewName));
cmd.CommandType = CommandType.Text;
return Convert.ToBoolean(dc.ExecuteScalar(cmd));
}
}
if exists (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]'))
Microsoft SQL Serverの場合、これはスキーマ管理スクリプトの作成時にIF EXISTSがよく使用されるため、最も便利です。このスクリプトでは、すでにCREATE ViEW [dbo]。[MyView]を持っている可能性があります。上記のコピーと貼り付けのための最も簡単なスニペットです。 –
あなたはすべての既存のビューの妥当性と一貫性を確認したい場合は、多くの上、指定の方法が、私のお気に入りの1がすでにありますが、あなたは、次のクエリ
declare @viewName sysname
declare @cmd sysname
DECLARE check_cursor CURSOR FOR
SELECT cast('['+SCHEMA_NAME(schema_id)+'].['+name+']' as sysname) AS viewname
FROM sys.views
OPEN check_cursor
FETCH NEXT FROM check_cursor
INTO @viewName
WHILE @@FETCH_STATUS = 0
BEGIN
set @cmd='select * from '[email protected]
begin try
exec (@cmd)
end try
begin catch
print 'Error: The view '[email protected]+' is corrupted .'
end catch
FETCH NEXT FROM check_cursor
INTO @viewName
END
CLOSE check_cursor;
DEALLOCATE check_cursor;
を使用することができます不足している..
nView
ビュー
UPDATE 2017年3月25日の名前です
GO IF OBJECT_ID('nView', 'V') IS NOT NULL DROP VIEW nView; GO
:@hanesjwはOBJECT_ID
P
の代わりV
を使用するストアプロシージャを削除するために提案されているよう
GO
IF OBJECT_ID('nProcedure', 'P') IS NOT NULL
DROP PROCEDURE dbo.sprocName;
GO
また、スキーマを受け入れます。 'object_id(N'dbo.View '、N'v)' –
私はこれを好きです。テーブルにも 'u'を使用できます。 –
ストアドプロシージャの場合は 'P'。 OBJECT_ID( 'dbo.sprocName'、 'P')は DROP PROCEDURE dbo.sprocName NULLされていない場合は、 GO – hanesjw
落下の有無を確認する人には、View
を使用してください。
あなたが新しいDIE文の代わりに、大きなIF
ラッパー
構文を使用することができます
DROP VIEW [ IF EXISTS ] [ schema_name . ] view_name [ ...,n ] [ ; ]
問合せ:
DROP VIEW IF EXISTS view_name
詳細情報SQL Serverでのhere
、
declare @ViewName nvarchar(20)='ViewNameExample'
if exists(SELECT 1 from sys.objects where object_Id=object_Id(@ViewName) and Type_Desc='VIEW')
begin
-- Your SQL Code goes here ...
end
あなたはおそらく同様に、ここでsys.schema' 'に参加したいです。 – Eric
エラー - オブジェクト名 'sys.views'が無効です。私はマスターDBに照会していました – Steam
これがCREATEとALTERの間で(私が行ったように)決定することがわかった場合、これはVIEWでは機能しません - VIEW *をDROPしてからCREATEする必要があります。 IF EXISTSはまだVIEW thoを落とすために正常に動作しますので、ありがとう! :) *権限を忘れることはありません。 ;) – FrostbiteXIII