2009-01-22 48 views
2

我有一個存儲過程,理想情況下應該能夠從數據庫客戶端接受NVARCHAR的列表/表。我知道SQL Server 2008中的表參數,但我堅持運行SQL Server 2003.如何將數據集合傳遞到SQL Server 2003中的T-SQL存儲過程

目前,我在客戶端連接字符串和分隔符,將結果字符串作爲NVARCHAR參數,然後將入口處的字符串分開存儲到存儲過程中,但這種情況有待改進。

+0

你的意思是SQL Server 2005嗎? – 2009-01-22 13:19:10

回答

3

你看過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') 
0

在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) 
    ; 
相關問題