sql-server - 如何将数据集合传递到 SQL Server 2003 中的 T-SQL 存储过程

标签 sql-server

我有一个存储过程,理想情况下应该能够从数据库客户端接受 NVARCHAR 列表/表。我知道 SQL Server 2008 中的表参数,但我仍坚持运行 SQL Server 2003。

目前,我在客户端将字符串与分隔符连接起来,将生成的字符串作为 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')

关于sql-server - 如何将数据集合传递到 SQL Server 2003 中的 T-SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/469026/

相关文章:

sql-server - LEFT OUTER JOIN (SELECT * FROM TABLE) 这可能吗?

sql-server - SQL Server 对列进行逆透视

sql-server - SQL Server 中区分大小写的变量

sql-server - 没有为 'sp' 的第 1 列指定列名

sql-server - 删除并重新创建 SQL Server 临时表上的主键

sql-server - 一个非常简单的T-SQL语句语法错误

sql - 查找重复出现相同两列值的行

sql-server - 更改列以不允许为空

sql-server - 为什么BCP这么快?

mysql - Hibernate 使用外键连接两个表