小编Pau*_*ite的帖子

T-SQL 中列中的 GETDATE( )

有没有办法创建一个表,其中的DATE列在每个日期都更新为当前日期?

我想要一个列,每次我select给我当前日期。

GETDATE() 函数给出当前日期,但我没有设法使用它来每天获取当前日期。

主要目标是创建一个表,但我认为使用视图可能会更好。

sql-server t-sql

-1
推荐指数
1
解决办法
460
查看次数

ALTER INDEX ALL 没有解决问题,但删除并重新创建非聚集索引可以解决问题。为什么?

我的 SQL Server 版本是 2014。

该表有超过 2100 万行。它的索引之一是在被大量引用的整数字段上的非聚集索引。

我做了一个影响大约 20% 行的大规模更新。它更新了该字段的值。从那以后,查询变得非常慢,所以我执行了:

ALTER INDEX ALL ON the_table REORGANIZE;
Run Code Online (Sandbox Code Playgroud)

即使avg_fragmentation_in_percent从 30-90% 下降到 1% 以下,这也没有奏效。

作为最后的手段,我删除了令人不安的索引并重新创建了它。现在是即时的。那么,ALTER INDEX除了看似更好的平均碎片百分比之外,还有什么好处呢?

在重新组织索引之前,我没有更新统计信息。

sql-server statistics index-maintenance

-1
推荐指数
1
解决办法
36
查看次数

“前 15 行和后 15 行之间的行”的含义

WITH trips_by_day AS
                      (
                      SELECT DATE(trip_start_timestamp) AS trip_date,
                          COUNT(*) as num_trips
                      FROM `bigquery-public-data.chicago_taxi_trips.taxi_trips`
                      WHERE trip_start_timestamp >= '2016-01-01' AND trip_start_timestamp < '2018-01-01'
                      GROUP BY trip_date
                      ORDER BY trip_date
                      )
                      SELECT trip_date,
                          avg(num_trips)
                          OVER (
                               order by trip_date
                               rows between 15 preceding and 15 following
                               ) AS avg_num_trips
                      FROM trips_by_day
Run Code Online (Sandbox Code Playgroud)

谁能给我解释一下的意思rows between 15 preceding and 15 following

sql-server window-functions

-1
推荐指数
1
解决办法
57
查看次数

为什么 SQL Server 将浮点数转换为科学记数法?

我遇到了一些奇怪的行为:在将浮点值传递到 varchar 列时,这些值正在从整数转换为科学记数法,而正是这种科学记数法存储为字符串。

    if OBJECT_Id('tempdb..#whydis') is not null begin drop table #whydis end
    if OBJECT_Id('tempdb..#ImSeriously') is not null begin drop table #ImSeriously end

    create table #whydis (bigID float)
    create table #ImSeriously (bigID varchar(255))

    insert into #whydis(BigID)
    values(1495591),
    (1495289),
    (1495610),
    (1495611),
    (1495609),
    (1495592),
    (1495686)

    INSERT INTO #ImSeriously (bigID)
    SELECT BigID from #whydis

    select * from #ImSeriously
Run Code Online (Sandbox Code Playgroud)

结果如下所示:

1.49559e+006

以字符串形式存储的科学记数法。通过转换为 int 很容易解决:

    INSERT INTO #ImSeriously (bigID)
    SELECT cast(BigID as int) from #whydis
Run Code Online (Sandbox Code Playgroud)

但整件事让我摸不着头脑。

问题:以这种方式存储它们的浮点数是怎么回事?

sql-server floating-point number-formatting

-1
推荐指数
1
解决办法
89
查看次数

为什么 SQL Server docker 映像始终使用高 CPU,以及如何修复它?

使用它docker-compose.yml我创建了一个容器:

version: "3.9"
services:
    database:
        image: mcr.microsoft.com/mssql/server
        user: root
        restart: always
        container_name: ContainerNameHere
        volumes:
            - /Organization/Databases:/var/opt/mssql/data
        environment:
            - ACCEPT_EULA=Y
            - SA_PASSWORD=password_here
            - MSSQL_PID=Express
        ports:
            - 1433:1433
        logging:
            driver: none
        networks:
            - NetworkNameHere
networks:
    NetworkNameHere:
        name: NetworkNameHere
        driver: bridge
Run Code Online (Sandbox Code Playgroud)

它的用户数据库为零。它只是一个简单的空 SQL Server docker 容器,没有数据库,也没有数据。

但这是我的top命令的结果:

顶部命令结果

正如你所看到的,它完全摧毁了我的 VPS。

这太令人沮丧了,微软团队还没有回复我

为什么 SQL Server 的 docker 容器会这样,我应该如何解决这个问题?


我有 10 GB 可用空间:

