DP.Docpage是HTML文档Base64encoded的SQL Server中的文本字段。
VGVzdERhdGE=
is the base64 encoding of text
TextData
我将它用作健全性检查,以查看我们在T-SQL中的Base64编码是否正常工作。
场景#1:
,CAST(CAST(N'' AS XML).value('xs:base64Binary("VGVzdERhdGE=")', 'VARBINARY(MAX)') AS VARCHAR(MAX)) ASCIIEncoding
很好地编写了所有硬编码的内容。
场景#2:
,CAST(CAST(N'' AS XML).value('xs:base64Binary(DP.DocPage)', 'VARCHAR(MAX)') AS VARCHAR(MAX)) ASCIIEncoding
产生错误:
XQuery [value()]:无法从'xdt:untypedAtomic *'显式转换为'xs:base64Binary'
场景#3:
,CAST(CAST(N'' AS XML).value('xs:base64Binary(' + Convert(varbinary,Dp.DocPage) + ')', 'VARBINARY(MAX)') AS VARCHAR(MAX)) ASCIIEncoding
产生错误:
不允许从数据类型文本到varbinary的显式转换。
答案 0 :(得分:1)
测试的两个问题:
关于TEXT数据类型字段的问题,您可以在派生表中执行SELECT *时将其转换为VARCHAR(MAX),允许您在XML中引用转换后的值,前提是sql:column( )函数需要字符串文字字段名称,不接受表达式。
以下工作(请注意,临时表仅用于示例目的,只需将临时表引用替换为真实表):
-- DROP TABLE #DocPages
-- DROP TABLE #JoinTable
CREATE TABLE #DocPages (DocPageID INT NOT NULL, DocPage [TEXT])
CREATE TABLE #JoinTable (ID INT NOT NULL, DocPageID INT NOT NULL)
INSERT INTO #DocPages (DocPageID, DocPage) VALUES (1, 'VGVzdERhdGE=')
INSERT INTO #DocPages (DocPageID, DocPage) VALUES (23, 'VGhpcyBpcyBhIHRlc3Q=')
INSERT INTO #JoinTable (ID, DocPageID) VALUES (768753, 1)
INSERT INTO #JoinTable (ID, DocPageID) VALUES (555, 23)
SELECT DP.DocPageID,
CAST(CAST(N'' AS XML).value('xs:base64Binary(sql:column("DP.DocPageVarChar"))',
'VARBINARY(MAX)') AS VARCHAR(MAX)) AS [ASCIIEncoding]
FROM (SELECT *, CONVERT(VARCHAR(MAX), doc.DocPage) AS [DocPageVarChar]
FROM #DocPages doc) DP
INNER JOIN #JoinTable JT
ON JT.DocPageID = DP.DocPageID
输出:
DocPageID ASCIIEncoding
1 TestData
23这是一个测试
答案 1 :(得分:0)
Drop Table #UmbracoDocs;
选择 DP.DocPageID为UmbracoDocs_ID ,转换(Varchar(max),DP.DocPage)AS HtmlPage ,D.Createdby_PersID As Person_ID ,N.NavURL ,N.NavLabel ,D.OriginSite_ID
INTO #UmbracoDocs
from DocPages DP
inner join Documents D on DP.DocPageId=D.DocId
inner join NavSystems NS on D.OriginSite_ID=NS.OriginSite_ID
inner join Navigation N on NS.NavSysID=N.NavSys_ID;
- 从#UmbracoDocs
中选择*选择 UmbracoDocs_ID ,HtmlPage ,CAST(CAST(N''AS XML).value('xs:base64Binary(sql:column(“#UmbracoDocs.HtmlPage”))','VARBINARY(MAX)')AS VARCHAR(MAX))ASCIIEncoding ,PERSON_ID ,NavURL ,NavLabel ,OriginSite_ID
From #UmbracoDocs