我在 SQL Server 2014 中有一个表,如下所示:
CREATE TABLE dbo.MyTable
(
[id1] [bigint] NOT NULL,
[id2] [bigint] NOT NULL,
[col1] [int] NOT NULL default(0),
[col2] [int] NOT NULL default(0)
)
Run Code Online (Sandbox Code Playgroud)
(id1,id2) 是 PK。基本上,id1 是一个标识符,用于对一组结果(id2、col1、col2)进行分组,其 pk 是 id2。
我正在尝试使用内存表来摆脱现有的基于磁盘的表,这是我的瓶颈。
对该表执行的查询如下:
-- INSERT (can vary from 10s to 10,000s of records):
INSERT INTO MyTable
SELECT @fixedValue, id2, col1, col2 FROM AnotherTable
-- READ:
SELECT id2, col1
FROM MyTable INNER JOIN OtherTbl ON MyTable.id2 = OtherTbl.pk
WHERE …Run Code Online (Sandbox Code Playgroud) 通常,当我们开始备份时,我们不允许提交更改,否则将无法访问数据库。我的意思是数据库将处于单用户模式,但我想开始备份并释放数据库以供使用。此外,一旦我开始备份,我不希望将正在进行的更改写入备份文件。我想知道如何在 Microsoft SQL Server 2012 中实现这一点。请帮助我。
好吧,让我先解释一下我的问题。目前我将数据库设置为单用户模式,直到备份完成。这种模式将有助于我在备份过程中避免数据更改的目的。但是我的应用程序与多个数据库相关联(每个数据库相互关联,并且有每个月不断创建的 var dbs)。因此,备份所有这些数据库已成为乏味的过程,更重要的是,在进行备份时,我必须将用户排除在系统之外。
因此,我正在寻找满足以下要求的备份机制。
我想要的是 - 在给定时间备份所有数据库。
我想在网上商店中创建一个购物车。我有两种设计购物车的方法,但我不知道哪个更好。
解决方案1:创建一个如下表:
以这种方式为每个产品为用户添加新行。
注意UserId 和 ProductId 是唯一的
解决方案2:
使用两个表:购物车,cartItem
这样就为每个用户只在ShoopingcartTable 中创建了一条记录。
你有什么意见?
我试图获取存储过程返回的任何内容,以及列名及其类型。我可以用表来做到这一点,但我无法弄清楚存储过程。我尝试过,sp_columns但只能使其适用于表格。
我也尝试过这样的事情,但我不确定我应该匹配什么。
SELECT *
FROM SYS.PROCEDURES (NOLOCK) AS AA
INNER JOIN SYS.SCHEMAS (NOLOCK) AS BB ON (AA.schema_id = BB.schema_id)
INNER JOIN SYS.COLUMNS (NOLOCK) AS CC ON (AA.object_id = CC.object_id)
Run Code Online (Sandbox Code Playgroud)
例如:
USER_ID VARCHAR(200)
Run Code Online (Sandbox Code Playgroud)
我只需要存储过程返回的列名及其数据类型。如果重要的话,SQL Server 版本是 2014。
有任何想法吗?谢谢。
当我检查我们的 SQL Prod 服务器时,每次打开活动监视器时,我总是SQLCLR在活动监视器的资源等待部分的第一个列表中看到。它总是有一个很高的数字。是SQLCLR为了什么?SQLCLR在活动监视器中具有高资源等待数的服务器是否有害?
我知道在使用索引或表扫描时,SQL Server 使用统计信息来查看哪个更好。
我有一个有 2000 万行的表。我在 (SnapshotKey, Measure) 和这个查询上有一个索引:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
Run Code Online (Sandbox Code Playgroud)
查询返回 500k 行。所以查询只选择了表中 2.5% 的行。
问题是为什么 SQL Server 不使用我拥有的非聚集索引,而是使用表扫描?
统计数据已更新。
值得一提的是,查询性能很好。
CREATE TABLE [t1](
[SnapshotKey] [int] NOT NULL,
[SnapshotDt] [date] NOT NULL,
[Measure] [nvarchar](30) NOT NULL,
[MeasureBand] [nvarchar](30) NOT NULL,
-- and many more fields
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
表上没有PK,因为它是一个数据仓库。
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)
Run Code Online (Sandbox Code Playgroud) index sql-server optimization execution-plan sql-server-2012
Microsoft SQL Server 2014 Express 版的数据库大小限制为 10GB。现在,这只是针对单个实例还是版本允许的整体大小?或者这是否意味着如果每个数据库小于 10GB,我可以使用该版本拥有尽可能多的数据库?
我正在尝试确定应用哪个以及何时是应用压缩的合适时间。我发布这个问题是为了从这个社区获得洞察力。我已经阅读了几篇文章,但希望在 DB Administrators 中有一个解决此问题的地方。
当用户使用默认架构 (dbo) 映射时,我们可以选择 [dbo] 下的所有表,而无需为架构添加前缀。
如果它在默认模式下,我们可以执行没有前缀的存储过程。
鉴于此,为什么我们需要使用模式为函数添加前缀?
谢谢!
有 3 列的表:
ID category flag
1 A 1
2 A 0
3 A 0
4 B 0
5 C 0
Run Code Online (Sandbox Code Playgroud)
我想选择flag = 1每个类别至少有一次的所有行。
预期成绩:
ID category flag
1 A 1
2 A 0
3 A 0
Run Code Online (Sandbox Code Playgroud)
可以使用这样的临时表来解决:
select ID into #tempTable from someTable where flag = 1
select * from someTable join #tempTable on someTable.ID = #tempTable.ID
Run Code Online (Sandbox Code Playgroud)
但我更喜欢分组的解决方案,我很难想出。任何帮助将不胜感激。
sql-server ×10
backup ×1
compression ×1
datatypes ×1
functions ×1
group-by ×1
index ×1
optimization ×1
sql-clr ×1