2014-10-16 53 views
2

我想创建一个数据库,但我想,因为我使用的实例名称为我的文件夹名称,所以我写了我的代码读取实例名称不正确的语法为:T-SQL错误:附近“+”

set @instancename = CONVERT(VARCHAR(50),SERVERPROPERTY ('InstanceName')) 
if @instancename IS NULL 
    begin 
    set @instancename= 'MSSQLSERVER' -- MSSQLSERVER if default instance 
    end 

declare @sql varchar(128) 

set @sql= 'CREATE DATABASE [DPO_MainDB] ON PRIMARY 
(NAME = N''DPO_MainDB_Data'', FILENAME= N''H:\'[email protected]+'\SQLData\DPO_MainDB_Data.MDF'', SIZE = 4MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%) 
LOG ON 
(NAME = N''DPO_MainDB_Log'', FILENAME = N''G:\'[email protected]+'\SQLLogs\DPO_MainDB_Log.LDF'' , SIZE = 2048KB , MAXSIZE = UNLIMITED , FILEGROWTH = 10%) 
END' 
Exec(@sql) 

但我得到这个错误: '+'附近的语法不正确。

我尝试了很多东西,但仍然有这个问题。我知道我可以使用+,因为我以前使用它,但我不知道它有什么问题:(我会感谢任何帮助!

回答

2

您将需要使用动态SQL做到这一点,所以你将创建SQL你想在一个变量来执行,然后该变量传递给EXEC因此,像:

set @sql = 'CREATE DATABASE [DPO_MainDB] ON PRIMARY 
(NAME = N''MainDB_Data'', FILENAME= N''H:\'[email protected]+'\SQLData\DPO_MainDB_Data.MDF'', SIZE = 4MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%) 
LOG ON 
(NAME = N''MainDB_Log'', FILENAME = N''G:\'[email protected]+'\SQLLogs\DPO_MainDB_Log.LDF'' , SIZE = 2048KB , MAXSIZE = UNLIMITED , FILEGROWTH = 10%) 
END' 

EXEC(@sql) 

您将能够引用变量在@sql作业请注意,我已经逃脱'字符''没有问题。里面的@sql变量。

+0

谢谢你,我试过了......现在我看到这个错误:''''附近语法不正确r exec(sql)...抱歉,我很初学t-sql – faranak777 2014-10-16 18:43:31

+0

这是SQL Server吗? – 2014-10-16 18:48:31

+0

是的,它是sql服务器 – faranak777 2014-10-16 18:49:28