Reputation: 153
I am currently fetching an integer row, then converting the row to a Nvarchar in a hash table, then converting this to XML. The aim is to have all values returned in the one XML variable like so:
<item id ="001"/><item id ="002"/><item id ="003"/><item id ="004"/><item id ="005"/>
Currently my code returns this as an XML row like so:
col
---------------
<item id="60114" />
<item id="60116" />
<item id="60120" />
<item id="60122" />
<item id="60123" />
<item id="60124" />
<item id="60125" />
<item id="60129" />
Here is my code which i have anonimised:
DROP TABLE #ClientNumber
DECLARE @XMLClientID NVARCHAR (MAX)
CREATE TABLE #ClientNumber (ID int identity(1,1), [XMLClientID] NVARCHAR(20))
INSERT INTO #ClientNumber
SELECT '<item id ="'+ CAST([ClientId] AS NVARCHAR) + '"/>' AS [XMLClientID] FROM [dbo.].[MyView] WHERE Column = 'Condition' AND [ClientName] LIKE 'BLA%';
WITH xoutput AS (
SELECT CONVERT(xml, [XMLClientID]) AS col
FROM #ClientNumber)
SELECT *
FROM xoutput
Any steer would be great as the stuff will not work due to the for XML.
Upvotes: 0
Views: 240
Reputation: 153
Thanks to @John Cappelletti for the link. Here is my solution:
DECLARE @XMLClientID VARCHAR (MAX)
DECLARE @StringClientID VARCHAR (MAX)
DECLARE @XMLStringClient XML;
CREATE TABLE #ClientNumber (ID int identity(1,1), [XMLClientID] VARCHAR(20))
INSERT INTO #ClientNumber
--AMEND LINE BELOW TO SELECT TARGETS!!--
SELECT '<item id ="'+ CAST([ClientId] AS NVARCHAR) + '"/>' AS [XMLClientID] FROM [dbo.].[MyView] WHERE Column = 'Condition' AND [ClientName] LIKE 'BLA%';
SELECT DISTINCT [XMLClientID] = STUFF((Select '' +[XMLClientID]
FROM #ClientNumber
FOR XML Path(''),TYPE).value('(./text())[1]','varchar(max)'),1,0,'')
INTO #TempString
FROM #ClientNumber A
SET @StringClientID = (SELECT [XMLClientID] FROM #TempString)
SET @XMLStringClient = CAST(@StringClientID AS XML);
EXEC dbo.My_StoredProcedure @XMLStringClient
Upvotes: 0
Reputation: 10807
You could use integer values instead of convert and format it.
CREATE TABLE tbl (id int);
INSERT INTO tbl VALUES (60114), (60116), (60120), (60122)
GO
SELECT id
FROM tbl item
FOR XML AUTO
Output:
| XML_F52E2B61-18A1-11d1-B105-00805F49916B |
| :----------------------------------------------------------------------- |
| <item id="60114"/><item id="60116"/><item id="60120"/><item id="60122"/> |
dbfiddle here
Upvotes: 1
Reputation: 37337
Try this:
declare @table table (col varchar(100))
insert into @table values
('<item id="60114" />'),
('<item id="60116" />'),
('<item id="60120" />'),
('<item id="60122" />'),
('<item id="60123" />'),
('<item id="60124" />'),
('<item id="60125" />'),
('<item id="60129" />')
select cast(col as xml) from @table for xml path('')
Upvotes: 0