, , f_split, , . , UDF, SQL Server ... XML.
proc XML, @parmsXML. @Arg1List. EXEC dbo.mainValues, @parmsXML XML, , ( , , , ):
<parms>
<parm>331</parm>
<parm>222</parm>
<parm>876</parm>
<parm>932</parm>
</parms>
proc :
- @parmsXML
- SELECT values from @parmsXML variable to temp table #t_values
- SELECT from table #t_values
In your own implementation, you can get rid of the first step (Just select ...), and then change SELECT INTO to INSERT INTO SELECT.
I have the setting below the script so that it has DROP IF EXISTS, then CREATE proc, and then EXECUTE it with @parmsXML setting, as above.
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = N'dbo'
AND SPECIFIC_NAME = N'mainValues'
)
DROP PROCEDURE dbo.mainValues
GO
CREATE PROCEDURE dbo.mainValues
@parmsXML XML
AS
SET NOCOUNT ON;
SET XACT_ABORT ON;
RAISERROR('Selecting values directly from @parmsXML', 0, 1);
SELECT Parm = n.x.value('.[1]', 'INT')
FROM @parmsXML.nodes('/parms[1]/parm') n(x)
;
-- insert into
RAISERROR('Inserting @parmsXML values into
SELECT Parm = n.x.value('.[1]', 'INT')
INTO
FROM @parmsXML.nodes('/parms[1]/parm') n(x)
;
RAISERROR('Selecting from
SELECT *
FROM
;
GO
EXECUTE dbo.mainValues @parmsXML = '
<parms>
<parm>331</parm>
<parm>222</parm>
<parm>876</parm>
<parm>932</parm>
</parms>
'
GO
source
share