将逗号分隔的值字符串转换为XML后,SQL Server过程过早完成

彼得·J·奎因

我有一个可以在SSMS环境中很好地执行的过程,当我将其连接到网页时,没有看到返回的packageID列表,返回的结果为'null'。我已经检查了权限,这似乎不是问题。然后,我通过Profiler运行了该过程,似乎在“ CAST AS XML ... CROSS APPLY”语句之后完成了,该语句将解释为什么什么都不返回。我不知道为什么会这样。有任何想法吗?

这是完整的程序

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
彼得·J·奎因

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

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

在功能上。在过程本身中设置这些无效。

我的问题直接针对MS SQL Server社区,但如果有人遇到此问题,我将在此保留。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将int []转换为逗号分隔的字符串

将逗号分隔的字符串转换为HashSet

从sql存储过程中的逗号分隔的字符串中删除一个值

在SQL Server 2005中将逗号分隔的字符串转换为具有序列号的XML

从逗号分隔的字符串SQL Server中删除值

C将逗号分隔的字符串转换为数组

将字符串格式化为多个值-用逗号分隔-SQL Server

MS SQL Server完成过程但不更新表

SQL Server:打破逗号分隔的字符串并匹配表中的值

将数组转换为逗号分隔的字符串

将字符串或列表的映射转换为值的字符串或逗号分隔的值

将C#SQL字符串转换为SQL存储过程

我想将字符串传递给oracle过程,但是随后我想将其转换为逗号分隔的整数数组

在SQL存储过程中基于逗号分隔的字符串动态创建表

如何在SQL Server中将表的整数行转换为逗号分隔的字符串

PHP将逗号分隔的字符串转换为点或符号分隔的值,以存储在MySql中

SQL Server将日期转换为字符串MMMYYDD

JavaScript中的自动转换:完成后,是否应该将字符串转换为数字,例如stringvar = 1 + stringvar?

将逗号分隔的字符串转换为列表

sql server使用IN命令将数字字段与包含逗号分隔数字的字符串进行比较

ORA-19112:使用XMLTABLE将逗号分隔的字符串转换为行时在求值过程中出现错误

在SQL Server中,单数逗号将字符串分隔成IN子句的多个字符串

SQL Server:将单行转换为逗号分隔(分隔)格式

如何将字符串数组属性转换为字符串以在 sql server 中保存为逗号分隔的行 mongo db 到 sql server C#

如何使用 SQL Server 用逗号分隔字符串?

将破折号分隔的字符串转换为 datatime2 sql server 2014

将字段中存储的逗号分隔值转换为 SQL Server 中的列

在 SQL Server 存储过程结果中将日期转换为字符串

使用来自 SQL Server 中不同表的数据创建逗号分隔值字符串