Создать шаблон строки из двух хранимых процедур - PullRequest
0 голосов
/ 12 июня 2018

У меня есть две хранимые процедуры, которые возвращают наборы результатов.

Как я могу использовать их для заполнения строки и обновления другого столбца?

exec getEmailSignatureDetails 'Jane', 'Doe'

exec getFeaturedAccount 'June'

Эти оба возвращают столбцы, которые мне бы хотелосьдля сопоставления с переменными.

Затем я хотел бы поместить переменные в строку.

Затем обновить столбец в другой таблице с помощью этой строки.

Вывод из getEmailSignatureDetails:

addCity       | addLine     | addSt |  addZip | fName | lName
--------------+-------------+-------+---------+-------+------
San Francisco | 777 SV Lane | CA    |  94016  | Jane  | Doe

Вывод из getFeaturedAccount:

month | img      
------+----------
June  | base64...

Я хотел бы превратить это в строку типа

Your package has been delivered to 
@fName @lName
@addLine
@addCity @addSt, @addZip
@img

И затем обновить столбецс этой строкой, совпадающей с именем.

1 Ответ

0 голосов
/ 12 июня 2018

Если я понимаю ваш вопрос, вы хотите динамически заполнить шаблон с помощью макроподстановки

Пример

-- Create some Sample Data
Declare @getEmailSignatureDetails Table ([addCity] varchar(50),[addLine] varchar(50),[addSt] varchar(50),[addZip] varchar(50),[fName] varchar(50),[lName] varchar(50))
Insert Into @getEmailSignatureDetails Values 
 ('San Francisco','777 SV Lane','CA',94016,'Jane','Doe')

Declare @getFeaturedAccount Table ([month] varchar(50),[img] varchar(50))
Insert Into @getFeaturedAccount Values 
 ('June','base64..')



-- Declare the Template
Declare @Template varchar(max) ='
Your package has been delivered to 
@fName @lName
@addLine
@addCity @addSt, @addZip
@img
'

-- Populate the Template
Select @Template = replace(@Template,'@'+Field,Value)
 From ( 
        Select C.*
         From (values (convert(XML,(Select * From  @getEmailSignatureDetails Join  @getFeaturedAccount on [month]='June' For XML Raw ) ) ) ) A(XMLData)
         Cross Apply (
                        Select Field = a.value('local-name(.)','varchar(100)')
                              ,Value = a.value('.','varchar(max)') 
                         From  A.XMLData.nodes('/row')  as C1(n)
                         Cross Apply C1.n.nodes('./@*') as C2(a)
                         Where a.value('local-name(.)','varchar(100)') not in ('Column1','Column2')
                     ) C
     ) A

Обновленный шаблон

Your package has been delivered to 
Jane Doe
777 SV Lane
San Francisco CA, 94016
base64.. 

Если это помогает с визуализацией, подзапрос является «динамическим» разворотом и генерирует следующее:

Field     Value
addCity   San Francisco
addLine   777 SV Lane
addSt     CA
addZip    94016
fName     Jane
lName     Doe
month     June
img       base64..   -- (presumably would be the image)
...