df -h /

已用文件系统大小 Avail Use% 安装在
/dev/sda1 20G 8.9G 10G 47% /

我的 SQL …

sql-server linux debian docker containers

-1
推荐指数
1
解决办法
1440
查看次数

服务器重启后自动启用跟踪标志

我们希望在服务器上永久启用跟踪标志。我知道在SQL Server配置管理器中有一个添加启动参数的选项。是否有任何选项可以通过程序/功能/其他解决方案在服务器重新启动后自动执行此操作?

我们希望向无法访问 SQL Server 配置管理器且没有sysadmin级别权限的团队提供跟踪标志(以及启用/禁用选项)的可见性。

我们正在考虑sysadmin在服务器重新启动后以组用户身份执行的作业(不确定是否可能)。DBCC TRACEON (7412) 作业可以有一个步骤,使用诸如等的代码执行过程。

sql-server trace-flags

-1
推荐指数
1
解决办法
1282
查看次数

SQL Server 存储过程中的此检查约束子句期间会拒绝哪些字符?

我尝试导入一条在 addr 字段中带有分号的记录。一旦我从导入文件中删除分号,以下错误就消失了:

发生数据库错误 SQLSATE = 23000
[Microsoft][ODBC SQL Server 驱动程序][SQL Server]
INSERT 语句与 CHECK 约束“addr_customer”冲突。冲突发生在数据库“db”、表“dbo.customer”、列“addr”中。

存储过程有这段话。我试图在LIKE子句中理解约束检查正在寻找哪些其他字符。显然分号是不允许的。'%[我是否阅读了和之间列出的每个字符']%都是不允许的字符(例如“ | ; % _ ' )的子句?

TABLE [dbo].[customer]  WITH 
CHECK ADD  CONSTRAINT 
[addr_customer] 
CHECK  ((NOT [addr] like '%[,"|;%_'']%'))
Run Code Online (Sandbox Code Playgroud)

sql-server check-constraints

-1
推荐指数
1
解决办法
142
查看次数

如何以高性能且准确的方式增加主表列中的值与详细信息表中的记录数?

我使用的是 SQL Server 2008 及以上版本。

我有以下两个表:

MasterTable
MId
DetailsCount DEFAULT 0

DetailsTable
DId
MId
Run Code Online (Sandbox Code Playgroud)

在 中,我将匹配的MasterTable.DetailsCount记录数存储在 中。DetailsTableMId

首先将记录插入到主表中,然后将给定 MId 的数千条记录插入到详细信息表中。这发生在多个线程上。每个线程都有自己的SqlConnection.
详细信息表中的总记录数为数百万,并且还在不断增加。

DetailsTable.MId列上添加非聚集索引。无法添加聚集索引。

我尝试过两种维护DetailsCount专栏的方法:

  1. 扫描详细信息表以获取计数
    插入详细信息表后,更新DetailsCount使用查询:
UPDATE MasterTable
SET DetailsCount = (SELECT COUNT(*) FROM DetailsTable WHERE MId = ?)
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)

由于详细信息表中有数百万条记录,这种方法的性能不高,因为每次在其中添加新记录时我都需要扫描详细信息表(以获取计数)。即使使用非聚集索引,它的性能也不佳。如果我们简单地评论该列的更新,我们会看到性能的显着提高。

  1. 主表中的增量计数
    在详细信息表中插入后,更新DetailsCountusing 查询:
UPDATE MasterTable
SET DetailsCount = DetailsCount + 1
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)

这种方式更好,因为我不需要访问详细信息表。
但是,详细信息表中的插入发生在多个线程上。每个线程使用不同的SqlConnection实例。
这就是为什么DetailsCount经常会更新错误的值。

我查看了 …

sql-server-2008 sql-server count update query-performance

-1
推荐指数
1
解决办法
801
查看次数

SQL Server 构建

我们正在构建一个工作中的新服务器,我希望了解我们应该如何构建它以获得最佳性能和备份能力。我们有 6 个驱动器,我们需要一个操作系统(Windows Server 2008)和数据库(SQL Server 2010)。一切都是全新的,6 个 146GB 磁盘驱动器、2 个 AMD 2.2Ghz 四核处理器和 16GB 内存。

我们有一个程序可以连续读取和写入 SQL 数据库。

sql-server-2008 sql-server hardware

-2
推荐指数
1
解决办法
1609
查看次数

将 SQL Server 数据库备份到云端或网络文件夹

我可以毫无问题地将 SQL Server 备份到本地磁盘,但我现在需要备份到我可以访问的云磁盘或网络文件夹。执行此操作的最佳做​​法是什么?

sql-server backup sql-server-2008-r2 cloud

-2
推荐指数
1
解决办法
83
查看次数