在MySQL中,如果指定ON DUPLICATE KEY UPDATE且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE.例如,如果列a声明为UNIQUE并包含值1,则以下两个语句具有相同的效果:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
Run Code Online (Sandbox Code Playgroud)
我不相信我在T-SQL中遇到过类似的东西.SQL Server是否提供了与MySQL的ON DUPLICATE KEY UPDATE相当的东西?
我一直在研究在一系列程序上改进性能,最近一位同事提到他在使用INNER JOIN代替EXISTS时已经取得了显着的性能提升.
作为调查的一部分,为什么这可能是我想我会问这里的问题.
所以:
实际上,人们可以对这个问题提出任何其他经验.
如果有任何答案可以在没有任何其他可能的性能改进建议的情况下专门解决这个问 我们已经取得了相当程度的成功,我只对这一项感兴趣.
任何帮助将非常感激.
我有这样一张桌子:
rowInt Value
2 23
3 45
17 10
9 0
....
Run Code Online (Sandbox Code Playgroud)
列rowInt值是整数,但不是具有相同增量的序列.我可以使用以下sql按rowInt列出值:
SELECT * FROM myTable ORDER BY rowInt;
Run Code Online (Sandbox Code Playgroud)
这将按rowInt列出值.如何获得两行之间的Value的差异,结果如下:
rowInt Value Diff
2 23 22 --45-23
3 45 -35 --10-45
9 0 -45 --0-45
17 10 10 -- 10-0
....
Run Code Online (Sandbox Code Playgroud)
该表在SQL 2005(Miscrosoft)中
我已经获得了一个需要ISO 8601日期格式的规范,任何人都知道转换代码或获取这两个示例的方法:
ISO 8601 Extended Date 2000-01-14T13:42Z
ISO 8601 Basic Date 20090123T105321Z
Run Code Online (Sandbox Code Playgroud) 我们如何在SQL Server 2008中查看哪个触发器已启用或已禁用?
我有一个电子邮件地址列表,其中一些在我的表中,其中一些不在.我想从该列表中选择所有电子邮件,以及它们是否在表中.
我可以让那些邮件地址在桌子上的用户像这样:
SELECT u.* FROM USERS u WHERE u.EMAIL IN ('email1', 'email2', 'email3')
但是如何在该列表中选择表中不存在的值?
而且,我该怎么选择这样:
E-Mail | Status
email1 | Exist
email2 | Exist
email3 | Not Exist
email4 | Exist
Run Code Online (Sandbox Code Playgroud)
提前致谢.
MS Access有一个按钮,用于生成用于查找重复行的sql代码.我不知道SQL Server 2005/2008 Managment Studio是否有此功能.
如果有,请指出哪里
如果还没有,请告诉我如何创建一个T-SQL帮助器来创建这样的代码.
我有一张桌子:
create table Transactions(Tid int,amt int)
Run Code Online (Sandbox Code Playgroud)
有5行:
insert into Transactions values(1, 100)
insert into Transactions values(2, -50)
insert into Transactions values(3, 100)
insert into Transactions values(4, -100)
insert into Transactions values(5, 200)
Run Code Online (Sandbox Code Playgroud)
期望的输出:
TID amt balance
--- ----- -------
1 100 100
2 -50 50
3 100 150
4 -100 50
5 200 250
Run Code Online (Sandbox Code Playgroud)
基本上对于第一记录余额将是相同的amt,第二个向前余额将是先前余额+当前的余额amt.我正在寻找一种最佳方法.我可以考虑使用函数或相关子查询,但不确定如何做到这一点.
我有一个具有CreationDate字段的SQL表.
我有getdate()计算列规范公式.
我想知道如何获得日期部分,即'2012-08-24'而不是'2012-08-24 10:45:17.740'.
t-sql ×10
sql-server ×8
sql ×5
datetime ×1
history ×1
mysql ×1
performance ×1
ssms ×1
triggers ×1