从两个存储过程创建字符串模板
Create String Template from two stored procedures
我有两个 return 结果集的存储过程。
如何使用它们填充字符串并更新另一列?
exec getEmailSignatureDetails 'Jane', 'Doe'
exec getFeaturedAccount 'June'
我想将这两个 return 列映射到变量。
然后我想将变量放入一个字符串中。
然后用该字符串更新另一个 table 中的列。
来自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
然后使用与名称匹配的字符串更新一列。
如果我理解你的问题,你希望通过宏替换动态填充模板
例子
-- 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..
如果它有助于可视化,子查询是一个 "dynamic" 逆轴并生成以下内容:
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)
我有两个 return 结果集的存储过程。
如何使用它们填充字符串并更新另一列?
exec getEmailSignatureDetails 'Jane', 'Doe'
exec getFeaturedAccount 'June'
我想将这两个 return 列映射到变量。
然后我想将变量放入一个字符串中。
然后用该字符串更新另一个 table 中的列。
来自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
然后使用与名称匹配的字符串更新一列。
如果我理解你的问题,你希望通过宏替换动态填充模板
例子
-- 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..
如果它有助于可视化,子查询是一个 "dynamic" 逆轴并生成以下内容:
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)