You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行存储过程时提示Invalid object name错误的求助

问题分析与解决方法

你遇到的错误根源是:QUOTENAME(@table_name)会把传入的带schema的表名pricing.pricingprod2023_nom3_copy2整体包裹为[pricing.pricingprod2023_nom3_copy2],SQL Server会将其识别为单一对象名(而非schema.表名的组合),因此找不到对应的表。

以下是两种可行的解决方式:

方式一:固定Schema,调用时仅传表名

如果存储过程仅用于查询pricing schema下的表,可直接在存储过程中指定schema:

ALTER PROCEDURE pricing.select_from_table @table_name NVARCHAR(255)
AS  
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'SELECT * FROM pricing.' + QUOTENAME(@table_name);
    EXEC sp_executesql @sql;
END

调用语句修改为:

EXECUTE [pricing].[select_from_table] 'pricingprod2023_nom3_copy2'

方式二:支持传入带Schema的表名

若需要存储过程兼容任意schema的表,可拆分schema和表名后分别转义:

ALTER PROCEDURE pricing.select_from_table @table_name NVARCHAR(255)
AS  
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    DECLARE @schema NVARCHAR(255) = 'dbo'; -- 设置默认schema
    DECLARE @tbl NVARCHAR(255);

    -- 判断输入是否包含schema分隔符
    IF CHARINDEX('.', @table_name) > 0
    BEGIN
        SET @schema = LEFT(@table_name, CHARINDEX('.', @table_name) - 1);
        SET @tbl = RIGHT(@table_name, LEN(@table_name) - CHARINDEX('.', @table_name));
    END
    ELSE
    BEGIN
        SET @tbl = @table_name;
    END

    -- 分别转义schema和表名,拼接执行语句
    SET @sql = N'SELECT * FROM ' + QUOTENAME(@schema) + '.' + QUOTENAME(@tbl);
    EXEC sp_executesql @sql;
END

此时原调用语句可直接正常执行:

EXECUTE [pricing].[select_from_table] 'pricing.pricingprod2023_nom3_copy2'

内容的提问来源于stack exchange,提问作者akshenndra garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:10:16