小编Han*_*non的帖子

SQL Server - 从子查询/派生表中删除

有没有办法可以把下面的SELECT语句变成一个DELETE

I would like to delete the corresponding returned records from the [ETL].[Stage_Claims] table.

Since I used derived tables I can't reference the Stage_Claims table.

To summarize, the 2 physical tables used in the below query have identical structures. Only difference is DUPS_Claims is a subset of Stage_Claims.

DUPS_Claims contains duplicate records found in Stage_Claims. If a record exists 3 times in Stage_Claims, we will have that record 3 times in DUPS_Claims as …

sql-server

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

根据 15 分钟的间隔获取计数

我有一个包含通话记录的表:

tbl_calls

cl_Id
cl_StartDate
cl_endDate
Run Code Online (Sandbox Code Playgroud)

我传递两个参数@StartDate@EndDate给我的存储过程。

我的要求是在每 15 分钟的持续时间内获取通话记录的数量。

例如,如果:

@StartDate = '2015-11-16 00:00:00.000', 
@EndDate = '2015-11-16 23:59:00.000'
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Date                        Count
2015-11-16 00:00:00.000      10(Count of startDate between '2015-11-16 00:00:00.000' AND '2015-11-16 00:15:00.000')
2015-11-16 00:15:00.000       7(Count of startDate between '2015-11-16 00:15:00.000' AND '2015-11-16 00:30:00.000')
2015-11-16 00:30:00.000      50(Count of startDate between '2015-11-16 00:30:00.000' AND '2015-11-16 00:45:00.000')

upto @EndDate
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下查询,但它不能正常工作。有一个更好的方法吗?

DECLARE @StartDate DATETIME = DATEADD(DAY,-1,GETUTCDATE()),
        @EndDate DATETIME = GETUTCDATE()

SELECT New 
FROM
    (SELECT 
         (CASE 
             WHEN cl_StartTime BETWEEN @StartDate AND …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 count date

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

日期时间聚集索引不断变得碎片化

我有一个名为 CDR 的大表(400 万条记录),用于在 VoIP 系统中存储来自 Cisco 路由器的 CDR(呼叫详细记录),该表不断增长,并且永远不会有无序插入的记录。我们也不更新或删除行。

由于我们的大多数查询都基于发起呼叫的时间,因此我在此列(DATETIME数据类型)上创建了我的主要聚集索引。然而,在短暂的时间后,索引变得碎片化,仅仅一周后,它的碎片化程度就超过了 70%,因此我们需要重建它。我不明白为什么会发生这种情况,因为我们按顺序插入,并且不更新或删除行。

任何减少或消除碎片的建议将不胜感激。

我在装有 Windows Server 2012 的旧 Xenon 服务器上使用 SQL Server 2014 Enterprise 版本。

sql-server clustered-index fragmentation datetime sql-server-2014

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

创建主键和外键时 CONSTRAINT 关键字是可选的吗?

创建新表时,示例有时会显示用CONSTRAINT关键字定义的主键和外键,有时则不显示CONSTRAINT关键字。是使用CONSTRAINT关键字为约束命名的唯一原因吗?或者您是否有其他原因选择使用或不使用此关键字?

示例 1(不带关键字):

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)

示例 2(使用关键字):

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)

除了分配指定的约束名称之外,DBMS 对这两个示例的看法是否不同?我特别在考虑 SQL Server、Oracle、MySQL 和 PostgreSQL。

constraint

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

为什么从表中删除记录后磁盘上的数据文件的大小没有减少?

当我从 SQL Server 中的表中删除行时,数据库文件的大小不会变小。这是为什么?即使我从每个表中删除每一行,文件大小仍然与删除前一样大。

我有兴趣了解原因,而不是如何缩小数据库文件。

sql-server

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

基于一行返回一批行

假设我在 SQL Server 2008 中有一个这样的表:

id  |  name  |  qty
-------------------
1   |  john  |    1
2   |  bill  |    3
3   |  mary  |    2
4   |  jill  |    5
Run Code Online (Sandbox Code Playgroud)

我想查询此表并为每批返回 1 行,最多为 2。因此,查询结果如下所示:

id  |  name  |  qty
-------------------
1   |  john  |    1
2   |  bill  |    2
2   |  bill  |    1
3   |  mary  |    2
4   |  jill  |    2
4   |  jill  |    2
4   |  jill  |    1
Run Code Online (Sandbox Code Playgroud)

这可以在不使用光标的情况下整齐地完成吗?这可以使用 unpivot 吗?

顺便说一下,该 …

sql-server-2008 cursors cross-apply unpivot

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

TDE 无法加密数据库

为了加密 SQL 数据库,我运行以下命令:

CREATE CERTIFICATE <certname> ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'
WITH SUBJECT = 'certificate subject', EXPIRY_DATE = '20291031';
go

USE <databasetoencrypt>;
GO

CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE <certname>;
GO
Run Code Online (Sandbox Code Playgroud)

尝试执行CREATE DATABASE ENCRYPTION KEY命令时,我收到此消息,但不知道该怎么做:

无法使用证书“名称”,因为其私钥不存在或不受数据库主密钥的保护。SQL Server 需要能够自动访问用于此操作的证书的私钥。

当我ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'CREATE CERTIFICATE命令中省略期间时,它会起作用。但是,我需要创建一个受密码保护的证书。

你有什么主意吗?!谢谢你。

sql-server sql-server-2008-r2 transparent-data-encryption

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

更改 SQL Server 中的分区列

我创建了一个包含 100 多万行的分区表,并datetime在创建表时不小心将错误的列指定为分区键。

是否有一种简单的方法可以将分区列从一datetime列更改为另一列。就我而言,我们有一个列InsertedDate和一个CompleteDate,我不小心使用了第一个而不是第二个。

sql-server partitioning sql-server-2012

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

双表 postgres 不返回时间戳

我正在尝试从本地 postgres 数据库双表中选择 now():

select now() from dual;
Run Code Online (Sandbox Code Playgroud)

它不返回任何行。只打印列名now(yyyy-MM-dd HH:mm:ss.ffffff)

我错过了什么无法获得系统时间?

postgresql timestamp select system-tables

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

获取价格介于 100000 和 10000000 之间的所有数据

我有一个articles名为price.

当我的 Web 应用程序上的用户同时选择Price Min和 时Price Max,我需要执行如下查询:

$priceMin = 100000;
$priceMax = 10000000;

$query = 'SELECT * FROM articles WHERE price BETWEEN $priceMin AND $priceMax';
Run Code Online (Sandbox Code Playgroud)

然而,当所选择的Price Min is <= 100000Price Max is >= 10000000(10元),我没有与任何输出Price大于900000即使以上值的行900000确实存在。

该表定义如下:

CREATE TABLE articles ( 
 id int(11) NOT NULL AUTO_INCREMENT, 
 name varchar(100) NOT NULL, 
 price varchar(100) NOT NULL, 
 source varchar(255) NOT NULL, PRIMARY KEY (id) 
) ENGINE=InnoDB AUTO_INCREMENT=5 …
Run Code Online (Sandbox Code Playgroud)

mysql mysql-5.6

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