【发布时间】:2021-07-19 21:50:53
【问题描述】:
感谢您查看我的帖子。
我创建了一个过程并试图传递一个包含 \ 内部参数但它的抛出错误的值。
请告诉我如何在参数中传递 \。
CREATE OR ALTER PROCEDURE DeltaCheck
@ServerName nvarchar(30)
AS
INSERT INTO Space
EXECUTE [@ServerName].master.sys.sp_MSforeachdb ' '
GO
EXEC DeltaCheck @ServerName = 'Hello\TestA'
【问题讨论】:
-
我不认为`\`是重点:你不能用参数指定服务器名称
-
有什么方法可以实现吗?
-
动态 SQL 是唯一的方法。不要忘记使用
QUOTENAME()来获得正确的括号 -
您不需要动态 SQL。 Execute 接受
@module_name_var,因此您可以将四个部分名称连接到一个变量中并执行它 -EXEC @var比EXEC (@var)更安全,因为 SQL Server 验证@var是一个对象名称并调用它而不是仅仅执行任何任意 SQL -
仅供参考,上面的语句不适用于不受支持的 SQL Server 2008,或者很快将不受支持的 2012;
CREATE OR ALTER在 SQL Server 2016 中引入。
标签: sql sql-server sql-server-2008 sql-server-2012