标签: sql-server

我可以通过更新分区键在分区之间移动行吗?

我认为这将是一个相当简单的问题,但实际上我很难找到答案。

问题:您能否通过简单地更新分区列使其跨越分区边界将分区表中的数据行从一个分区移动到另一个分区?

例如,如果我有一个包含分区键的表:

CREATE TABLE SampleTable
(
    SampleID INT PRIMARY KEY,
    SampleResults VARCHAR(100) NOT NULL,
)
Run Code Online (Sandbox Code Playgroud)

使用映射到主键的分区函数:

CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS
RANGE LEFT FOR VALUES (10000, 20000);
Run Code Online (Sandbox Code Playgroud)

我可以通过将 SampleID 从 1 更改为(例如)500,000 将一行从第一个分区移动到第三个分区吗?

注意:我将其标记为 sql server 2005 和 2008,因为它们都支持分区。他们的处理方式不同吗?

sql-server-2005 sql-server-2008 sql-server partitioning

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

SQL Server Data Tools 和分区函数

我正在创建一个滑动窗口加载场景,分区函数将随着时间的推移改变它们的边界。

我在我的 SQL Server Data Tools (SSDT) 数据库项目中创建了一些分区函数,并带有一些硬编码的初始边界。

但是,随着时间的推移,分区函数的边界发生变化,未来的SSDT数据库发布将恢复到原来的边界。

有没有办法优雅地处理这种情况,可能是通过禁用分区功能的发布?

我尝试将SSDT 中分区函数的Build Action属性从默认更改Build为None,但是由于依赖对象中缺少引用,项目无法构建。

sql-server

17
推荐指数
1
解决办法
3732
查看次数

限制 SQL Server 上的连接权限

我有一个应用程序要部署在使用“荣誉系统”安全性的生产中。也就是说,所有用户都使用 SQL 用户/密码凭证连接到数据库,应用程序自行管理权限。后一部分并没有像连接对象包含嵌入式凭据并且可以自由复制这一事实那样困扰我。我试图找到某种方法来限制与一组更有限的客户端的连接。当然,我可以创建防火墙规则来限制 IP。有没有办法通过机器帐户或域成员资格“预审”SQL 登录?

security sql-server sql-server-2012

17
推荐指数
2
解决办法
8735
查看次数

将 SSMS 连接到集成服务时出现“访问被拒绝”

尝试使用特定 SQL Server 群集的网络名称将 SSMS 连接到 Integration Services 时收到以下错误:

连接到计算机 'FooDB' 上的 Integration Services 服务失败,出现以下错误:“访问被拒绝”。

如果计算机尚未配置为允许通过 DCOM 进行远程连接,或者用户确实有权通过 DCOM 访问 SQL Server Integration Services 服务,则会发生此错误。

这是一个有据可查的解决方案的常规问题。例如,请参阅此处和此处的解决方案。

但是,我已经尝试了我所知道的所有解决方案,但问题仍然存在。

更详细地说,我做了以下工作:

  • 验证连接的用户是否具有以上 MsDtsServer100 上链接的文章中列出的 DCOM 权限:

    1. 启动和激活权限:允许本地启动、允许远程启动、本地激活、远程激活

    2. 访问权限:允许本地访问,允许远程访问

    3. 配置权限:允许读取

  • 使用数据包嗅探器确认与连接相关的所有流量都成功通过了防火墙。在 TCP 连接断开之前显示的最后一个数据包是来自服务器的回复,其中包含 MSRPC 标头中“拒绝访问”的 Windows 状态代码。

  • 测试将用户添加到“分布式 COM 用户”组和/或本地管理员组,然后重新启动服务器。这允许用户使用本地节点名称(FooDBN1、FooDBN2)从 SSMS 连接到 SSIS,但是在连接到集群网络名称(FooDB)时,他们仍然会收到“访问被拒绝”错误,这是他们的习惯使用,以及什么对我们的其他集群有效。

此外,我还没有发现在其他集群上更改这些组的成员身份是必要的。

在我检查过的其他集群上,我可以使用集群名称将 SSMS 连接到 SSIS,无需任何非默认配置。

我意识到这可能更适合 ServerFault,如果需要,可以迁移问题,但这也是一个 SQL Server 问题,我认为这里的用户之前可能更可能处理过它。

平台详情:

  • Windows Server 2008 R2 SP1
  • SQL Server 2008 R2 SP2
  • 具有单个 SQL Server 实例的 2 节点主动-被动群集 …

sql-server windows permissions clustering ssis

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

由于潜在的数据丢失,无法转换该值

首先让我澄清一下,这不是一个重复的问题,也不是一个潜在的重复问题。我已经尝试对 StackOverflow 和 DBA Stack Exchange 上已经存在的这个问题的每一个变体实施每一个答案,但没有任何运气。

过去两天我一直在努力解决这个问题(每天大约工作 7 小时),即使在谷歌搜索这个问题之后,似乎没有其他人遇到我的问题的完全相同的变体。

我想做什么?

在 SSIS 中,我试图从 CSV 文件中读取数据,并将其中的行插入到 OLE DB 数据库中。为此,我进行了有史以来最简单的设置,如下所示。

  1. Flat File Source - 读取 CSV 行。
  2. Derived Column - 目前什么都不做(它只是为了试验)。
  3. Data Conversion - 目前什么都不做(它只是为了试验)。
  4. OLE DB Destination - 将行存储在数据库中。

