标签: t-sql

获取插入的所有行的标识值

我可以Scope_Identity()用来获取插入到标识列中的最后一个标识值。但是如何获取插入语句中插入的所有行的标识值?

例子

insert into DestinationTbl select * from SourceTbl where [col1]='xyz'
Run Code Online (Sandbox Code Playgroud)

上述语句可能会在一个表中插入多行。所以我想要插入的所有行的标识值。怎么做?

sql-server t-sql sql-server-2008-r2 identity

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

获取过去 30 分钟内未更新的记录

我正在尝试编写一个脚本,该脚本将获取超过 30 分钟未更新表的记录。

示例记录:

DNS_NAME    LAST_PERF_TIME
esxnu01 2013-12-24 12:10:00.000
esxnu02 2013-12-24 12:05:00.000
esxnu01 2013-12-24 12:15:00.000
esxnu03 2013-12-24 12:05:00.000
esxnu04 2013-12-24 12:20:00.000
esxnu02 2013-12-24 12:25:00.000

CREATE TABLE [dbo].[VPX_HOST](
[DNS_NAME] [nvarchar](255) NOT NULL,
[LAST_PERF_TIME] [datetime] NULL)


INSERT INTO [dbo].[VPX_HOST]
      ([DNS_NAME],[LAST_PERF_TIME])
 VALUES
      ('esxnu01', '2013-12-24 12:10:00.000')
      ,('esxnu02','2013-12-24 12:05:00.000') 
      ,('esxnu01','2013-12-24 12:15:00.000')
      ,('esxnu03','2013-12-24 12:05:00.000')
      ,('esxnu04','2013-12-24 12:20:00.000')
      ,('esxnu02','2013-12-24 12:25:00.000')
Run Code Online (Sandbox Code Playgroud)

t-sql

3
推荐指数
1
解决办法
2932
查看次数

获取表中的每个状态更改

我有一个表格,其中包含每个项目的状态更改。项目可以多次进入和退出状态。

ItemTable(ItemId int、Status varchar(50)、DateOfChange 日期)

我需要拉出每次更改的日期。但是,由于可以为每个项目重复状态,我不能只执行 min(DateOfChange) 并找到出现的次数。

这是在 OLAP 环境中,用于提取此数据的子查询正在降低性能。

有没有办法通过分区/行号函数来提取这些东西?或者其他在 OLAP 中表现更好的东西?(这是在 SQL 2008 中。)

performance sql-server t-sql gaps-and-islands query-performance

3
推荐指数
1
解决办法
3847
查看次数

从查询中查找实际数据大小?

是否可以找到特定查询将返回的数据大小?

例如,我可以使用以下内容来查找每个日期的行数:

select mydatecolumn, count(*) 
from MyTable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
Run Code Online (Sandbox Code Playgroud)

但是有没有办法找出这些行中包含的数据的大小?

例如

select mydatecolumn, "sizeofactualdata",
from mytable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
Run Code Online (Sandbox Code Playgroud)

即使每个日期只有一个查询,这也不是问题。

t-sql size

3
推荐指数
1
解决办法
2万
查看次数

表 A 触发对表 B 的插入,表 B 触发对表 A 的插入,会发生什么?

假设我有两个表,表 A 和表 B。表 A 有一个插入触发器,可将记录插入表 B。表 B 有一个插入触发器,可将记录插入表 A。在这种情况下会发生什么?这两个触发器是否会一遍又一遍地将记录插入表中,直到数据库填满?这种情况发生的次数有限制吗?

trigger sql-server insert t-sql

3
推荐指数
1
解决办法
254
查看次数

T-SQL 计算持续时间字段的平均值

任何人都可以帮我解决这个问题..

我的表中有一个列将持续时间存储在nvarchar格式为“00:00:00”的字段中。

如何计算平均持续时间?我阅读了其他一些博客,也使用了如下所示的投射技术,但无法解决我的问题...

