灵感来自这个问题,对于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行受影响"消息匹配.所以,我不能用:
在问题marc_s(谁知道他的SQL的东西)说不要使用它.这与我的想法不同(我认为自己在SQL方面也有一定的能力).
有可能我错过了一些东西(随意指出明显的东西),但你们有什么想法呢?
注意:我看到这个错误已经好几年了,因为我现在不使用SQLDataAdapter.
在评论和问题后编辑:
编辑:更多想法......
我们有多个客户端:一个可以使用C#SQLDataAdaptor,另一个可以使用Java中的nHibernate.这些可能会以不同的方式受到影响SET NOCOUNT ON.
如果您将存储过程视为方法,那么假设某些内部处理以某种方式为您自己的目的而工作则是不好的形式(反模式).
编辑2:触发器打破nHibernate问题,SET NOCOUNT ON无法设置
(不,它不是一个重复的这个)
编辑3:更多信息,感谢我的MVP同事
编辑2011年5月13日
编辑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 …
什么时候应该使用CASTvs. 一般指导CONVERT?是否存在与选择其中一个相关的性能问题?是否更接近ANSI-SQL?
我需要为表格中的每一行添加一个不同的随机数.以下看似明显的代码对每行使用相同的随机值.
SELECT table_name, RAND() magic_number
FROM information_schema.tables
Run Code Online (Sandbox Code Playgroud)
我想从中获得INT或FLOAT.故事的其余部分是我将使用这个随机数来创建一个已知日期的随机日期偏移,例如从开始日期偏移1-14天.
这适用于Microsoft SQL Server 2000.
我正在尝试从SQL查询中设置变量:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = 'South Coast'
Run Code Online (Sandbox Code Playgroud)
显然我没有这样做,因为它不起作用.有人可以提出解决方案吗?
谢谢!
我需要在SQL Server 2008中搜索包含数据库字段名称或变量名称的存储过程.
我只需要选择给定日期时间变量的月份的第一天.
我知道使用这种代码很容易:
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语句中的存储过程,触发器,约束和所有依赖项来清理SQl Server 2005中的数据库?
请求的理由:
我希望有一个数据库脚本来清理未使用的现有数据库,而不是创建新数据库,特别是当您必须向数据库管理员发出请求并等待一段时间才能完成时!
什么是存储过程?他们是如何工作的?什么是存储过程的组成(每个必须是存储过程的东西)?
如何将数组传递给SQL Server存储过程?
例如,我有一份员工清单.我想将此列表用作表,并将其与另一个表连接.但是员工列表应该作为参数从C#传递.