我读过的任何地方都说估计操作员成本是估计 CPU 成本和估计 I/O 成本的总和。但是,在我看到的许多运营商中,情况并非如此。下面是一个例子:
SELECT Column2
INTO Object1
FROM Object2
WHERE Column3 >= Variable2
AND Column3 <= Variable1
AND ( Column4 = Variable5
OR Variable5 = ? )
Run Code Online (Sandbox Code Playgroud)
EstimateIO="0.01" EstimateCPU="0.000246492"
总和:0.010246492
然而,SSMS 将此 0.073823 显示为估计的运营商成本。我完全不知道这是如何计算的。下面是执行计划 xml(匿名)。Node Id 0 是有问题的节点。
<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.2" Build="11.0.6537.0">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementText="	SELECT Column2 INTO Object1 
	FROM Object2
	WHERE Column3>=Variable2 AND Column3<=Variable1 
	AND (Column4=Variable5 OR Variable5=?)

" StatementId="1" StatementCompId="7" StatementType="SELECT INTO" RetrievedFromCache="true" StatementSubTreeCost="0.405134" StatementEstRows="246.492" StatementOptmLevel="FULL" QueryHash="0x180DF38DFFFEAFA2" QueryPlanHash="0x45A4295471B90968" StatementOptmEarlyAbortReason="GoodEnoughPlanFound">
<StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" …Run Code Online (Sandbox Code Playgroud) 首先,这是针对 SQL Server 2016 的。如果我在 2017+ 上,我会使用sp_add_trusted_assembly. 在问这个问题之前只是想澄清一下。
如何在不使用 的情况下注册程序集System.DirectoryServices.AccountManagement.dllTRUSTWORTHY ON?我无法使用System.DirectoryServices.dll生成的非对称密钥使其工作。AccountManagement dll 的签名与System.DirectoryServices.dll不同。
我什至尝试从System.DirectoryServices.AccountManagement.dll创建一个单独的非对称密钥,但这会导致:
消息 15468,级别 16,状态 7,行 XXXXX
在生成非对称密钥期间出错。
这是我为尝试创建此程序集而编写的测试脚本。
USE master
IF DB_ID('CLR_Test') IS NULL BEGIN
CREATE DATABASE CLR_Test
END
GO
USE [CLR_Test]
GO
EXEC sp_configure @configname=clr_enabled, @configvalue=1
GO
RECONFIGURE
GO
/*************************************************************************************/
-- DROP OBJECTS IF FOUND FIRST
/*************************************************************************************/
-- DROP System.DirectoryServices.AccountManagement
IF EXISTS(SELECT 1 FROM sys.assemblies WHERE name = 'System.DirectoryServices.AccountManagement') BEGIN
RAISERROR( 'DROP ASSEMBLY [System.DirectoryServices.AccountManagement]', 0, …Run Code Online (Sandbox Code Playgroud) security sql-server sql-clr active-directory sql-server-2016