sql - T-SQL错误: Incorrect syntax near '+'

标签 sql 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:\'+@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/

相关文章:

t-sql - 使用 SQL 为其余列创建列值标题

loops - 需要帮助从 CASE WHEN 中删除函数

按重叠日期进行 SQL 分区

sql - 对 SQL Server 2005 结果进行分页

java - 查询异常 : JPA-style positional param was not an integral ordinal

mysql - 在 SQL 中从联接表填充数据

t-sql - TSQL ROW_NUMBER() OVER(分区依据...排序依据...)

sql-server - 交叉连接时出错

sql - 当数据行很大时不使用 PostgreSQL 索引

mysql - 选择多部分(多仓库)订单时出现问题