T-SQL错误:' +'附近的语法不正确

时间:2014-10-16 18:07:49

标签: sql tsql

我想创建一个数据库,但我想读取instancename,因为我使用实例名作为我的文件夹名,所以我把我的代码编写为:

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:\'+@instancename+'\SQLData\DPO_MainDB_Data.MDF'', SIZE = 4MB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
LOG ON 
( NAME = N''DPO_MainDB_Log'', FILENAME = N''G:\'+@instancename+'\SQLLogs\DPO_MainDB_Log.LDF'' , SIZE = 2048KB , MAXSIZE = UNLIMITED , FILEGROWTH = 10%)
END'
Exec(@sql)

但是我收到了这个错误: ' +'。

附近的语法不正确

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

1 个答案:

答案 0 :(得分:2)

您需要使用动态SQL执行此操作。因此,您将创建要在变量中执行的sql,然后将该变量传递给EXEC。如下所示:

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

EXEC(@sql)

您可以在@sql赋值中引用变量没问题。请注意,我已经在@sql变量中使用'转义了''个字符。