TSQLを使用してSQL Server上にデータベースが存在するかどうかを確認するための理想的な方法は何ですか?これを実装するには複数の方法があります。
マイクロソフトのスクリプトから:
DECLARE @dbname nvarchar(128)
SET @dbname = N'Senna'
IF (EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname
OR name = @dbname)))
-- code mine :)
PRINT 'db exists'
実際にはそれを使うのが一番です:
IF DB_ID('dms') IS NOT NULL
--code mine :)
print 'db exists'
https://docs.Microsoft.com/ja-jp/sql/t-sql/functions/db-id-transact-sql を参照してください。
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'YourDatabaseName')
Do your thing...
ところで、これはSQL Server Studioから直接来たので、このツールにアクセスできるのであれば、利用可能なさまざまな "Script xxxx AS"機能を試してみることをお勧めします。あなたの人生を楽にします! :)
私は@ Eduardoの回答が好きで、受け入れられた回答が好きでした。私はこのようなものからブール値を取り戻すのが好きです、それで私はあなたのためにそれを書きました。
CREATE FUNCTION dbo.DatabaseExists(@dbname nvarchar(128))
RETURNS bit
AS
BEGIN
declare @result bit = 0
SELECT @result = CAST(
CASE WHEN db_id(@dbname) is not null THEN 1
ELSE 0
END
AS BIT)
return @result
END
GO
今、あなたはこのようにそれを使うことができます:
select [dbo].[DatabaseExists]('master') --returns 1
select [dbo].[DatabaseExists]('slave') --returns 0
別の方法は、SqlDataReader
name__およびSqlConnection
name__とともにSqlCommand
name__を使用することです。 HasRows
name__プロパティを使用してください。データベースが存在する場合はtrue
name__、存在しない場合はfalse
name__です。
例(この例では、データベース名は "Matches"です):
string CreateDatabaseConnectionString="/*the connection string*/";
public static bool DatabaseExists()
{
bool Count;
string DatabaseCheckString = "select name from master.sys.databases where name='Matches'";
SqlConnection MyConn = new SqlConnection(CreateDatabaseConnectionString);
SqlCommand DatabaseExistsCommand = new SqlCommand(DatabaseCheckString, MyConn);
MyConn.Open();
SqlDataReader Reader = DatabaseExistsCommand.ExecuteReader();
Count = Reader.HasRows;
MyConn.Close();
return Count;
}
試してみる
IF EXISTS
(
SELECT name FROM master.dbo.sysdatabases
WHERE name = N'New_Database'
)
BEGIN
SELECT 'Database Name already Exist' AS Message
END
ELSE
BEGIN
CREATE DATABASE [New_Database]
SELECT 'New Database is Created'
END