cast(cast(avg(cast(CAST(Duration as datetime) as float)) as datetime) as time) AvgTime
Run Code Online (Sandbox Code Playgroud)

请帮忙...

sql-server t-sql

3
推荐指数
2
解决办法
1万
查看次数

如何找到自会计月开始以来的天数?

这与我的问题有关如何在 SQL 服务器中找到上个月的第 XX 天?

会计月从每个月的 26 日开始。

我需要从任何日期找出:

  • 会计月的开始日期 (Start_Of_Fiscal_Month)
  • 进入会计月的天数 (Day_Of_Fiscal_Month)

例如:

CurrentDate - '2014-04-26'

Start_Of_Fiscal_Month = 2014-04-26
Day_Of_Fiscal_Month = 1
Run Code Online (Sandbox Code Playgroud)
CurrentDate - '2014-05-02'

Start_Of_Month = 2014-04-26
Day_Of_Fiscal_Month = 7
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2 datetime date

3
推荐指数
1
解决办法
1119
查看次数

如何让标识列在 SQL Server 2012 上向前跳(比如 1000)

我正在使用 SQL Server 2012 并且我想保留我预先存在的数据但导致 ID(身份)列跳过 2000 行。

为什么会这样?我有一个场景,我可能会在备用服务器上发生事务,我需要将其复制到当前服务器。我希望 ID 匹配。因此,我不希望此服务器上的任何新事务与我的备用服务器具有相同的 ID。

希望这是有道理的!!谢谢

sql-server t-sql sql-server-2012

3
推荐指数
1
解决办法
1828
查看次数

使用 TOP 并获得不同的结果集

我正在尝试编写一个有效的查询来删除数据块。为此,我希望通过使用主键来获取最旧的记录来避免索引扫描。但是,我看到返回了一些意想不到的结果。

我希望这个

SELECT TOP 15 OrderID FROM [Order]
Run Code Online (Sandbox Code Playgroud)

会给我最旧的 15 条记录,因为我可以依靠主键递增,因此表中的存储顺序将从低到高。

但是,这会返回不同的结果集

SELECT TOP 15 OrderID FROM [Order] ORDER BY DateCreated ASC
Run Code Online (Sandbox Code Playgroud)

这似乎是获得我需要的结果的更准确但更昂贵的方式。

令人费解的是,这

SELECT TOP 15 * FROM [Order]
Run Code Online (Sandbox Code Playgroud)

为此提供一组不同的 OrderID (PK)

SELECT TOP 15 OrderID FROM [Order]
Run Code Online (Sandbox Code Playgroud)

我知道http://msdn.microsoft.com/en-gb/library/ms189463.aspx解释说没有 ORDER BY 子句就不能保证订单,但期望 PK 为我订购并且无法解释两者之间的差异最后两个选择子句。

sql-server t-sql top

3
推荐指数
1
解决办法
2327
查看次数

如何使用表达式作为 EXEC 的参数?

我正在构建一些脚本并发现一个烦恼是我无法提供表达式作为 EXEC 的参数。

这是我遇到的一个例子。我想使用包含数据库名称的一致格式设置各种项目。传递参数时我不能简单地连接字符串

EXEC msdb.dbo.sp_help_schedule
    @schedule_name = 'FullBackup_'+@DatabaseName,
    ...
Run Code Online (Sandbox Code Playgroud)

相反,我必须为最终字符串声明一个变量并传递它......

DECLARE @ScheduleName varchar(100)
SET @ScheduleName = 'FullBackup_'+@DatabaseName
EXEC msdb.dbo.sp_help_schedule
    @schedule_name = @ScheduleName,
    ...
Run Code Online (Sandbox Code Playgroud)

我在必要时动态建立了一个命令字符串,这可以实现这一点,但不想每次都这样做。这是 t-sql 的限制还是有解决方法?

sql-server t-sql

3
推荐指数
1
解决办法
156
查看次数