SQL Server创建数据库语法详解
·
SQL Server 使用 SQL 语句创建数据库
在 SQL Server 中,可以使用 CREATE DATABASE 语句来创建新数据库。以下是创建数据库的基本语法和一些示例。
基本语法
sql
CREATE DATABASE database_name
[ ON
[ PRIMARY ]
( NAME = logical_file_name ,
FILENAME = 'os_file_name' ,
[ , SIZE = size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
[ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
]
[ LOG ON
( NAME = logical_file_name ,
FILENAME = 'os_file_name' ,
[ , SIZE = size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
[ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
]
[ COLLATE collation_name ]
简单示例
1. 创建最简单的数据库
sql
CREATE DATABASE MyDatabase;
2. 创建数据库并指定文件属性
sql
CREATE DATABASE SalesDB ON ( NAME = SalesDB_Data, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\SalesDB.mdf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) LOG ON ( NAME = SalesDB_Log, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\SalesDB.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB );
3. 创建数据库并指定排序规则
sql
CREATE DATABASE InternationalDB COLLATE Latin1_General_CI_AS;
完整示例
sql
-- 创建带有多个数据文件和日志文件的数据库 CREATE DATABASE CompanyDB ON PRIMARY ( NAME = CompanyDB_Primary, FILENAME = 'C:\Data\CompanyDB_Prm.mdf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ), ( NAME = CompanyDB_Secondary, FILENAME = 'C:\Data\CompanyDB_Sec.ndf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) LOG ON ( NAME = CompanyDB_Log1, FILENAME = 'C:\Data\CompanyDB_Log1.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ), ( NAME = CompanyDB_Log2, FILENAME = 'C:\Data\CompanyDB_Log2.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB );
验证数据库创建
创建数据库后,可以使用以下语句验证:
sql
-- 查看所有数据库 SELECT name FROM sys.databases; -- 查看特定数据库的详细信息 EXEC sp_helpdb 'MyDatabase';
注意事项
-
确保有足够的权限创建数据库(通常是
CREATE DATABASE权限) -
确保指定的文件路径存在且SQL Server服务账户有写入权限
-
如果不指定文件路径,SQL Server会使用默认实例的数据目录
-
创建数据库后,建议立即备份 master 数据库
删除数据库
如果需要删除已创建的数据库,可以使用:
sql
DROP DATABASE MyDatabase;
注意:删除数据库会永久删除所有数据和数据库文件。
SQL Server 判断数据库不存在时创建数据库
在 SQL Server 中,可以使用条件判断来确保只在数据库不存在时才创建数据库。以下是几种实现方法:
方法一:使用 IF NOT EXISTS 条件判断
sql
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'MyDatabase')
BEGIN
CREATE DATABASE MyDatabase;
PRINT '数据库 MyDatabase 创建成功';
END
ELSE
BEGIN
PRINT '数据库 MyDatabase 已存在';
END
方法二:使用更详细的检查
sql
IF DB_ID('MyDatabase') IS NULL
BEGIN
CREATE DATABASE MyDatabase
ON
( NAME = MyDatabase_Data,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabase.mdf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB )
LOG ON
( NAME = MyDatabase_Log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabase.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB );
PRINT '数据库 MyDatabase 创建成功';
END
ELSE
BEGIN
PRINT '数据库 MyDatabase 已存在';
END
方法三:创建带参数的存储过程
sql
CREATE PROCEDURE CreateDatabaseIfNotExists
@DatabaseName NVARCHAR(128),
@DataFilePath NVARCHAR(260) = NULL,
@LogFilePath NVARCHAR(260) = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 如果未指定文件路径,使用默认路径
IF @DataFilePath IS NULL
SET @DataFilePath = CONVERT(NVARCHAR(260), SERVERPROPERTY('InstanceDefaultDataPath')) + @DatabaseName + '.mdf';
IF @LogFilePath IS NULL
SET @LogFilePath = CONVERT(NVARCHAR(260), SERVERPROPERTY('InstanceDefaultLogPath')) + @DatabaseName + '.ldf';
-- 检查数据库是否已存在
IF DB_ID(@DatabaseName) IS NULL
BEGIN
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N'CREATE DATABASE ' + QUOTENAME(@DatabaseName) +
N' ON (NAME = N''' + @DatabaseName + '_Data'', ' +
N'FILENAME = N''' + @DataFilePath + ''', ' +
N'SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB) ' +
N'LOG ON (NAME = N''' + @DatabaseName + '_Log'', ' +
N'FILENAME = N''' + @LogFilePath + ''', ' +
N'SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB)';
EXEC sp_executesql @SQL;
PRINT '数据库 ' + @DatabaseName + ' 创建成功';
END
ELSE
BEGIN
PRINT '数据库 ' + @DatabaseName + ' 已存在';
END
END
GO
-- 使用存储过程创建数据库
EXEC CreateDatabaseIfNotExists 'MyNewDatabase';
方法四:使用动态SQL实现更灵活的控制
sql
DECLARE @DatabaseName NVARCHAR(128) = 'MyDatabase';
DECLARE @SQL NVARCHAR(MAX);
IF DB_ID(@DatabaseName) IS NULL
BEGIN
SET @SQL = N'CREATE DATABASE ' + QUOTENAME(@DatabaseName) +
N' ON PRIMARY ' +
N'(NAME = N''' + @DatabaseName + '_Data'', ' +
N'FILENAME = N''C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\' + @DatabaseName + '.mdf'', ' +
N'SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB) ' +
N'LOG ON ' +
N'(NAME = N''' + @DatabaseName + '_Log'', ' +
N'FILENAME = N''C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\' + @DatabaseName + '.ldf'', ' +
N'SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB)';
EXEC sp_executesql @SQL;
PRINT '数据库 ' + @DatabaseName + ' 创建成功';
END
ELSE
BEGIN
PRINT '数据库 ' + @DatabaseName + ' 已存在';
END
注意事项
-
确保执行脚本的用户有创建数据库的权限
-
文件路径需要存在且SQL Server服务账户有写入权限
-
使用
QUOTENAME()函数可以防止SQL注入攻击 -
在生产环境中,建议使用存储过程来封装数据库创建逻辑
-
考虑添加错误处理机制,使用
TRY...CATCH块来捕获和处理可能出现的错误
完整示例(带错误处理)
sql
BEGIN TRY
IF DB_ID('MyDatabase') IS NULL
BEGIN
CREATE DATABASE MyDatabase
ON
( NAME = MyDatabase_Data,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabase.mdf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB )
LOG ON
( NAME = MyDatabase_Log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabase.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB );
PRINT '数据库 MyDatabase 创建成功';
END
ELSE
BEGIN
PRINT '数据库 MyDatabase 已存在';
END
END TRY
BEGIN CATCH
PRINT '创建数据库时出错: ' + ERROR_MESSAGE();
END CATCH
这些方法可以帮助您在 SQL Server 中安全地创建数据库,避免因重复创建而导致的错误。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)