标签: sql-server

基于其他列的约束

是否可以根据行中的其他值来限制列中允许的值?

例如,我的表:

ID  Test_mode  Active
--  ---------  ------
1   1          Null
2   0          1
3   1          0
Run Code Online (Sandbox Code Playgroud)

有没有办法要么改变的值Test_mode来0如果1插入Active

或者

如果Test_mode是 1 不允许插入/更新Active

或者

如果Test_mode是 1 并Active尝试插入/更新,则抛出某种错误。

Active只能是 NULL, 1, 0, AND only 1 with Test_modeas 0.

我希望这是有道理的,如果没有让我知道,我会更新问题。

sql-server constraint sql-server-2008-r2

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

多次 CREATE 和 DROP #SomeTable 是否“合法”?

我已经将我的代码分类为“连贯块”,我可以一遍又一遍地将其插入到更长的“配置脚本”中,我正在使用的模式之一是:

CREATE TABLE #WidgetSetting 
(
    WidgetID bigint not null,
    Name nvarchar(100) not null,
    Value nvarchar(max) not null,
    CreateDate datetime not null
)

INSERT VALUES

MERGE TABLES

DROP TABLE #WidgetSetting
Run Code Online (Sandbox Code Playgroud)

但是现在 SSMS 抱怨该对象在下次CREATE TABLE火灾时已经存在。是什么赋予了?

我认为很明显我将不得不在脚本的开头声明一次表,截断而不是删除,但很自然地,无法删除表并再次使用相同的名称。

sql-server ssms t-sql sql-server-2008-r2

8
推荐指数
1
解决办法
469
查看次数

删除假设索引

过去,我认为我已经使用 DROP INDEX 语句用于聚集索引和 DROP STATISTICS 语句用于非聚集索引来删除假设索引。

我有一个数据库,里面满是我想要清理的 DTA 残余;但是,当我尝试删除对象时,我总是收到一个错误,告诉我我无法删除该对象,“因为它不存在或您没有权限”。我是服务器上的完整系统管理员,因此希望有权做任何事情。

我已经用 DROP STATS 和 DROP INDEX 语句尝试过这个,但都给了我同样的错误。

有没有人以前删除过这些,是否有我遗漏的技巧?


附录

仔细研究一下,我只是注意到如果我在对象上单击鼠标,“脚本为”和“删除”选项都变灰了。

index sql-server-2008 sql-server database-tuning-advisor

8
推荐指数
1
解决办法
5591
查看次数

默认关闭 CHECK_POLICY

我们从 SQL Server 2000 迁移到 SQL Server 2005。我无法更改的客户端软件创建了一个没有选项的用户

CHECK_POLICY = OFF;
Run Code Online (Sandbox Code Playgroud)

创建用户后,我必须运行命令

ALTER LOGIN username WITH CHECK_POLICY = OFF;
Run Code Online (Sandbox Code Playgroud)

按照建议禁用该策略,我不能。

是否可以禁用CHECK_POLICY没有她的CREATE LOGIN用户创建的默认值CHECK_POLICY = OFF?

sql-server-2005 sql-server

8
推荐指数
1
解决办法
5573
查看次数

-E 启动选项和 SSD

有没有人看到-E使用 SSD 时效果的证据?

对“旋转生锈”驱动器的影响是没有争议的——但 SSD 并没有真正被随机 I/O 所困扰。我想知道该-E选项是否会损害性能。

在混合驱动器(SSD SAN、PCI SSD 和传统 SAN)的服务器上,SQL Server 必须在启动时决定是否使用-E。我有一些经验证据表明该选项可能对性能有害,但在我考虑取消它之前,我希望其他人的反馈。

我的设置使用标准的 64K RAID 条带,NTFS 簇大小也是 64K。

sql-server sql-server-2008-r2

8
推荐指数
1
解决办法
435
查看次数

为什么计划缓存包含估计的而不是实际的执行计划?

我可以想到在计划缓存中存储估计计划而不是实际计划的决定背后的许多原因。但我找不到“正确”的答案。

sql-server execution-plan plan-cache

8
推荐指数
1
解决办法
1031
查看次数

带 BEGIN/END 和不带 BEGIN/END 的 SP 的区别

我发现一些 SP(存储过程)写成,

CREATE PROCEDURE [dbo].[XXX]
(
   -- Parameters
)
BEGIN

--- Actual Work

END
Run Code Online (Sandbox Code Playgroud)

还有一些作为

CREATE PROCEDURE [dbo].[XXX]
(
   -- Parameters
)


--- Actual Work
Run Code Online (Sandbox Code Playgroud)

是什么让它与众不同?

sql-server t-sql

8
推荐指数
2
解决办法
6019
查看次数

SQL Server 复制替代软件

我们已经使用 SQL Server Replication 很长时间了,但遇到了一些问题,有时我们需要重新初始化订阅以解决一些问题,而有时我们需要破坏整个复制结构并重新重建它!

我们主要担心的是,一旦我们遇到复制问题,几乎所有时间的简单解决方案都是重新初始化我们的业务需求不接受的复制。

现在我们正准备发布一个新的大项目,我们正在尝试寻找用于 SQL Server 复制的 3rd 方软件。

我们的设置包括分布在分支机构(不同国家/地区)的服务器 + 移动客户端(具有本地 SQL Server 数据库的笔记本电脑),我们需要在所有这些之间复制数据并提供文章过滤功能。

有人可以为我们建议一些替代解决方案吗?

replication sql-server merge-replication

8
推荐指数
1
解决办法
1444
查看次数

Detach/Attach 或 Offline/Online 是否清除特定数据库的缓冲区缓存?

我的一个朋友今天告诉我,我可以简单地分离然后重新附加数据库,而不是弹跳 SQL Server,此操作将从缓存中清除给定数据库的页面和计划。我不同意并在下面提供我的证据。如果您不同意我的观点或有更好的反驳,请务必提供。

我在这个版本的 SQL Server 上使用 AdventureWorks2012:

选择@@版本;
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Windows NT 6.1(内部版本 7601:Service Pack 1)上的开发人员版(64 位)

加载数据库后,我运行以下查询:

首先,运行在这里找到的 Jonathan K 的 AW 增肥脚本:

AW 发胖

---------------------------
-- 第 1 步:Bpool 的东西?
---------------------------
使用 [AdventureWorks2012];
走

选择
     OBJECT_NAME(p.object_id) AS [ObjectName]
   , p.object_id
   , p.index_id
   , COUNT(*) / 128 AS [缓冲区大小(MB)]
   , COUNT(*) AS [buffer_count]
从
     sys.allocation_units AS
     INNER JOIN sys.dm_os_buffer_descriptors AS b
           ON a.allocation_unit_id = b.allocation_unit_id
     INNER JOIN sys.partitions AS p
           ON a.container_id = …

sql-server sql-server-2008-r2

8
推荐指数
1
解决办法
1698
查看次数

如何让触发代码只针对特定的应用程序执行?

我想知道是否可以只为我当前的应用程序启用触发器,而不是为对表执行的任何 sql 启用触发器。

情况:

有两个应用程序在同一个数据库上工作。App1 和 App2。

我在“MyTable”上有一个触发器,它应该只在 App1 执行查询时触发,而不是在 App2 执行查询时触发。

sql-server sql-server-2008-r2

8
推荐指数
1
解决办法
1488
查看次数