标签: sql-server-2008

在具有数百万行的表中更改列定义的最有效方法是什么

我需要在包含数百万行的表中将一列从 NOT NULL 更改为 NULL。我试过一个简单的

alter table Table1 ALTER COLUMN Column1 XML NULL
Run Code Online (Sandbox Code Playgroud)

但它需要永远。所以这里是我的问题:

  1. 为什么应用更改需要这么长时间?
  2. 有没有更好的方法来做到这一点?

sql-server-2008 database-design

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

链接 SQL Server 代理作业

我有几个工作包,我在 sql server 代理中设置了一个工作。有时我应该一起跑。以给定的顺序运行它们的最佳方法是什么?我有点惊讶 sql server 代理无法将作业作为要执行的作业步骤包含在内。我确实尝试过

sql-server-2008

9
推荐指数
3
解决办法
7515
查看次数

如何帮助 SQL Server 识别我的索引视图列不能为 NULL?

我在 SQL Server 2008 中定义了以下索引视图(您可以从 gist下载工作架构以进行测试):

CREATE VIEW dbo.balances
WITH SCHEMABINDING
AS
SELECT
      user_id
    , currency_id

    , SUM(transaction_amount)   AS balance_amount
    , COUNT_BIG(*)              AS transaction_count
FROM dbo.transactions
GROUP BY
      user_id
    , currency_id
;
GO

CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id
ON dbo.balances (
      user_id
    , currency_id
);
GO
Run Code Online (Sandbox Code Playgroud)

user_idcurrency_idtransaction_amount都定义为 中的NOT NULLdbo.transactions。但是,当我查看 Management Studio 的对象资源管理器中的视图定义时,它在视图中将balance_amount和都标记transaction_countNULL可列。

我查看了几个讨论,是其中最相关的一个,建议对函数进行一些改组可能有助于 SQL Server 识别视图列始终为NOT NULL. 但是,在我的情况下不可能进行这种改组,因为在索引视图中不允许 …

sql-server-2008 null constraint view

9
推荐指数
2
解决办法
4833
查看次数

尽管总是说作业成功,但计划备份任务并不总是备份所有数据库

我在 SQL 2008 中有一份工作,它运行一个存储过程来备份所有数据库。这通过 sql server 代理作业每天运行。

它每天都成功退出,但有时只有在备份了几个数据库后才成功退出。每次可以是不同数量的数据库。大多数情况下,它会成功备份所有数据库,但有时会成功备份 2 次,有时会成功备份 5 次,等等。

我在作业历史记录、事件查看器或 sql server 日志中没有看到任何错误。

备份是在本地磁盘上进行的,尽管该文件夹是可扩展存储卷上文件夹的“连接点”。

操作系统是 Windows 2003 64 位运行 Sql Server 2008 网络版 64 位作为在 Vmware ESXi 5 主机上运行的虚拟机。

存储过程:

ALTER PROCEDURE [dbo].[backup_all_databases] 
@path VARCHAR(255)='c:\backups\'

AS

DECLARE @name VARCHAR(50) -- database name  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?

DECLARE db_cursor CURSOR FOR  
SELECT name …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server backup

9
推荐指数
2
解决办法
1165
查看次数

查询在 SQL 2005 与 SQL 2008R2 上的运行方式不同

在我的办公室,我们有一个非常难看的查询,但在生产和开发环境中运行得很好(分别为 20 秒和 4 秒)。然而,在我们的测试环境中,它需要 4 小时以上。SQL2005(+最新补丁)正在生产和开发中运行。SQL2008R2 正在测试中运行。

我查看了查询计划,它表明 SQL2008R2 正在使用 TempDB,通过表假脱机(懒惰假脱机)来存储从链接服务器返回的行。下一步是显示嵌套循环(左反半连接)占用了 96.3% 的查询。两个运营商之间的界限是 5,398MB!

SQL 2005 的查询计划显示没有使用 tempdb,也没有使用 Left Anti Semi Join。

下面是经过消毒的代码和执行计划,上面是 2005 计划,下面是 2008R2。

是什么导致了急剧放缓和变化?我期待看到不同的执行计划,所以这不会打扰我。查询时间的显着减慢让我感到困扰。

我是否必须查看底层硬件,因为2008R2版本使用的是tempdb,我必须看看如何优化它的使用?

有没有更好的方法来编写查询?

谢谢您的帮助。

    INSERT INTO Table1_GroupLock (iGroupID, dLockedDate)
SELECT 
 Table1.iGroupID,
 GETDATE()
