有没有办法创建一个表,其中的DATE列在每个日期都更新为当前日期?
我想要一个列,每次我select给我当前日期。
GETDATE() 函数给出当前日期,但我没有设法使用它来每天获取当前日期。
主要目标是创建一个表,但我认为使用视图可能会更好。
我的 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除了看似更好的平均碎片百分比之外,还有什么好处呢?
在重新组织索引之前,我没有更新统计信息。
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?
我遇到了一些奇怪的行为:在将浮点值传递到 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)
但整件事让我摸不着头脑。
问题:以这种方式存储它们的浮点数是怎么回事?
使用它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配置管理器中有一个添加启动参数的选项。是否有任何选项可以通过程序/功能/其他解决方案在服务器重新启动后自动执行此操作?
我们希望向无法访问 SQL Server 配置管理器且没有sysadmin级别权限的团队提供跟踪标志(以及启用/禁用选项)的可见性。
我们正在考虑sysadmin在服务器重新启动后以组用户身份执行的作业(不确定是否可能)。DBCC TRACEON (7412) 作业可以有一个步骤,使用诸如等的代码执行过程。
我尝试导入一条在 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 2008 及以上版本。
我有以下两个表:
MasterTable
MId
DetailsCount DEFAULT 0
DetailsTable
DId
MId
Run Code Online (Sandbox Code Playgroud)
在 中,我将匹配的MasterTable.DetailsCount记录数存储在 中。DetailsTableMId
首先将记录插入到主表中,然后将给定 MId 的数千条记录插入到详细信息表中。这发生在多个线程上。每个线程都有自己的SqlConnection.
详细信息表中的总记录数为数百万,并且还在不断增加。
在DetailsTable.MId列上添加非聚集索引。无法添加聚集索引。
我尝试过两种维护DetailsCount专栏的方法:
DetailsCount使用查询:UPDATE MasterTable
SET DetailsCount = (SELECT COUNT(*) FROM DetailsTable WHERE MId = ?)
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)
由于详细信息表中有数百万条记录,这种方法的性能不高,因为每次在其中添加新记录时我都需要扫描详细信息表(以获取计数)。即使使用非聚集索引,它的性能也不佳。如果我们简单地评论该列的更新,我们会看到性能的显着提高。
DetailsCountusing 查询:UPDATE MasterTable
SET DetailsCount = DetailsCount + 1
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)
这种方式更好,因为我不需要访问详细信息表。
但是,详细信息表中的插入发生在多个线程上。每个线程使用不同的SqlConnection实例。
这就是为什么DetailsCount经常会更新错误的值。
我查看了 …
我们正在构建一个工作中的新服务器,我希望了解我们应该如何构建它以获得最佳性能和备份能力。我们有 6 个驱动器,我们需要一个操作系统(Windows Server 2008)和数据库(SQL Server 2010)。一切都是全新的,6 个 146GB 磁盘驱动器、2 个 AMD 2.2Ghz 四核处理器和 16GB 内存。
我们有一个程序可以连续读取和写入 SQL 数据库。
我可以毫无问题地将 SQL Server 备份到本地磁盘,但我现在需要备份到我可以访问的云磁盘或网络文件夹。执行此操作的最佳做法是什么?
sql-server ×10
backup ×1
cloud ×1
containers ×1
count ×1
debian ×1
docker ×1
hardware ×1
linux ×1
statistics ×1
t-sql ×1
trace-flags ×1
update ×1