各位,麻烦帮看一下, 学习利用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的赋值,我不想直接赋一个死值, 我想用变量,就如同报错的那种形式,哪位大侠能告诉我, 怎么错了, 如何改吗?谢谢了。

解决方案 »

  1.   


    --判断数据库文件是否已存在
    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)
      

  2.   

    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