小编Mon*_*ong的帖子

将数组参数传递给存储过程

可能的重复:
将大量数据发送到存储过程的技术

我经常遇到我想将一组 Id 作为参数传递给存储过程的情况。

例如,对于 GetCustomerAccounts 存储过程,客户端从列表中选择 20 个客户。然后我想将这 20 个客户 ID 传递给程序以返回他们的帐户。

目前我通过有一个参数表来解决这个问题。我用我的客户 ID 和单个 Guid ID 填充它。然后将此单个 Guid ID 传递给过程,然后该过程再次连接参数表。我不喜欢这样,因为它涉及多次访问数据库。

另一种可能性是在逗号分隔的 Varchar 参数中传递 Id。然后,存储过程可以将此字符串解析为临时表,然后针对该表进行联接。再次感觉非常讨厌。

有一个更好的方法吗?

sql-server stored-procedures

11
推荐指数
0
解决办法
1174
查看次数

为什么计算执行计划需要这么长时间?

我们的一位客户刚刚升级到新服务器。

对于一个特定的存储过程,第一次执行它需要三分钟的时间来运行。后续运行不到 1 秒。

这让我相信最初的三分钟主要用于计算执行计划。后续运行只需使用缓存的计划并立即运行。

在我们的测试数据库上,计算相同程序的计划大约需要 5 秒。

我在计划本身中没有看到任何可怕的东西 - 尽管我不认为它是相关的,因为计划显示了运行查询需要多长时间,而不是计算本身。

该服务器为 16 核,24 GB 内存。不会发生沉重的 CPU 或内存负载。

是什么导致仅在特定数据库上计算如此缓慢?

我可以采取哪些步骤来找出问题的原因?

编辑

所以我设法访问服务器并使用SET SHOWPLAN_XML ON运行查询。

我可以确认查询的 CompileTime 占用了查询执行时间的 99%。该StatementOptmEarlyAbortReason“超时”,我们与他们的数据库副本的原因是MemoryLimitExceeded测试数据库。

sql-server-2008 sql-server execution-plan

11
推荐指数
1
解决办法
8148
查看次数

在不存在的视图上创建视图

我有一大堆需要创建的视图。其中许多视图依赖于其他视图。

如果我创建的视图依赖于尚未创建的视图,则会收到无效对象错误。

与其遍历整个过程并找出依赖关系,然后按照正确的顺序创建它们,有没有一种方法可以关闭此检查,直到创建所有视图?

视图安装后可以删除依赖视图,因此数据库可能处于视图存在依赖于不存在对象的状态。我需要它接受在创建过程中处于这种状态..

sql-server view

7
推荐指数
1
解决办法
3168
查看次数

什么会导致统计数据脱节?

我刚刚解决了客户站点上的一个问题,结果证明这是由于统计错误导致优化器超时。运行exec sp_updatestats解决了这个问题,现在一切都很好。

我现在有点困惑的是,统计数据最初是如何脱节的?

数据库同时打开了 auto_create_stats 和 auto_update_stats。所以 SQL Server 应该在没有任何干预的情况下保持最新的统计信息。

那么为什么它在这种情况下失败了呢?

该客户最近升级了他们的数据库服务器。他们自己处理,所以我不确定他们经历了什么程序,但我无法想象这比在旧服务器上备份数据库并在新服务器上恢复数据库更复杂。这可能以某种方式导致故障吗?

sql-server statistics

6
推荐指数
1
解决办法
1437
查看次数