创建数据库时,文件路径出错

levinjoe 2005-04-02 11:27:39
大家好, 小弟刚学SQL Server, 花了一个晚上大约看了一个晚上的T-SQL帮助, 编写了如下代码:

use master

------------------------------------------------------------
-----Check whether or not Having created the database-------
------------------------------------------------------------
DECLARE @CurrentDBName nvarchar(35)
SET @CurrentDBName = N'XISES'
DECLARE @CurrentDBPath nvarchar(255)
SET @CurrentDBPath = N'G:\课题\XISES\data'
DECLARE @CurrentDBPrimaryMDF nvarchar(255)
SET @CurrentDBPrimaryMDF = N'XISESData'
DECLARE @CurrentDBLogLDF nvarchar(255)
SET @CurrentDBLogLDF = N'XISESLog'

if not (exists (select * from dbo.sysdatabases where name = @CurrentDBName))
begin
CREATE DATABASE [@CurrentDBName]
ON
(
NAME = [@CurrentDBPrimaryMDF],
FILENAME = [@CurrentDBPath + @CurrentDBPrimaryMDF + N'.mdf'],
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5
)
LOG ON
(
NAME = [@CurrentDBLogLDF],
FILENAME = [@CurrentDBPath + @CurrentDBLogLDF + N'.ldf'],
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
end

GO

程序运行时出现如下问题:
服务器: 消息 5105,级别 16,状态 2,行 17
设备激活错误。物理文件名 '@CurrentDBPath + @CurrentDBPrimaryMDF + N'.mdf'' 可能有误。
服务器: 消息 1802,级别 16,状态 1,行 17
CREATE DATABASE 失败。未能创建所列出的某些文件名。请检查前面的错误信息。

这是什么意思?怎么理解?
我设置的路径是直接从浏览器复制过来的,应该没有问题阿?
我还发现必须加中括号[]才能通过Check语法检查, 这里的[]是什么意思?

希望各位入门之人多多指点!
...全文
361 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2005-04-05
  • 打赏
  • 举报
回复
不支持就是不支持,这点在create database的语法上写得很明白

不是什么都需要支持,关键是看有没有需要
levinjoe 2005-04-04
  • 打赏
  • 举报
回复
哦, 谢了, 能解释下为什么不能用变量吗?

以微软的实力不至于编个不支持变量的DDL SQL语句!
zjcxc 元老 2005-04-03
  • 打赏
  • 举报
回复
--正确的

use master

------------------------------------------------------------
-----Check whether or not Having created the database-------
------------------------------------------------------------
DECLARE @CurrentDBName nvarchar(35)
SET @CurrentDBName = N'XISES'
DECLARE @CurrentDBPath nvarchar(255)
SET @CurrentDBPath = N'G:\课题\XISES\data'
DECLARE @CurrentDBPrimaryMDF nvarchar(255)
SET @CurrentDBPrimaryMDF = N'XISESData'
DECLARE @CurrentDBLogLDF nvarchar(255)
SET @CurrentDBLogLDF = N'XISESLog'

if not (exists (select * from dbo.sysdatabases where name = @CurrentDBName))
begin
EXEC(N'
CREATE DATABASE ['+@CurrentDBName+N']
ON
(
NAME = ['+@CurrentDBPrimaryMDF+N'],
FILENAME = '''+@CurrentDBPath + @CurrentDBPrimaryMDF + N'.mdf'',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5
)
LOG ON
(
NAME = ['+@CurrentDBLogLDF+N'],
FILENAME = '''+@CurrentDBPath + @CurrentDBLogLDF + N'.ldf'',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)')
end
GO
zjcxc 元老 2005-04-03
  • 打赏
  • 举报
回复
--用[]括起来后,那些信息已经是做为对象名,而不是变量了

--你可以把你的filename改成固定的文件名,看看执行你的语句创建的是什么东东

CREATE DATABASE [@CurrentDBName] --这里可以用变量么?
ON
(
NAME = [@CurrentDBPrimaryMDF], --这里可以用变量么?
FILENAME ='c:\a.mdf',-- [@CurrentDBPath + @CurrentDBPrimaryMDF + N'.mdf'], --这里可以用变量么?
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5
)
LOG ON
(
NAME = [@CurrentDBLogLDF], --这里可以用变量么?
FILENAME = 'c:\a.ldf',--[@CurrentDBPath + @CurrentDBLogLDF + N'.ldf'], --这里可以用变量么?
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)

--显示创建的是什么
select * from master..sysdatabases
select * from [@CurrentDBName]..sysfiles

zjcxc 元老 2005-04-03
  • 打赏
  • 举报
回复
好好看看create database的语法

CREATE DATABASE [@CurrentDBName] --这里可以用变量么?
ON
(
NAME = [@CurrentDBPrimaryMDF], --这里可以用变量么?
FILENAME = [@CurrentDBPath + @CurrentDBPrimaryMDF + N'.mdf'], --这里可以用变量么?
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5
)
LOG ON
(
NAME = [@CurrentDBLogLDF], --这里可以用变量么?
FILENAME = [@CurrentDBPath + @CurrentDBLogLDF + N'.ldf'], --这里可以用变量么?
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
levinjoe 2005-04-03
  • 打赏
  • 举报
回复
没人懂阿? 我现在改成硬编码, 已经创建好了数据库!

希望有懂T-SQL解析器的高手解答一下小弟的疑惑!
woodcord 2005-04-03
  • 打赏
  • 举报
回复
up 一下

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