2016-01-11 65 views
0

我希望有人可以帮助我确定为什么这个查询导致我的语法错误?SQL Server变量使用

这是一个脚本的一部分,当我硬编码和定义@modifiedFileLocationC:\Program Files ---无论如何。

在这一步之前,我已经设置并打印出了modifiedFileLocation,它打印出我期望的内容。我试图用这个查询这里的内部的价值:

(NAME = N$(databaseName), FILENAME = 'N' + @modifiedFileLocation + '\$(databaseName).mdf' , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 

我收到此错误信息:

附近有语法错误“+”。

我不知道它需要什么样子,和任何帮助/洞察力,将不胜感激

+0

你能分享更多的查询的最佳方式? – Forty3

+1

这是否是ALTER DATABASE调用的一部分? – Forty3

+0

这是ALTER DATABASE命令的一部分 – user1058359

回答

0

你可以试试这个?我认为$(databaseName)已经是一个字符串,所以它不需要'。另外,\需要被转义。希望我不会太远:)

(NAME = N$(databaseName), FILENAME = 'N' + @modifiedFileLocation + '\\'+$(databaseName)+'.mdf' , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 
+0

给了这一枪,仍然没有运气,我也得到了同样的错误。 – user1058359

+0

$(databaseName)在我的原始示例中被视为字符串类型时工作正常,它是我在查询中给出的问题中设置的变量 – user1058359

0

可能是因为你试图在声明中构建一个NVARCHAR。尝试声明另一个变量并在调用之前设置该值。

DECLARE @nvarPath NVARCHAR(MAX) = @modifiedFileLocation + '\\'+ $(databaseName) + '.mdf' 

(NAME = N$(databaseName), FILENAME = @nvarPath , SIZE = 1048576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10240KB) 
+0

以及我无法声明该变量,因为那样会覆盖我所拥有的在 – user1058359

+0

之前不确定是什么意思..但是你不能在函数调用中进行字符串连接..就像你不能这样做'exec sp_executesql N'Select * From'+'Table1'' – JamieD77

0

没有办法按原样提出问题。相反,我找到了另一种方式来做到这一点。

保存整个脚本(无论存储过程是)转换成可变

DECLARE @sqlscriptname varchar(MAX) 

@sqlscriptname = <THE WHOLE SCRIPT> 

代替声明变量如@logPath声明它这样{LOGPATH} 例如: (NAME = N {的databaseName },FILENAME = 'N''{LOGPATH}”,SIZE = 1048576KB,MAXSIZE = UNLIMITED,FILEGROWTH = 10240KB)

注意:您将需要使用四蜱( '为了' ''),以报价你正在替换的字符串变量;双蜱逃脱(“”)的字符串,另一个双蜱添加蜱

,然后使用此功能:

SET @sqlscriptname = REPLACE(@sqlscriptname, '{logPath}', @modifiedFileLocation + '$(databaseName)_log.ldf') 

然后,一旦替换完成后,你可以简单地运行:

EXECUTE(@sqlscriptname) 

做的非常令人费解的方式,但它似乎是一个存储过程中