【问题标题】:Passing \ inside stored procedure Input parameter在存储过程中传递 \ 输入参数
【发布时间】: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 @varEXEC (@var) 更安全,因为 SQL Server 验证 @var 是一个对象名称并调用它而不是仅仅执行任何任意 SQL
  • 仅供参考,上面的语句不适用于不受支持的 SQL Server 2008,或者很快将不受支持的 2012; CREATE OR ALTER 在 SQL Server 2016 中引入。

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

\ 不是问题。

语法不支持您尝试的任意替换。

确实 support 参数化整个对象名称,但你可以这样做

CREATE PROCEDURE dbo.DeltaCheck @ServerName SYSNAME
AS
BEGIN
    DECLARE @ObjectName NVARCHAR(1000) = QUOTENAME(@ServerName)  + '.master.sys.sp_MSforeachdb'

    INSERT INTO Space
    EXECUTE @ObjectName '...'
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2016-04-05
    相关资源
    最近更新 更多