标签: sql-server-2008

为什么在列上运行 ALTER TABLE 会导致它从 NOT NULL 变为 NULL?

我正在批量更新 SQL Server 数据库。我将所有numeric(38,0)列更改为int (是的,SQL Server 脚本是从 Oracle 脚本创建的)。使用 SMO 和 C# (我是一名软件工程师),我设法生成了非常好的脚本,就像SQL Server Management Studio那样。除了一个特定问题外,一切都非常好:

对于少数表格,当我调用ALTER TABLE [myTable] ALTER COLUMN [columnA] INT它时,它决定还将列从NOT NULL to NULL. 这当然是一个大问题,因为我需要为那些特定列上的大多数表重新生成主键。

显然,我有很多选择使用 SMO 来找出哪些列是主键,并在我更新数据类型之后或同时强制它们为 NOT NULL,但我真的很好奇是什么导致了这种情况。

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

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

为什么 SQL Browser 服务被禁用?

我有一个安装我们产品的软件安装包(使用 InstallShield/InstallScript 编写)的间歇性问题。在安装过程中,我们重新启动 SQL Browser 服务。大多数时候这工作正常。但偶尔 - 我还没有想出如何以可预见的方式重现这一点 - 服务无法重新启动,我在“服务”管理器中发现服务状态设置为“已禁用”。

任何想法会导致服务被禁用,以及如何防止它发生?

sql-server-2008 sql-server sql-server-2008-r2

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

SQL Server 日志收缩问题

可能的重复:
为什么事务日志不断增长或空间不足?

我的 SQL Server 中有一个 300 GB 的数据库日志。我想缩小所有日志,但它不允许我这样做。我尝试在 SQL Server 2008 R2 中使用查询和 UI。我用了

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Run Code Online (Sandbox Code Playgroud)

但是没有任何错误,数据库日志不会缩小。

然后我想使用另一种方法,如下所示:

我将从 SQL Server 分离数据库,然后在将特定.LDF文件移动到其他位置后,仅将数据库文件附加回 SQL Server。我能够成功地将所有日志从 SQL Server 移动到其他服务器。

请让我知道这是将事务日志移动到其他驱动器的好习惯。如果没有,请建议一些其他解决方案来从收缩的数据库日志中恢复。

sql-server-2008 sql-server

8
推荐指数
3
解决办法
6万
查看次数

从 SQL Server 2000 到 2008 的事务复制

我在两台 SQL Server 2000 服务器上有旧数据库,我试图使用事务复制将它们复制到 SQL Server 2008 R2 数据库。

2008 服务器不在同一个局域网中,所以我在互联网上进行复制。我创建了别名,以便每个服务器都可以按名称(复制所需)或多或少地按照 MohammedU(和其他人)的描述连接到其他服务器:http : //social.msdn.microsoft.com/forums/en-US/ sqlreplication/thread/9a8cf6b1-a449-4748-b3c2-1c13e2bfcc5b/

唯一的区别是我使用客户端网络实用程序而不是配置管理器在 SS2000 机器上创建别名。这似乎工作正常。

我设置了一台 SS2000 服务器,称为分发服务器,作为两者的分发服务器。我已经成功地在 Distributor 上创建了发布,并使用推送订阅将它们复制到 SS 2008 服务器,称之为订阅服务器。

我现在已经在第二台 SS2000 服务器上设置了发布,将其命名为 Publisher。我以同样的方式为他们创建了推送订阅。这些订阅不起作用。

在分发服务器上的复制监视器中,发布服务器上发布的分发代理具有以下错误消息:

Error message: The process could not connect to Subscriber 'SUBSCRIBER'
Error details: Login failed for user 'SUBSCRIBER\Guest.' 
(Source: SUBSCRIBER (Data source); Error number: 18456)
Run Code Online (Sandbox Code Playgroud)

我还尝试在订阅者上创建拉订阅。向导说它们已成功创建,并且相应的分发代理正确显示在分发服务器上的复制监视器中,但复制从未发生。代理一直显示快照不可用的消息,即使它可用。

