Bat*_*ech 5 sql-server sql-server-2008-r2 extended-events extended-stored-procedure
我在 SQL 2008 R2 中设置了一个扩展事件会话来跟踪deprecation_final_support和deprecation_announcement事件。我注意到我的日志中有一些“deprecation_announcement”事件带有“XP_API”的“特性”,这些事件似乎都是使用SP_EXECUTESQL
.
事件消息说:
SQL Server 的未来版本中将删除扩展存储过程 API。避免在新的开发工作中使用此功能,并计划修改当前使用它的应用程序。
sql_text
来自事件的操作的一个示例是:
exec sp_executesql N'DECLARE @c varbinary(128);SET @c=cast(@userName as varbinary(128));SET CONTEXT_INFO @c;', N'@userName varchar(128)', @userName = 'MYDOMAIN\myuser';
Run Code Online (Sandbox Code Playgroud)
该master.sys.SP_EXECUTESQL
proc 列在对象资源管理器中的“数据库 > 系统数据库 > 主 > 可编程性 > 扩展存储过程 > 系统扩展存储过程”下。
这是否意味着sp_executesql
SQL Server 的未来版本将不支持它?
SQL Server 2017 已弃用的数据库引擎功能列表显示为XP_API
现在不支持的功能列表的“功能名称”。已弃用的功能列表包括:
srv_alloc srv_convert srv_描述 srv_getbindtoken srv_got_attention srv_消息_处理程序 srv_参数数据 srv参数信息 srv_参数长度 srv_parammaxlen srv_参数名称 srv_paramnumber srv_参数集 srv_paramset输出 srv_paramstatus srv_参数类型 srv_pfield srv_pfieldex srv_rpcdb srv_rpc名称 srv_rpc编号 srv_rpc选项 srv_rpcowner srv_rpcparams srv_senddone srv_发送消息 srv_发送行 srv_setcoldata srv_setcollen srv_setutype srv_willconvert srv_wsendmsg
这些项目都是扩展存储过程 API的一部分,现已弃用。
的文档sp_executesql
没有提及它已被弃用。尽管这可能是一个疏忽错误,但核心功能似乎不太可能被弃用。想象一下全世界需要改造的所有代码。
与弃用相关的扩展事件项可能会标记 sp_executesql 对xp_api
上面列出的一项或多项的某些内部使用。由于 sp_executesql 是在引擎中实现的扩展存储过程,因此 Microsoft 将重构 sp_executesql 代码以避免调用这些已弃用的事件,或者不会弃用它们供内部使用。
这个问题的标签是SQL Server 2008 R2;如果您在 SQL Server 2017 中运行扩展事件会话并查看deprecation_announcement
和deprecation_final_support
事件,您不会看到sp_executesql
触发事件。为了测试这一点,我使用了这个会话定义:
CREATE EVENT SESSION [deprecated events] ON SERVER
ADD EVENT sqlserver.deprecation_announcement
(
ACTION (
package0.event_sequence
,sqlserver.client_app_name
,sqlserver.database_name
,sqlserver.is_system,sqlserver.sql_text
)
)
, ADD EVENT sqlserver.deprecation_final_support
(
ACTION
(
package0.event_sequence
,sqlserver.client_app_name
,sqlserver.database_name
,sqlserver.is_system
,sqlserver.sql_text
)
)
ADD TARGET package0.ring_buffer (SET max_memory=(10240))
WITH (STARTUP_STATE=OFF);
ALTER EVENT SESSION [deprecated events] ON SERVER STATE=START;
GO
Run Code Online (Sandbox Code Playgroud)
然后运行这段代码,它使用sp_executesql
:
DECLARE @cmd nvarchar(max);
SET @cmd = 'SELECT CurrentDate = GETDATE();';
EXEC sys.sp_executesql @cmd;
Run Code Online (Sandbox Code Playgroud)
[deprecated events]
执行代码后,会话的环形缓冲区输出没有显示任何消息。但是,如果您运行此代码(其中包含sp_helpremotelogin
已弃用列表中的 ),您确实会在环形缓冲区输出中看到项目:
EXEC sp_helpremotelogin @remoteserver = 'test', @remotename = NULL;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
607 次 |
最近记录: |