用变量重命名逻辑名

时间:2018-11-13 14:42:06

标签: sql-server tsql

我正在尝试使用变量重命名文件逻辑名。问题不在于变量@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

1 个答案:

答案 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 )'