任何人都可以帮忙吗?

replication sql-server-2008 sql-server sql-server-2000

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

如何在使用而不是触发器时插入最后一个标识行

当我插入表使用INSTEAD OF触发器,@@IdentityIDENT_CURRENT('Table')SCOPE_IDENTITY()返回null。如何获取插入行的最后一个标识?

trigger sql-server-2008 sql-server t-sql identity

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

SSMS 解决方案和项目的替代方案?

根据官方SQL Server 文档,不推荐使用“解决方案、项目和项目”。MSDN 页面顶部的显眼(虽然有些神秘)警告横幅指出:

“此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。”

不幸的是,没有提供替代存储/容器策略的建议。那么,存储和打包构成数据库应用程序的各种脚本、查询和文件的推荐方法是什么?我也很想知道你们中是否有人在您当前的工作中实际使用了解决方案或项目框架,以及您使用它们的目的。

[注意:我意识到我可以使用 VS2010 来实现这个功能,但我对基于 SSMS 的方法感兴趣(原因在这个问题的答案中表达了)。]

sql-server-2008 ssms sql-server-tools

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

从 linux 到 SQL-Server 的脚本化命令行访问

有谁知道一个现成的1命令行工具可以让我从 linux 客户端连接到 sql-server?

我希望能够运行任意查询,但大多数时候我希望能够进行数据库转储然后恢复它。

必须是可编写脚本的,因为它将集成到自动构建环境中。

1仅供参考:我唯一的另一种选择是写点东西。我可能会使用 perl 和 DBI

sql-server-2008 linux

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

SQL Server,删除所有用户对表对象的访问权限

作为一项清理工作,我试图删除所有用户(包括非公共用户)对单个表对象(超级用户除外)的访问权限,并随后授予新的访问权限。有没有一种简单的方法可以在不使用系统表的游标的情况下删除对表的访问权限?

sql-server-2008 security

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

逻辑读取与扫描计数

我在 SQL Server 2008 中将一个小表(1,000 行)与一个大表(8M 行)连接起来。连接使用大表上的非聚集覆盖索引,连接可以产生三种可能的查询计划。我试图找出哪个计划更好,但我也想概括这些知识,以便下次我可以更好地了解在查看 SQL I/O 统计信息时使用什么启发式方法。

计划 #1 是一个循环连接,并为大表发出统计信息,如下所示:

Scan count 2582, logical reads 35686, physical reads 1041, read-ahead reads 23052
Run Code Online (Sandbox Code Playgroud)

计划 #2 是一个合并连接并发出如下统计信息:

Scan count 1, logical reads 59034, physical reads 49, read-ahead reads 59004
Run Code Online (Sandbox Code Playgroud)

计划 #3 是一个散列连接并发出如下统计信息:

Scan count 3, logical reads 59011, physical reads 5, read-ahead reads 59010
Run Code Online (Sandbox Code Playgroud)

覆盖索引按 排序(ID, Date)。查询返回大约 50% 的 ID 的数据,并且对于每个 ID,返回最近 3 个月数据的连续块,通常大约为每个 ID 的 1/4 或行。该查询返回索引中大约 1/8 的总行数。换句话说,查询是稀疏的,但始终如此。

我的假设是,计划 #1 对这种工作负载很糟糕,因为将磁盘磁头移动 2,500 次(甚至 1,041 次)比顺序磁盘扫描要昂贵得多。我还假设#3 …

sql-server-2008 sql-server

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

能否在 SQL Server 2008(或 R2)上禁用 Windows 身份验证登录?

所以我们可以使用 Windows 登录或混合模式,但是我们可以将 SQL Server 配置为仅使用内部登录并阻止所有 Windows 登录吗?

作为预防性(或反应性)过程添加所有潜在的 Windows 登录并将其设置为受限权限的唯一解决方案是什么?

sql-server-2008 security sql-server

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