创建数据库时,文件路径出错
大家好, 小弟刚学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语法检查, 这里的[]是什么意思?
希望各位入门之人多多指点!
问题点数:100、回复次数:7Top
1 楼woodcord(我心飞翔)回复于 2005-04-03 07:45:55 得分 10
up 一下Top
2 楼zlf_jack(风云剑客)回复于 2005-04-03 20:16:14 得分 0
没人懂阿? 我现在改成硬编码, 已经创建好了数据库!
希望有懂T-SQL解析器的高手解答一下小弟的疑惑!Top
3 楼zjcxc(邹建)回复于 2005-04-03 20:27:05 得分 90
好好看看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
)Top
4 楼zjcxc(邹建)回复于 2005-04-03 20:29:31 得分 0
--用[]括起来后,那些信息已经是做为对象名,而不是变量了
--你可以把你的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
Top
5 楼zjcxc(邹建)回复于 2005-04-03 20:32:18 得分 0
--正确的
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
Top
6 楼zlf_jack(风云剑客)回复于 2005-04-04 22:16:10 得分 0
哦, 谢了, 能解释下为什么不能用变量吗?
以微软的实力不至于编个不支持变量的DDL SQL语句!Top
7 楼zjcxc(邹建)回复于 2005-04-05 07:58:03 得分 0
不支持就是不支持,这点在create database的语法上写得很明白
不是什么都需要支持,关键是看有没有需要Top




