【问题标题】:Concatenation of character string and variable SQL字符串和变量 SQL 的连接
【发布时间】:2021-12-12 18:46:01
【问题描述】:
SET @Result = '{ "host_name": "' + @hostname + '", "status": 15 }'

您能否向我解释一下我们使用 Result 的值得到了什么?如果我们假设 hostname = "machine1"。

为了测试这一点,我创建了一个表和一个存储过程并打印 Result 的值:

CREATE TABLE utilisateur
(
    
    nom VARCHAR(100),
    prenom VARCHAR(100),    
    age VARCHAR(5),
    
)
INSERT INTO utilisateur (prenom, nom, age)
 VALUES
 ('Rébecca', 'Armand', 24)
go

 CREATE PROCEDURE [sp_DB] 
  @hostname nvarchar(50),
  @Result nvarchar(2000) OUTPUT

AS
  select age as a from utilisateur where nom = 'Armand' 
  SET @hostname = 'machine1'
  SET @Result = '{ "host_name": "' + @hostname + '", "a": 15 }' 
  print @Result

EXEC [sp_DB]@hostname ='machine1',@Result = 'test';

但是执行并没有显示Result变量的内容。

PS : 我使用 sqlfiddle.com/ 来执行代码

【问题讨论】:

  • 您打印的结果,您希望选择它作为来自 SP 的结果集返回
  • 你能展示实际执行存储过程的代码吗?请注意,像 sqlfiddle 和 dbfiddle 这样的许多 GUI 并不总是显示 PRINT 消息,因此请考虑一下您实际上想要做什么。顺便说一句working fine for me.
  • 你能把链接添加到你的 sqlfiddle 吗?
  • 代码已更正我添加了 EXEC [sp_DB]
  • 这在 SSMS 中运行良好; PRINT 显示在消息窗格中。如前所述,不要依赖 Fiddles 之类的东西来实现真实的 IDE 行为;它们不是 IDE。如果您想正确测试您的代码,请在本地安装 SQL Server 并获取 ADS 或 SSMS。

标签: sql sql-server concatenation


【解决方案1】:

您必须在过程调用范围内定义输出变量,并使用关键字 OUTPUT 检索输出值。 所以如果你这样做:

declare @result_out nvarchar(2000)
EXEC [sp_DB]@hostname ='machine1',@Result=@result_out OUTPUT;
select @result_out as [Result]

它会起作用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多