sql - 为什么我不能使用变量代替字符串作为参数

标签 sql sql-server

为什么这有效:

ALTER DATABASE TEST2 MODIFY FILE ( NAME = TEST1, NEWNAME = TEST2, FILENAME = 'C:\Data\TEST2')

但这不起作用:

DECLARE @PATH NVARCHAR(255)
SET     @PATH = 'C:\Data\TEST2'
ALTER DATABASE TEST2 MODIFY FILE ( NAME = TEST1, NEWNAME = TEST2, FILENAME = @PATH)

我收到错误:

消息 102,级别 15,状态 1,第 5 行 “@PATH”附近的语法不正确。

最佳答案

我相信这是因为 ALTER 细节,当您显式指定一个值时,它将是一个常量,如果是变量 - 值将在运行时解析。

无论如何,您可以使用动态 Sql 传递自定义变量值:

DECLARE @name varchar(128)
DECLARE @query varchar(255)
SET @name = '...'
SET @query = 'ALTER DATABASE TEST2 MODIFY FILE ( NAME = TEST1, NEWNAME = TEST2, FILENAME =  ' 
             + @name 
             + ')'
EXEC(@query)

关于sql - 为什么我不能使用变量代替字符串作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9584844/

相关文章:

mysql - 如何使用 mysqldump 保存 UTF8mb4 数据?

php - 有没有办法在 PDO 中设置默认游标类型(特别是 PDO_SQLSRV)?

sql - select count(1) 与 select rowcnt from sysindexes 性能和使用?

sql - 创建以月份范围作为列的 SQL 表并使用表数据填充字段

sql-server - 100k 行以随机顺序返回,请不要出现 SQL 超时

sql - 将日期范围拆分为月份

c# - MySql查询合并表并填充dataGridView

php - 从 mysql/php 中的用户 ID 检索消息

SQL查询从表的每条记录生成多条记录

sql - 将结果与今天的日期进行比较?