SQL 服务器过程在将逗号分隔值字符串转换为 XML 后过早完成

SQL Server Procedure completes prematurely after converting comma-delimited value strings to XML

我有一个在 SSMS 环境中执行得很好的过程,当我将它连接到网页时,没有看到包 ID 列表 returned,return 是 'null'。我检查了权限,这似乎不是问题所在。然后我通过 Profiler 运行 程序,它似乎在 'CAST AS XML...CROSS APPLY' 语句之后完成,这可以解释为什么没有 returned。我不明白为什么会这样。有什么想法吗?

这是完整的程序

SET NOCOUNT ON

--get EVERY product in EVERY package
DECLARE @allprodsandpacks TABLE (
      packageID varchar(20),
      Name varchar(800),
      RN tinyint,
      productID varchar(20)
)


--list products in more than one package
DECLARE @prods TABLE (
      productID varchar(20),
      packages varchar(800)
)

--list packages with a 'shared' product
DECLARE @packs TABLE (
      packageID varchar(20),
      Name varchar(200),
      products varchar(800)
)



INSERT INTO @allprodsandpacks (packageID,Name,RN,productID)
SELECT  packageID,
    Name,
    RN,

    REPLACE(LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))),'|','') AS productID
    FROM


    (
       SELECT productID as packageID,
       ROW_NUMBER() OVER (PARTITION BY productlist ORDER BY productID) AS RN,
       Name,
       CAST('<XMLRoot><RowData>' + REPLACE(productlist, ',', '</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
       FROM   TBOnline.dbo.Packages
    ) AS t
    CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

--Profiler registers SP:Completed here!!


INSERT INTO @prods (productID)
SELECT DISTINCT productID
FROM @allprodsandpacks
WHERE RN > 1 


INSERT INTO @packs (packageID,Name)
SELECT DISTINCT 
packageID
, Name
FROM @allprodsandpacks    
WHERE productID IN (SELECT productID FROM @prods)

SELECT 
packageID
, Name
FROM @packs
ORDER BY Name

事实证明,问题不在于过程本身,而在于调用它的 PHP 函数。在执行之前,我必须包括

        mssql_query("SET ANSI_WARNINGS ON");
        mssql_query("SET ANSI_PADDING ON");
        mssql_query("SET CONCAT_NULL_YIELDS_NULL ON");

在函数中。在程序本身中设置这些没有任何效果。

我的问题是针对 MS SQL 服务器社区的,但我会把它留在这里以防其他人遇到这个问题。