我有一个FactsTable1包含 240 列的每日事实表 ' ',我正在其中探索 ' Clustured Columnstore Index'(CCI)。
我想知道,
附加信息 :
你能告诉我这个查询有什么问题吗?我正在尝试编写 SQL 查询来动态创建表
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString =+ 'Create Table' + GETDATE() + '_' + 'Table' + '' + '(' + 'Column1' + ' ' + 'Nvarchar(50)' + 'Null' + ')' +
Exec @SQLString ;
Run Code Online (Sandbox Code Playgroud) 我有一个要优化的查询,如下所示:
SELECT 1 FROM HugeView
WHERE (Col1 = 'a' AND @val = 1) OR (Col2 = 'a' AND @Val = 0)
(where Col1 and Col2 are on different tables)
Run Code Online (Sandbox Code Playgroud)
如果我对@Val值 (1/0) 进行硬编码- SQL Server 知道构建一个执行计划,在该计划中它只访问Col1或的相关表Col2。
但是当使用一个变量时,所有的表都会HugeView被访问。
您能否建议一种可以帮助 SQL Server 不访问不必要表的方法?
限制:
option (recompile)HugeView不幸的是,上述所有限制都是产品设计和/或开发范围的一部分——我对此无能为力——只能在我拥有的范围内工作。
但是,我知道它@var是 1 或 0,并且可以根据需要创建和查询(并加入)临时表或“真实”表。
另请注意,我没有从Col1or的表中进行选择Col2- 我仅将它们用于过滤。
我尝试在空表上创建和加入,或者top(@somevar)根据@var的值 - 但没有帮助。
UNION ALL不会有帮助,因为在任何情况下优化器都不知道 …
我正在使用 php 的 mssql 扩展(在 linux 上)向 SQL Server 发送查询。
我有一个表格,可以相当快地建立一次性数据。我花了比预期更长的时间来构建一个 cron 每小时清理这些数据,所以它已经积累了几个月来超过 1G 的数据,不确定有多少行,但可能超过 100 万。
因此,我对超过 1 天的任何内容运行了删除查询。
DELETE FROM CacheForms WHERE TimeStamp < 1503454349
Run Code Online (Sandbox Code Playgroud)
但是在 60 秒后查询超时并且脚本失败。(更新同样发生在 10 分钟。)
当这个删除查询超时(一个 php 概念)数据库会发生什么?数据库是否从事务日志中恢复已删除的数据?还是数据真的被删除了?或者查询是否在 sql server 中继续运行?
参考我之前关于首选设计的问题,以避免循环或多个更新路径参照完整性通过ON UPDATE CASCADE和级联更新和删除ON DELETE CASCADE,我正在尝试使用触发器作为替代方案。
对于这个例子,我试图尽可能地简化设计。
我有一张Parent桌子和一张Child桌子;Parent并Child共享一列,ParentName。每当Parent.ParentName发生变化时,我都想在Child.ParentName.
够简单吗?如果我更新 中的单行Parent,我可以使用inserted和deleted表很容易地知道要更新Parent和Child表中的哪一行。像这样的东西:
UPDATE Parent
SET Parent.ParentName = inserted.ParentName
FROM Parent
INNER JOIN deleted ON Parent.ParentName = deleted.ParentName
CROSS JOIN inserted;
UPDATE Child
SET Child.ParentName = inserted.ParentName
FROM Child
INNER JOIN deleted ON Child.ParentName = deleted.ParentName
CROSS JOIN inserted;
Run Code Online (Sandbox Code Playgroud)
很明显,如果Parent在一个 …
我需要一种方法来获得ek与每个相关联的唯一计数userid
我想要的输出是:
74123 3
Run Code Online (Sandbox Code Playgroud)
但我似乎无法准确获得 Distinct 计数的语法。我只能让它返回 TOTAL 计数,这不是我所追求的。
数据线
CREATE TABLE [dbo].[___________Purple](
[userid] [int] NULL,
[ek] [char](100) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES (71423, N'Black ')
GO
INSERT [dbo].[___________Purple] ([userid], [ek]) VALUES …Run Code Online (Sandbox Code Playgroud) 我对数据库问题没有太多经验,所以请原谅文字墙,我相信上下文对于理解问题和目标很重要。
我每天都会从另一个系统收到一个 CSV 文件,我希望将其保留在 Microsoft SQL Server 上运行的数据库中。为了实现这一点,我每天安排一个 PowerShell 脚本,它使用 bcp 实用程序将 CSV ( accounts.csv ) “加载”到accounts_stage具有 CSV 文件“精确”布局的表 ( ) 中。此外,我将时间戳“写入”到另一个表 ( import_stage) 中。该accounts_stage表具有触发器集,并且 bcp 配置为触发该触发器。
导入完成后,我想“规范化”数据。对于一个基本示例,假设这仅涉及合同编号(在 CSV 文件中名为“Vnr”的字段),它是一个字符串。我有另一个表 ( contracts),它被触发器填充:
INSERT INTO dzp.contractid(vnr)
SELECT DISTINCT
a.Vnr
FROM dzp.accounts_stage a
WHERE NOT EXISTS(
SELECT id.vnr
FROM dzp.contractid id
)
Run Code Online (Sandbox Code Playgroud)
这应该并且似乎完成了将所有导入到表中的合同编号contractids。contractids.contractId是 BIGINT PRIMARY KEY、IDENTITY 和自动增量。
我将导入元数据添加到我的表中,如下所示:
CREATE TABLE #IMPORTMETADATA
([importid] bigint
,[generated_timestamp] datetime …Run Code Online (Sandbox Code Playgroud) 之前有人问过一个类似的问题,但我一直无法将这些答案调整到我的问题中。
我想在连续日期中查找行,其中另一列具有相同的值,并将其作为单个日期范围返回。
我尝试使用OVER和PARTITION BY以及 ROW_NUMBER() 来获得我需要的结果,但我对这些概念不够熟悉,无法找出正确的输出。
系统为 Microsoft SQL Server 2014。
鉴于:
CREATE TABLE EXCEPTIONS
(
ID NUMERIC(18) NOT NULL,
DATE DATE NOT NULL,
TYPE VARCHAR(20) NOT NULL,
VALUE VARCHAR(20),
);
Run Code Online (Sandbox Code Playgroud)
和数据:
INSERT INTO EXCEPTIONS VALUES
(17482, '2016-08-24', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-08-25', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-08-26', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-04', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-05', 'PRESSURE_EXCEPTION', 'Over'),
(17482, '2016-09-16', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-17', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-23', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-24', 'PRESSURE_EXCEPTION', 'Under'),
(17482, '2016-09-25', 'PRESSURE_EXCEPTION', 'Under'), …Run Code Online (Sandbox Code Playgroud) 我知道简单查询的查询执行顺序。
但是,我对理解此查询中的确切执行顺序感到困惑:
select
M.DateKey As DateKey ,
PersonnelCode As PersonnelCode,
Isnull((select top 1 BranchCode
from [Financial].[viwPersonnelLocation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.BranchCode) As BranchCode,
Isnull((select top 1 CertficateCode
from [Financial].[viwPersonnelEducation]
where PersonnelCode = p.PersonnelCode and DateKey <= M.DateKey
order by DateKey desc)
,p.Educationcode) As Educationcode
from (select DateKey,MonthOfYearKey,EDATE
from [Common].[DimTime]
where LastDayOfMonthKey = 1) M
Inner Join
[Financial].[viwPersonnelInfo] As P
on m.DateKey >= p.DateOfEmployeement
where (m.DateKey <= p.DateOfLeave) or (p.DateOfLeave='' or p.DateOfLeave is …Run Code Online (Sandbox Code Playgroud) tempdb发生故障转移时如何利用?
假设有两台服务器,服务器 1是主服务器,服务器 2是辅助服务器。突然,故障转移发生了,那么,tempdb在这种情况下如何表现?
sql-server sql-server-2012 failover availability-groups sql-server-2014
sql-server ×10
t-sql ×2
trigger ×2
columnstore ×1
csv ×1
date ×1
failover ×1
import ×1
optimization ×1
partitioning ×1
php ×1