Sql 能否说明缓存中可以存储多少执行计划?或者如果它们在一段时间后被删除?由于一次插入的项目数量没有太大差异,因此我正在考虑使用插入到(…)值(…)(…)解决方案中,并在安装时为常见数字注入执行计划。这将需要大约100次不同的处决。我认为,缓存应该能够处理这一点

Sql 能否说明缓存中可以存储多少执行计划?或者如果它们在一段时间后被删除?由于一次插入的项目数量没有太大差异,因此我正在考虑使用插入到(…)值(…)(…)解决方案中,并在安装时为常见数字注入执行计划。这将需要大约100次不同的处决。我认为,缓存应该能够处理这一点,sql,database,stored-procedures,batch-file,insert,Sql,Database,Stored Procedures,Batch File,Insert,能否说明缓存中可以存储多少执行计划?或者如果它们在一段时间后被删除?由于一次插入的项目数量没有太大差异,因此我正在考虑使用插入到(…)值(…)(…)解决方案中,并在安装时为常见数字注入执行计划。这将需要大约100次不同的处决。我认为,缓存应该能够处理这一点,但我找不到任何关于这一点的信息。你真的确定构建查询比单个插入(生成基准)更快吗?我认为SQL server将无法为动态生成的查询使用缓存执行计划。但我会试试看。你知道身份证的问题吗?我认为生成所有父元素,然后生成所有子元素会更有效。但是如何在


能否说明缓存中可以存储多少执行计划?或者如果它们在一段时间后被删除?由于一次插入的项目数量没有太大差异,因此我正在考虑使用插入到(…)值(…)(…)解决方案中,并在安装时为常见数字注入执行计划。这将需要大约100次不同的处决。我认为,缓存应该能够处理这一点,但我找不到任何关于这一点的信息。你真的确定构建查询比单个插入(生成基准)更快吗?我认为SQL server将无法为动态生成的查询使用缓存执行计划。但我会试试看。你知道身份证的问题吗?我认为生成所有父元素,然后生成所有子元素会更有效。但是如何在child元素外键中设置parents id呢?唯一的判断方法是分析,我发现它使我的整个例程变得更快(记不起时间了)。我不知道它是否会缓存执行计划,但它确实不需要缓存,因为它非常基本。我的示例只适用于一个级别的嵌套(一条记录包含许多基本子项),也许可以看看如何从XML序列化和解析您的项—我用我的CreateUser SP做了一些分析。案例1:EXEC CreateUser@Name=…,…*1000行案例2:插入用户(…)值(…),(…),…*1000行案例1:第一次:220ms,重复:~220ms案例2:第一次:2960ms,重复:~20ms即使不在运行中创建INSERT-in,每次运行都要慢得多,因为缓存的执行计划针对提交的用户数是固定的。我将寻找一个Xml解决方案,并希望得到更好的结果。但谢谢。这很有道理,我以后会记住的。如果您找到了另一个解决方案,请务必发布此问题的答案。如果您在XML方面做了一些工作,我将特别感兴趣。是否有可能说明缓存中可以存储多少执行计划?或者如果它们在一段时间后被删除?由于一次插入的项目数量没有太大差异,因此我正在考虑使用插入到(…)值(…)(…)解决方案中,并在安装时为常见数字注入执行计划。这将需要大约100次不同的处决。我想,这是缓存应该能够处理的事情,但我没有找到任何关于这方面的信息。
EXEC @DeviceID = CreateDevice ...;
EXEC @UserID = CreateUser ...;
EXEC @DocID = CreateDocument @DeviceID, @UserID, ...;

EXEC @ItemID = CreateItem @DocID, ...
EXEC CreateSubItem @ItemID, ...
EXEC CreateSubItem @ItemID, ...
EXEC CreateSubItem @ItemID, ...
...
INSERT INTO MyTable(field1,field2)
SELECT "firstValue", "secondValue"
UNION ALL
SELECT "anotherFirstValue", "anotherSecondValue"
UNION ALL
ALTER PROCEDURE [dbo].[UpdateUserADGroups]
@username varchar(100),
@groups varchar(5000)
AS
BEGIN
DECLARE @pos int,
@previous_pos int,
@value varchar(50),
@sql varchar(8000)

SET @pos = 1
SET @previous_pos = 0
SET @sql = 'INSERT INTO UserADGroups(UserID, RoleName)'

DECLARE @userID int
SET @userID = (SELECT TOP 1 UserID FROM Users WHERE Username = @username) 

WHILE @pos > 0
BEGIN
 SET @pos = CHARINDEX(',',@groups,@previous_pos+1)
 IF @pos > 0
 BEGIN
 SET @value = SUBSTRING(@groups,@previous_pos+1,@pos-@previous_pos-1)
 SET @sql = @sql + 'SELECT ' + cast(@userID as char(5)) + ',''' + @value + ''' UNION ALL '
SET @previous_pos = @pos
END
END

IF @previous_pos < LEN(@groups)
BEGIN
  SET @value = SUBSTRING(@groups,@previous_pos+1,LEN(@groups))
  SET @sql = @sql + 'SELECT ' + cast(@userID as char(5)) + ',''' + @value + ''''
END
print @sql
exec (@sql)

END