我想创建一个数据库,但我想读取实例名称,因为我使用实例名称作为文件夹名称,所以我将代码编写为:
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)
但是我收到了这个错误: “+”附近的语法不正确。
我尝试了很多方法,但仍然遇到这个问题。我知道我可以使用 +,因为我以前使用过它,但我不知道它有什么问题:(我将不胜感激任何帮助!
最佳答案
您需要使用动态 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 变量内使用 ''
转义了 '
字符。
关于sql - T-SQL错误: Incorrect syntax near '+' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411083/