日期:2014-05-17  浏览次数:20389 次

求教,单引号
各位,麻烦帮看一下, 学习利用T_SQL建数据库,老报错,困扰我好几天了.求帮忙解惑

--将数据库上下文更改为指定数据库master(该数据库记录所有的登录帐户和系统配置设置)。
USE master;
GO
--判断数据库文件是否已存在
IF DB_ID(N'Mydb1') IS NOT NULL
  DROP DATABASE Mydb1;
GO
--获取服务器所在的路径。@data_path="C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\"
DECLARE @data_path nvarchar(256);
set @data_path=(select SUBSTRING(physical_name,1,CHARINDEX(N'master.mdf',LOWER(physical_name))-1) FROM master.sys.master_files WHERE database_id=1 AND file_id=1);
--创建数据库
CREATE DATABASE Mydb1
ON
(NAME='Mydb1_dat',
 FILENAME=''''+@data_path+'Mydb1dat.mdf'+'''',
 --FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\Mydb1dat.mdf',
 SIZE=10,
 MAXSIZE=50,
 FILEGROWTH=5)
;
GO

运行报错:
消息 102,级别 15,状态 1,第 8 行
'+' 附近有语法错误。
但如果用下面注释掉的, 就成功。 错误就在FILENAME的赋值,我不想直接赋一个死值, 我想用变量,就如同报错的那种形式,哪位大侠能告诉我, 怎么错了, 如何改吗?谢谢了。

------解决方案--------------------
SQL code

--判断数据库文件是否已存在
IF DB_ID(N'Mydb1') IS NOT NULL
  DROP DATABASE Mydb1;
GO
--获取服务器所在的路径。@data_path="C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\"
declare @data_path nvarchar(256);
set @data_path=
(
select SUBSTRING(physical_name,1,CHARINDEX(N'master.mdf',LOWER(physical_name))-1) 
FROM master.sys.master_files WHERE database_id=1 AND file_id=1
);

--创建数据库
declare @sql varchar(8000)
set @sql='CREATE DATABASE Mydb1
ON
(NAME=''Mydb1_dat'',
 FILENAME='''+@data_path+'Mydb1dat.mdf'',
 SIZE=10,
 MAXSIZE=50,
 FILEGROWTH=5)'
exec (@sql)

------解决方案--------------------
SQL code
USE master;
GO
--判断数据库文件是否已存在
IF DB_ID(N'Mydb1') IS NOT NULL
  DROP DATABASE Mydb1;
GO
--获取服务器所在的路径。@data_path="C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\DATA\"
DECLARE @data_path nvarchar(256);
set @data_path=(select SUBSTRING(physical_name,1,CHARINDEX(N'master.mdf',LOWER(physical_name))-1) FROM master.sys.master_files WHERE database_id=1 AND file_id=1);
--创建数据库
EXEC ('
CREATE DATABASE Mydb1
ON
(NAME=''Mydb1_dat'',
 FILENAME='''+@data_path+'Mydb1dat.mdf'',
 SIZE=10,
 MAXSIZE=50,
 FILEGROWTH=5)
;
')
GO