我正在尝试使用变量重命名文件逻辑名。问题不在于变量@ndfnameold中的查询,因为如果我输入简单的字符串,我将得到相同的错误。
DECLARE @ndfnameold Nvarchar(MAX)
SET @ndfnameold = (SELECT name from [sys].[database_files] where physical_name like '%ndf')
DECLARE @query varchar(MAX)
SET @query = 'ALTER DATABASE [MYDATABASE] MODIFY FILE ( NAME = '+ @ndfnameold +', NEWNAME = MYDATABASE_1_Data )'
EXEC(@query)
第15级,州1,第1行的消息102 '-'附近的语法不正确。
我没有错。 SQL Server 2017
答案 0 :(得分:3)
由于SQL的其余部分中没有-
,因此我们可以推断出旧逻辑文件名中有一个。由于-
不是allowed character for a Regular Identifier,因此我们必须定界。
最安全的做法是使用QUOTENAME
function来分隔名称,同时如果其他字符也有问题,则遵守转义规则:
SET @query = 'ALTER DATABASE [MYDATABASE] MODIFY FILE ( NAME = ' +
QUOTENAME(@ndfnameold) +
', NEWNAME = MYDATABASE_1_Data )'