我有一个可以在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
事实证明,问题不在于过程本身,而在于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] 删除。
我来说两句