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
相关产品推荐
相关产品推荐

