我有一個存儲過程,理想情況下應該能夠從數據庫客戶端接受NVARCHAR的列表/表。我知道SQL Server 2008中的表參數,但我堅持運行SQL Server 2003.如何將數據集合傳遞到SQL Server 2003中的T-SQL存儲過程
目前,我在客戶端連接字符串和分隔符,將結果字符串作爲NVARCHAR參數,然後將入口處的字符串分開存儲到存儲過程中,但這種情況有待改進。
我有一個存儲過程,理想情況下應該能夠從數據庫客戶端接受NVARCHAR的列表/表。我知道SQL Server 2008中的表參數,但我堅持運行SQL Server 2003.如何將數據集合傳遞到SQL Server 2003中的T-SQL存儲過程
目前,我在客戶端連接字符串和分隔符,將結果字符串作爲NVARCHAR參數,然後將入口處的字符串分開存儲到存儲過程中,但這種情況有待改進。
你看過XML嗎?
所以,對於XML有點像:
<ArrayOfService xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Service Id="2" Name="AUSTRALIA" Code="AUS" />
<Service Id="10" Name="FAR EAST" Code="FEE" />
</ArrayOfService>
在SQL Server 2005中,你可以這樣做:
-- Lookup Services
DECLARE @ServiceXml AS XML
CREATE TABLE #Service
(
Id INT,
[Name] VARCHAR(50),
Code VARCHAR(10)
)
INSERT INTO #Service
(
Id,
[Name],
Code
)
SELECT
CASE
WHEN LegsTbl.rows.value('@Id', 'nvarchar(255)') = '' THEN NULL
WHEN LegsTbl.rows.value('@Id', 'int') = 0 THEN NULL
ELSE LegsTbl.rows.value('@Id', 'int')
END AS Id,
LegsTbl.rows.value('@Name', 'varchar(50)') AS [Name],
LegsTbl.rows.value('@Code', 'varchar(50)') AS TopazCode
FROM
@ServiceXml.nodes('/ArrayOfService/Service') LegsTbl(rows)
或SQL Server 2000:
DECLARE @ServiceXml AS NTEXT
DECLARE @iServiceXml AS INT
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @iServiceXml OUTPUT, @ServiceXml
CREATE TABLE #Service
(
Id INT,
[Name] VARCHAR(50),
Code VARCHAR(10)
)
INSERT INTO #Service
(
Id,
[Name],
Code
)
SELECT
Id,
Name,
Code
FROM
OPENXML(@iServiceXml, '/ArrayOfService/Service', 3)
WITH (Link8Id int '@Id',
Name varchar(50) '@Name',
Code varchar(10) '@TopazCode')
在SQL2005(其我假設你的意思是?)我建立一個XML字符串並通過它
CREATE PROCEDURE dbo.ig_SelectRecentConfigurableAppsByMakes
(
@MakesXML XML, -- <makes><value>GMC</value>...</makes>
@TopN INT
)
AS
DECLARE @Makes TABLE (Make NVARCHAR(30))
INSERT INTO @Makes
SELECT ParamValues.make.value('.','NVARCHAR(30)')
FROM @MakesXML.nodes('makes/value') AS ParamValues(make)
;
你的意思是SQL Server 2005嗎? – 2009-01-22 13:19:10