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

SQL字符串与变量拼接取值及存储过程Result变量打印异常问题

问题1:@Result的预期取值

当@hostname值为machine1时,转义后的双引号会被解析为正常双引号,拼接后@Result的最终值为:

{ "host_name": "machine1", "status": 15 }

问题2:代码无法输出@Result的原因排查

按优先级列出所有错误点:

  • 建表语法错误:创建utilisateur表时,age VARCHAR(5)末尾多了一个多余的逗号,导致表创建失败,后续代码全部无法正常执行。
  • 输出参数调用错误:存储过程的@Result是OUTPUT输出参数,不能直接传入字符串常量'test',需要先声明变量接收输出,调用时必须加OUTPUT关键字才会触发赋值。
  • PRINT输出位置问题:SQLFiddle的默认展示区是查询结果页,PRINT输出的内容需要切换到「Messages(消息)」标签页才能查看。
  • 逻辑冗余问题:存储过程内部强制写死了SET @hostname = 'machine1',会覆盖外部传入的@hostname参数值,参数传值完全不生效。

修正后可正常运行的代码

-- 建表去掉多余逗号
CREATE TABLE utilisateur
(    
    nom VARCHAR(100),
    prenom VARCHAR(100),    
    age VARCHAR(5)
)
GO

INSERT INTO utilisateur (prenom, nom, age)
VALUES ('Rébecca', 'Armand', 24)
GO

CREATE PROCEDURE [sp_DB] 
  @hostname nvarchar(50),
  @Result nvarchar(2000) OUTPUT
AS
BEGIN
  SELECT age as a FROM utilisateur WHERE nom = 'Armand' 
  -- 若不需要覆盖传入的参数可删除下面这行
  SET @hostname = 'machine1'
  SET @Result = '{ "host_name": "' + @hostname + '", "a": 15 }' 
  PRINT @Result
END
GO

-- 正确调用存储过程的方式
DECLARE @res nvarchar(2000)
EXEC [sp_DB] @hostname ='machine1', @Result = @res OUTPUT
-- 直接SELECT查询结果,无需切换消息页
SELECT @res AS ResultOutput

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:18:03