Плохо называть элемент переменной (подробнее об этом позже).Но это может быть решено :
DECLARE @mockup TABLE(CustomerID INT, CustomerName VARCHAR(100),Country VARCHAR(100),City VARCHAR(100));
INSERT INTO @mockup VALUES(99,'TestName','Germany','Berlin');
DECLARE @cityFrom VARCHAR(10)= 'Berlin';
DECLARE @CustomerFrom VARCHAR(25)= CASE
WHEN @cityFrom = 'Berlin'
THEN 'ID_1'
WHEN @cityFrom = 'London'
THEN 'ID_2'
WHEN @cityFrom = 'Tsawassen'
THEN 'ID_3'
WHEN @cityFrom = 'Mannheim'
THEN 'ID_4'
END;
SELECT @CustomerFrom + '_CustomerID' AS [Parameter/@key]
,CustomerID AS [Parameter]
,''
,@CustomerFrom + '_CustomerName' AS [Parameter/@key]
,CustomerName AS [Parameter]
,''
,@CustomerFrom + '_Country' AS [Parameter/@key]
,Country AS [Parameter]
FROM @mockup
FOR XML PATH('ReplaceThis');
На следующем шаге вам нужно привести это значение к NVARCHAR(MAX)
и использовать REPLACE
, чтобы получить ID_1
в кореньузел ...
Я не знаю, если ожидаемый результат должен быть таким ...
Очень плохая идея выдвигать информацию ( content ) в имя элемента.Вместо <ID_1>
я бы предложил что-то вроде <ID location="1">
.
И вместо ID_1_CustomerID
я бы использовал два атрибута или взял бы эту информацию с уровня выше.
Попробуйте:
SELECT @CustomerFrom AS [@location]
,'CustomerID' AS [Parameter/@key]
,CustomerID AS [Parameter]
,''
,'CustomerName' AS [Parameter/@key]
,CustomerName AS [Parameter]
,''
,'Country' AS [Parameter/@key]
,Country AS [Parameter]
FROM @mockup
FOR XML PATH('ID');
результат
<ID location="ID_1">
<Parameter key="CustomerID">99</Parameter>
<Parameter key="CustomerName">TestName</Parameter>
<Parameter key="Country">Germany</Parameter>
</ID>