但是这样我的执行速度确实很慢!我对存储过程执行过程不是很熟悉 . 我想知道它有什么负面影响( SET FMTONLY OFF )?
1 回答
3
如果您使用的是 SQL Server 2012+ ,则可以使用 WITH RESULT SETS 来定义结果集:
CREATE OR ALTER PROCEDURE dbo.mysp_test
AS
BEGIN
DECLARE @sql NVARCHAR(MAX) = 'SELECT id, b FROM dbo.tab ' + 'WHERE 1=1';
EXEC sp_executesql @sql
END
GO
SELECT *
FROM sys.dm_exec_describe_first_result_set (
'EXEC dbo.mysp_test'
,NULL
,NULL
);
CREATE OR ALTER PROCEDURE dbo.mysp_test
AS
BEGIN
DECLARE @sql NVARCHAR(MAX) = 'SELECT id, b FROM dbo.tab ' + 'WHERE 1=1';
EXEC sp_executesql @sql
WITH RESULT SETS(
(id INT NOT NULL,
b CHAR(1)
)
);
END
GO
SELECT *
FROM sys.dm_exec_describe_first_result_set (
'EXEC dbo.mysp_test'
,NULL
,NULL
);
1 回答
如果您使用的是
SQL Server 2012+
,则可以使用WITH RESULT SETS
来定义结果集:使用
WITH RESULT SETS
:DBFiddle Demo