Объединение символьной строки и переменной SQL

#sql #sql-server #concatenation

Вопрос:

 SET @Result = '{ "host_name": "'   @hostname   '", "status": 15 }'
 

Не могли бы вы объяснить мне, что мы получаем со значением результата, пожалуйста? Если мы предположим, что имя хоста = «machine1».

Чтобы проверить это, я создал таблицу и хранимую процедуру и напечатал значение результата :

 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';
 

Но при выполнении не отображается содержимое результирующей переменной.

PS: я использую sqlfiddle.com / для выполнения кода

Комментарии:

1. при печати результатов вы хотите выбрать их для возврата в качестве результирующего набора из SP

2. Можете ли вы показать код, который фактически выполняет хранимую процедуру? Обратите внимание, что многие графические интерфейсы, такие как sqlfiddle и dbfiddle, не всегда будут отображать PRINT сообщения, поэтому подумайте, что вы на самом деле хотите с этим делать. Кстати, у меня все работает нормально .

3. Можете ли вы добавить ссылку на свой sqlfiddle?

4. Исправлен код, я добавил EXEC [sp_DB]

5. Это отлично работает в SSMS; PRINT отображается на панели сообщений. Как уже упоминалось, не полагайтесь на такие вещи, как скрипты, для реалистичного поведения IDE; они не IDE. Если вы хотите правильно протестировать свой код, установите SQL Server локально и используйте ADS или SSMS.

Ответ №1:

Вы должны определить выходную переменную в области видимости вызова процедуры и использовать ключевое слово OUTPUT для извлечения выходного значения. Так что, если вы сделаете это так, как:

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

Это сработает.