标签: t-sql

设置NOCOUNT ON使用情况

灵感来自这个问题,对于SET NOCOUNT有不同的看法......

我们应该为SQL Server使用SET NOCOUNT ON吗?如果没有,为什么不呢?

它的作用编辑6,2011年7月22日

它会在任何DML之后抑制"​​xx行受影响"消息.这是一个结果集,当发送时,客户端必须处理它.它很小,但可以测量(见下面的答案)

对于触发器等,客户端将收到多个"受影响的xx行",这会导致某些ORM,MS Access,JPA等出现各种错误(参见下面的编辑)

背景:

一般接受的最佳实践(我想直到这个问题)是SET NOCOUNT ON在SQL Server中的触发器和存储过程中使用.我们在任何地方都使用它,快速谷歌显示大量的SQL Server MVP也同意.

MSDN表示这可能会破坏.net SQLDataAdapter.

现在,这对我来说意味着SQLDataAdapter仅限于完全简单的CRUD处理,因为它希望"n行受影响"消息匹配.所以,我不能用:

  • 如果EXISTS避免重复(没有行影响消息)注意:请谨慎使用
  • 什么不存在(预期行数较少)
  • 过滤掉琐碎的更新(例如,没有数据实际更改)
  • 之前进行任何表访问(例如记录)
  • 隐藏复杂性或denormlisation
  • 等等

在问题marc_s(谁知道他的SQL的东西)说不要使用它.这与我的想法不同(我认为自己在SQL方面也有一定的能力).

有可能我错过了一些东西(随意指出明显的东西),但你们有什么想法呢?

注意:我看到这个错误已经好几年了,因为我现在不使用SQLDataAdapter.

在评论和问题后编辑:

编辑:更多想法......

我们有多个客户端:一个可以使用C#SQLDataAdaptor,另一个可以使用Java中的nHibernate.这些可能会以不同的方式受到影响SET NOCOUNT ON.

如果您将存储过程视为方法,那么假设某些内部处理以某种方式为您自己的目的而工作则是不好的形式(反模式).

编辑2:触发器打破nHibernate问题,SET NOCOUNT ON无法设置

(不,它不是一个重复的这个)

编辑3:更多信息,感谢我的MVP同事

编辑2011年5月13日

如果没有指定,还会破解Linq 2 SQL吗?

编辑2011年6月14日

使用表变量打破JPA,存储过程:JPA 2.0是否支持SQL Server表变量?

编辑6:2011年8月15日

SSMS"编辑行"数据网格需要SET NOCOUNT ON:使用GROUP BY更新触发器

编辑2013年3月7日7:07

来自@RemusRusanu的更深入的细节:
SET NOCOUNT …

sql t-sql sql-server concurrency ado.net

320
推荐指数
7
解决办法
25万
查看次数

查询以列出所有存储过程

什么查询可以返回SQL Server数据库中所有存储过程的名称

如果查询可以排除系统存储过程,那将更有帮助.

t-sql sql-server

319
推荐指数
10
解决办法
57万
查看次数

T-SQL Cast与转换

什么时候应该使用CASTvs. 一般指导CONVERT?是否存在与选择其中一个相关的性能问题?是否更接近ANSI-SQL?

sql t-sql database sql-server

314
推荐指数
6
解决办法
12万
查看次数

如何为TSQL选择中的每一行生成随机数?

我需要为表格中的每一行添加一个不同的随机数.以下看似明显的代码对每行使用相同的随机值.

SELECT table_name, RAND() magic_number 
FROM information_schema.tables 
Run Code Online (Sandbox Code Playgroud)

我想从中获得INT或FLOAT.故事的其余部分是我将使用这个随机数来创建一个已知日期的随机日期偏移,例如从开始日期偏移1-14天.

这适用于Microsoft SQL Server 2000.

t-sql sql-server sql-server-2000

311
推荐指数
12
解决办法
39万
查看次数

如何从SQL查询中设置变量?

我正在尝试从SQL查询中设置变量:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)

显然我没有这样做,因为它不起作用.有人可以提出解决方案吗?

谢谢!

sql t-sql sql-server

296
推荐指数
9
解决办法
72万
查看次数

如何找到包含<text>的存储过程?

我需要在SQL Server 2008中搜索包含数据库字段名称或变量名称的存储过程.

t-sql sql-server stored-procedures sql-server-2008

295
推荐指数
9
解决办法
55万
查看次数

如何在SQL中选择一个月的第一天?

我只需要选择给定日期时间变量的月份的第一天.

我知道使用这种代码很容易:

select CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) 
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)
Run Code Online (Sandbox Code Playgroud)

但这不是很优雅,也可能不是很快.

有一个更好的方法吗?我正在使用SQL Server 2008.

sql t-sql sql-server datetime sql-server-2008

285
推荐指数
10
解决办法
71万
查看次数

在一个sql语句中删除所有表,存储过程,触发器,约束和所有依赖项

有没有什么方法可以通过删除所有表并删除一个SQL语句中的存储过程,触发器,约束和所有依赖项来清理SQl Server 2005中的数据库?

请求的理由:

我希望有一个数据库脚本来清理未使用的现有数据库,而不是创建新数据库,特别是当您必须向数据库管理员发出请求并等待一段时间才能完成时!

sql t-sql sql-server sql-server-2005

282
推荐指数
8
解决办法
28万
查看次数

什么是存储过程?

什么是存储过程?他们是如何工作的?什么是存储过程的组成(每个必须是存储过程的东西)?

sql t-sql sql-server stored-procedures

281
推荐指数
8
解决办法
52万
查看次数

如何将数组传递给SQL Server存储过程

如何将数组传递给SQL Server存储过程?

例如,我有一份员工清单.我想将此列表用作表,并将其与另一个表连接.但是员工列表应该作为参数从C#传递.

c# t-sql sql-server stored-procedures

275
推荐指数
10
解决办法
35万
查看次数