小编gbn*_*gbn的帖子

删除SQL Server中datetime时间部分的最佳方法

从SQL Server中的datetime字段中删除时间部分时,哪种方法提供了最佳性能?

a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Run Code Online (Sandbox Code Playgroud)

要么

b) select cast(convert(char(11), getdate(), 113) as datetime)
Run Code Online (Sandbox Code Playgroud)

第二种方法确实发送了更多的字节,但这可能没有转换速度那么重要.

两者似乎都非常快,但在处理数十万或更多行时速度可能会有所不同?

另外,是否有可能有更好的方法来摆脱SQL中日期时间的时间部分?

sql t-sql sql-server datetime date

501
推荐指数
8
解决办法
73万
查看次数

设置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万
查看次数

是否有可能直接选择EXISTS?

我想知道是否有可能做这样的事情(这不起作用):

select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit)

看起来它应该是可行的,但许多应该在SQL中工作的东西不会;)我已经看到了这方面的解决方法(SELECT 1 where ... Exists ...)但似乎我应该能够将存在函数的结果转换为一点并完成它.

sql t-sql sql-server

178
推荐指数
5
解决办法
9万
查看次数

插入更新触发器如何确定是否插入或更新

我需要在表A上编写一个Insert,Update Trigger,它将删除表B中的所有行,其中一列(比如Desc)的值类似于表A列中插入/更新的值(比如Col1).我将如何编写它以便我可以处理Update和Insert案例.如何确定是否为更新或插入执行了触发器.

t-sql sql-server triggers

155
推荐指数
10
解决办法
45万
查看次数

在SQL Server中使用常量1或0表示位

当在select语句中用作字段值时,是否可以将1或0表示为位?

例如

在这种情况下,语句(它是select语句的一部分)ICourseBased的类型为int.

case 
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)

要使它成为一种类型,我必须转换两个值.

case 
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方式将值表示为位类型,而不必每次都进行转换?

(我正在使用MS SQL Server 2005)

sql t-sql sql-server bit

144
推荐指数
4
解决办法
9万
查看次数

在TSQL中解析JSON

是否可以在TSQL中解析JSON?我不是要创建一个JSON字符串,我的意思是解析作为参数传入的json字符串.

t-sql sql-server json

108
推荐指数
6
解决办法
17万
查看次数

哪个SQL查询更快?过滤加入条件或Where子句?

比较这两个查询.将过滤器放在连接条件或are子句中是否更快.我一直认为它在连接标准上更快,因为它在最快的时刻减少了结果集,但我不确定.

我将构建一些测试来查看,但我也希望得到关于哪个更清晰易读的意见.

查询1

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
WHERE       a.ID = 1            /* <-- Filter here? */
Run Code Online (Sandbox Code Playgroud)

查询2

SELECT      *
FROM        TableA a
INNER JOIN  TableXRef x
        ON  a.ID = x.TableAID
        AND a.ID = 1            /* <-- Or filter here? */
INNER JOIN  TableB b
        ON  x.TableBID = b.ID
Run Code Online (Sandbox Code Playgroud)

编辑

我运行了一些测试,结果显示它实际上非常接近,但该WHERE条款实际上稍快一点!=)

我绝对同意在WHERE条款上应用过滤器更有意义,我只是对性能影响感到好奇.

已确认的时间标准: 143016 ms
已安排时间加入标准: 143256 ms

测试

SET …
Run Code Online (Sandbox Code Playgroud)

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

83
推荐指数
3
解决办法
6万
查看次数

如何在SQL中将整数列值增加1

我的问题是

如何将列的值增加1.

例如,假设一列ID具有值1,2,3,4,...

现在,当我更新此表时,ID列应该增加1,

现在ID将成为2,3,4,5,..

sql-server-2005

74
推荐指数
5
解决办法
18万
查看次数

如何找出锤击我的SQL Server的内容?

我的SQL Server CPU在今天的大部分时间里都处于90%左右.

由于它一直在使用,我无法重新启动它.

是否有可能找出SQL中导致这种CPU过载的原因?

我已经运行了SQL Profiler,但是很多事情都很难判断是否有任何特别的原因造成它.

我已经运行了sp_who2,但我不确定一切是什么意思,如果有可能在这里找出可能的问题.

为了抢先任何"它可能只是被大量使用"的回应,这只是在今天从完全正常的活动水平开始.

我正在寻找在SQL中找到导致CPU悲痛的方法.

sql-server performance cpu-usage

62
推荐指数
5
解决办法
15万
查看次数

如何在SQL Server中执行重音不敏感比较(e与è,é,ê和ë)?

我想在SQL中比较两个varchars,一个是类似的Cafe,另一个Café在SQL中有一种方法可以比较两个值.例如:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'
Run Code Online (Sandbox Code Playgroud)

那么,如果有一个名称的场所,Big Bobs Café Extraordinaire它将被包含在结果集中?

t-sql sql-server-2005 collation

62
推荐指数
3
解决办法
7万
查看次数