我想创建一个数据库,但我想读取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)
但是我收到了这个错误: ' +'。
附近的语法不正确我尝试了很多东西,但仍然有这个问题。我知道我可以使用+,因为我之前使用过它,但我不知道它有什么问题:(我会感激任何帮助!
答案 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变量中使用'
转义了''
个字符。