Bu kod temel olarak karakterleri bir dizedeki konuma göre başka bir dizede aynı konuma çevirir ve tablodaki tüm satırlar için çalışır. Bu (basitleştirilmiş versiyonu) çalıştırdığınızdaXML PATH (I ') İÇİN: "özel" karakterlerden kaçınma
: REPLACE()
dışındaki
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
herhangi bir yolu var mı,:
RowID readable
----------- ---------------------------------------
1 a simple translation
2 hello world
3 wow you ran this
Ama gerek:
DECLARE @R char(40)
DECLARE @U char(40)
SET @R=' [email protected]#$%^&*()_+'+char(181)
SET @U=REVERSE(@R)
DECLARE @TestTable TABLE (RowID int identity(1,1) primary key, Unreadable varchar(500))
INSERT INTO @TestTable VALUES ('+µt$zw!*µsu+yt!+s$xy')
INSERT INTO @TestTable VALUES ('%*!!xµpxu!(')
INSERT INTO @TestTable VALUES ('pxpµnxrµu+yµs%$t')
;WITH CodeValues AS
(
SELECT
Number,SUBSTRING(@R,Number,1) AS R,ASCII(SUBSTRING(@U,Number,1)) AS UA
FROM Numbers
WHERE Number<=LEN(@R)
)
SELECT
t.RowID
,(SELECT
''+c.R
FROM Numbers n
INNER JOIN CodeValues c ON ASCII(SUBSTRING(t.Unreadable,n.Number,1))=c.UA
WHERE n.Number<=LEN(t.Unreadable)
FOR XML PATH('')
) AS readable
FROM @TestTable t
aşağıdaki alıyorum Boşluklar düzgün bir şekilde gösterilmek mi? Bu, gerçek kodumda satır sonlarında da gerçekleşir.
Bu daha iyi bir şekilde yeniden yazılabilir mi? Temel olarak tek tek satır değerlerini birleştirmek için FOR XML PATH('')
'u kullandım.
I: durumunda
belli değil, Sorgunuzu yapmanız gereken metin olarak XML ve metin olarak XML tedavi etmektir, metin olarak XML, yani karışmaz Bunun gerçek kodunuz olduğuna emin olun, ancak aynı sorunu gösteren daha basit bir örnek göndermelisiniz. Sorunun daha kolay olması muhtemel olsa da, sindirmek için oldukça tuhaf bir kod. –
@John Saunders, Keşke benim "gerçek kodum" olsaydı, çünkü şimdi işim bitti! Son kodun daha karmaşık olacağını söylemek için üzgünüm, çünkü bu bir sorgunun küçük bir parçası. –