有一个function代码如下,就是把参数的内容返回来而已:
CREATE FUNCTION [dbo].fnGetsomedata (
@pXML XML
)
RETURNS @sList TABLE
(
RowID BIGINT
)
AS
BEGIN
IF @pXML IS NOT NULL
BEGIN
INSERT INTO @sList(
RowID
)
SELECT
T.tmp.value('(.)','BIGINT') AS ROWID
FROM @pXML.nodes('/XML/*') T(tmp);
END;
RETURN;
END
然后分别两种方式调用:
DECLARE @data XML =(SELECT TOP 5000 RowID FROM table1 FOR XML PATH('XML'))
SELECT * FROM [dbo].fnGetsomedata(@data)
还有一种:
SELECT * FROM [dbo].fnGetsomedata((SELECT TOP 5000 RowID FROM table1 FOR XML PATH('XML')))
然后发现第二种需要差不多一分钟才出结果,而第一种不到一秒就可以,区别只是定义了一个变量,为何查询速度差异这么大?