FROM Table1
WHERE 
 NOT EXISTS (
  SELECT 1
  FROM LinkedServer.Database.Table2 Alias2
  WHERE 
   (
    Alias2.FirstName + Alias2.LastName = dbo.fnRemoveNonLetter(Table1.FullName)
    AND NOT dbo.fnRemoveNonLetter(Table1.FullName) IS NULL
    AND NOT Alias2.FirstName IS NULL 
    AND NOT Alias2.LastName  IS NULL
   ) OR (
    Alias2.FamilyName = dbo.fnRemoveNonLetter(Table1.FamilyName)
    AND Alias2.Child1Name …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server-2008

9
推荐指数
3
解决办法
4079
查看次数

如何知道哪个存储过程或触发器正在使用 SQL Server 2008 R2 上的表?

在这种情况下,在我正在检查的数据库中,有一个保存用户历史记录的存档表,并且有一个触发器或存储过程在一段时间后从该表中删除行,以避免数据过大同样,我没有设计DB,我只是在维护一个使用这个DB的应用程序,所以我不知道这些存储过程或触发器的名称,我想做的是定位这个存储过程或触发器,检查代码并修改它以在表上保留更长的“用户历史记录”。

有人告诉我检查“sysobjects”表,在那里我实际上可以看到与表同名的东西,但这是我能够检索的唯一信息,有什么建议吗?

谢谢你。

trigger sql-server-2008 stored-procedures

9
推荐指数
1
解决办法
6775
查看次数

在 SQLCMD 中执行从 SSMS 生成的 TSQL 脚本。报价失败

我试图通过执行 SQL Server Management Studio 中的“生成脚本”工具生成的脚本将数据库部署到机器上。

这是我发出的命令:

sqlcmd -S LOCALHOST\sqlexpress -I -U user -P ******** -i 
    C:\Rollouts\NI-9-25-2012_10-42-AM\Rollout.sql > rolloutlog.txt
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

Sqlcmd: 错误: 文件'C:\Rollouts\ NI-9-25-2012_10-42-AM\Rollout.sql'中命令'''附近的第39488行语法错误。

当我使用文本编辑器查看此行时,所有迹象都指向一个带引号的问题。

有问题的行看起来像这样:

$(''.cat-menu-new'').slideDown(''慢'');

是否有我应该执行或生成脚本以支持脚本中的引号的开关?

sql-server-2008 ssms scripting sqlcmd

9
推荐指数
1
解决办法
2713
查看次数

配置文件死锁报告中的“*password------------”是什么意思?

在 SQL Server 2008 R2 中,我收到了几个死锁报告,输入缓冲区中有“*password------------”。看起来像是攻击,但在那种情况下,我不知道攻击的原因或类型。

(日志是由一位经验丰富的 DBA 专家生成的,并告诉我,不是我)

有谁知道它是什么?谢谢!

例子:

<?xml version="1.0"?>
<blocked-process>
  <process id="process879948" taskpriority="0" logused="0" waitresource="KEY: 5:72057602473263104 (1d69201d0ba6)" waittime="5185" ownerId="88389135" transactionname="SELECT" lasttranstarted="2012-09-25T18:11:02.507" XDES="0x1f7d2a590" lockMode="S" schedulerid="2" kpid="4552" status="suspended" spid="86" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2012-09-25T18:11:02.507" lastbatchcompleted="2012-09-25T18:11:02.507" lastattention="2012-09-25T18:07:35.740" clientapp=".Net SqlClient Data Provider" hostname="IP-xxxxxxxx" hostpid="4868" loginname="sa" isolationlevel="read committed (2)" xactid="88389135" currentdb="1" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056">
    <executionStack>
      <frame line="14" stmtstart="374" stmtend="764" sqlhandle="0x03000500dac2967f208e4000a19d00000000000000000000"/>
      <frame line="1" stmtstart="44" sqlhandle="0x02000000632f7e131f79ec7312284505961e537a61b81be7"/>
      <frame line="1" sqlhandle="0x000000000000000000000000000000000000000000000000"/>
    </executionStack>
    <inputbuf>

*password---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   </inputbuf>
  </process>
</blocked-process>
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 deadlock profiler

9
推荐指数
1
解决办法
618
查看次数

如何编写引用链接服务器的可移植 SQL?

我有一个指向链接服务器的存储过程。在整个过程中的几个地方,我得到了如下内容:

INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Run Code Online (Sandbox Code Playgroud)

这个过程存在于我的开发环境、测试环境和实时环境中。

问题是该过程的每个副本都略有不同,因为每个环境的服务器名称都不同。这使得管理脚本更新的部署变得很麻烦。

有没有办法使程序可移植,以便每个环境都可以运行相同版本的程序?

如果没有,我可以做些什么来使脚本部署更不容易出错/错误?

sql-server-2008 sql-server stored-procedures linked-server

9
推荐指数
1
解决办法
5103
查看次数

SQL Server 中的 PAGE 压缩对运行查询的影响

我计划对我的数据库(数据仓库)中的一些大表应用 PAGE 压缩。这些表相当大,有超过 150 亿行。

当我在测试环境中应用压缩时,整个过程大约需要 22 个小时。这些表每天都会通过运行很长时间的查询进行访问。

  1. 在应用压缩时,是否会对正在运行的查询产生任何影响?任何锁等我应该知道?
  2. 是否有交错的方法来应用压缩?
  3. 您可能有任何其他输入/反馈?

sql-server-2008 compression

9
推荐指数
2
解决办法
5696
查看次数