标签: t-sql

SQL Server是否提供类似MySQL的ON DUPLICATE KEY UPDATE

在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相当的东西?

mysql t-sql sql-server

56
推荐指数
3
解决办法
5万
查看次数

INNER JOIN可以提供比EXISTS更好的性能

我一直在研究在一系列程序上改进性能,最近一位同事提到他在使用INNER JOIN代替EXISTS时已经取得了显着的性能提升.

作为调查的一部分,为什么这可能是我想我会问这里的问题.

所以:

  • INNER JOIN能提供比EXISTS更好的性能吗?
  • 这会发生什么情况?
  • 我如何设置测试用例作为证据?
  • 你有进一步文件的有用链接吗?

实际上,人们可以对这个问题提出任何其他经验.

如果有任何答案可以在没有任何其他可能的性能改进建议的情况下专门解决这个问 我们已经取得了相当程度的成功,我只对这一项感兴趣.

任何帮助将非常感激.

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

56
推荐指数
2
解决办法
4万
查看次数

如何为列字段获取两行之间的差异?

我有这样一张桌子:

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)中

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

55
推荐指数
4
解决办法
19万
查看次数

TSQL DATETIME ISO 8601

我已经获得了一个需要ISO 8601日期格式的规范,任何人都知道转换代码或获取这两个示例的方法:

ISO 8601 Extended Date 2000-01-14T13:42Z 
ISO 8601 Basic Date 20090123T105321Z
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server datetime

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

TSQL:获取最后查询

有没有办法获取最后几个查询的SQL文本?

我正在使用Microsoft SQL Server 2005

sql t-sql history

55
推荐指数
2
解决办法
8万
查看次数

SQL Server:检查触发器是启用还是禁用?

我们如何在SQL Server 2008中查看哪个触发器已启用或已禁用?

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

55
推荐指数
3
解决办法
5万
查看次数

T-SQL:如何选择值列表中不在表中的值?

我有一个电子邮件地址列表,其中一些在我的表中,其中一些不在.我想从该列表中选择所有电子邮件,以及它们是否在表中.

我可以让那些邮件地址在桌子上的用户像这样:
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)

提前致谢.

sql t-sql sql-server

55
推荐指数
2
解决办法
12万
查看次数

如何让T-SQL代码找到重复项?

MS Access有一个按钮,用于生成用于查找重复行的sql代码.我不知道SQL Server 2005/2008 Managment Studio是否有此功能.

  1. 如果有,请指出哪里

  2. 如果还没有,请告诉我如何创建一个T-SQL帮助器来创建这样的代码.

t-sql ssms sql-server-2005

54
推荐指数
3
解决办法
9万
查看次数

计算运行总计/运行余额

我有一张桌子:

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.我正在寻找一种最佳方法.我可以考虑使用函数或相关子查询,但不确定如何做到这一点.

t-sql sql-server running-total

54
推荐指数
2
解决办法
8万
查看次数

如何获取getdate()的日期部分?

我有一个具有CreationDate字段的SQL表.

我有getdate()计算列规范公式.

我想知道如何获得日期部分,即'2012-08-24'而不是'2012-08-24 10:45:17.740'.

t-sql sql-server

54
推荐指数
2
解决办法
19万
查看次数