当我尝试运行它时,它停止在我的OLE DB 目标处执行并显示以下错误消息。

输入“OLE DB 目标输入”(51) 上的输入列“数量”(187) 出错。返回的列状态为:“由于潜在的数据丢失,无法转换该值。”。

失败 ( Amount)的列当前的类型是DT_STR。这似乎是我现在最相信的类型。

我尝试了什么?

  • 我已尝试在Flat File Connection失败的列上使用“建议类型”功能。这使得它推荐Single byte signed int数据类型。
    • 停在我的平面文件源。
    • 错误是数据转换失败。列“金额”的数据转换返回了状态值 2 和状态文本“由于潜在的数据丢失,无法转换该值。”。
  • 我试过使用 Derived Column …

sql-server-2008 sql-server ssis windows-server

17
推荐指数
2
解决办法
12万
查看次数

解决仅通过索引视图相关的 2 个表的死锁

我遇到了陷入僵局的情况,我想我已经缩小了罪魁祸首的范围,但我不太确定我能做些什么来解决它。

这是在运行 SQL Server 2008 R2 的生产环境中进行的。

为了让您稍微简化一下情况:


我有 3 个表,定义如下:

TABLE activity (
    id, -- PK
    ...
)

TABLE member_activity (
    member_id, -- PK col 1
    activity_id, -- PK col 2
    ...
)

TABLE follow (
    id, -- PK
    follower_id,
    member_id,
    ...
)
Run Code Online (Sandbox Code Playgroud)

该member_activity表有一个定义为 的复合主键member_id, activity_id,因为我只需要以这种方式查找该表上的数据。

我也有一个非聚集索引follow:

CREATE NONCLUSTERED INDEX [IX_follow_member_id_includes] 
ON follow ( member_id ASC ) INCLUDE ( follower_id )
Run Code Online (Sandbox Code Playgroud)

此外,我有一个 Schema-bound 视图network_activity,其定义如下:

CREATE VIEW network_activity
WITH SCHEMABINDING
AS

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock materialized-view

17
推荐指数
1
解决办法
4205
查看次数

如何去除希伯来语重音标记

我需要一个字符编码技巧来去除希伯来语重音标记。

之前的样品

???????????? ??????? ????????? ??????????????? ???????????????

样品后

?????????????? ?? ????? ??????

sql-server collation encoding unicode

17
推荐指数
1
解决办法
1753
查看次数

当 XACT_ABORT 设置为 ON 时,在什么情况下可以从 CATCH 块内部提交事务?

我一直在阅读 MSDN 关于TRY...CATCH和XACT_STATE。

它有以下示例,用于XACT_STATE在构造CATCH块中TRY…CATCH确定是提交还是回滚事务:

USE AdventureWorks2012;
GO

-- SET XACT_ABORT ON will render the transaction uncommittable
-- when the constraint violation occurs.
SET XACT_ABORT ON;

BEGIN TRY
    BEGIN TRANSACTION;
        -- A FOREIGN KEY constraint exists on this table. This 
        -- statement will generate a constraint violation error.
        DELETE FROM Production.Product
            WHERE ProductID = 980;

    -- If the delete operation succeeds, commit the transaction. The CATCH
    -- block will not execute. …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

17
推荐指数
4
解决办法
8424
查看次数

SQL Server 中的分页

我有一个非常大的数据库,大约 100 GB。我正在执行查询:

select * from <table_name>;
Run Code Online (Sandbox Code Playgroud)

我只想显示第 100 到 200 行。

我想了解这是如何在内部发生的。数据库是否将所有记录从磁盘提取到内存中并将第 100 行到第 400 行发送回查询客户端?或者是否存在任何机制,以便仅从数据库中获取那些记录(第 100 个 -200 个) - 通过使用 B 树等索引机制?

我发现这与分页概念有关,但我无法确切地找到它在数据库级别内部是如何发生的。

sql-server paging

17
推荐指数
2
解决办法
5317
查看次数

强制实施 IsDeleted(软删除)时,合适的索引架构是什么?

目前,我们有一个功能齐全的现有数据库和应用程序。我目前没有能力更改架构。今天,数据库中的每个表都有一个“IsDeleted”NOT NULL BIT 字段,默认值为“0”。当应用程序“删除”数据时,它只是将 IsDeleted 标志更新为 1。

我无法理解的是每个表上的索引应该如何构建。现在,每个查询/加入/等总是实现 IsDeleted 检查。这是我们的开发人员必须遵循的标准。话虽如此,我正在尝试确定是否需要更改每个表上的所有聚集主键索引以包含主键和 IsDeleted BIT 字段。此外,由于每个查询/加入/等。必须实施 IsDeleted 检查,是否适当假设每个索引(非聚集索引)都应包含 IsDeleted 字段作为索引的第一个字段?

我的另一个问题是关于过滤索引。我知道我可以在索引上放置过滤器,例如“WHERE IsDeleted = 0”以减少索引的大小。但是,由于每个连接/查询都必须实现 IsDeleted 检查,这是否会阻止使用过滤索引(因为在连接/查询中使用了 IsDeleted 列)?

请记住,我无法更改 IsDeleted 方法。

index sql-server sql-server-2012

17
推荐指数
2
解决办法
1407
查看次数