我需要在包含数百万行的表中将一列从 NOT NULL 更改为 NULL。我试过一个简单的
alter table Table1 ALTER COLUMN Column1 XML NULL
Run Code Online (Sandbox Code Playgroud)
但它需要永远。所以这里是我的问题:
我有几个工作包,我在 sql server 代理中设置了一个工作。有时我应该一起跑。以给定的顺序运行它们的最佳方法是什么?我有点惊讶 sql server 代理无法将作业作为要执行的作业步骤包含在内。我确实尝试过
我在 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_id、currency_id和transaction_amount都定义为 中的NOT NULL列dbo.transactions。但是,当我查看 Management Studio 的对象资源管理器中的视图定义时,它在视图中将balance_amount和都标记transaction_count为NULL可列。
我查看了几个讨论,这是其中最相关的一个,建议对函数进行一些改组可能有助于 SQL Server 识别视图列始终为NOT NULL. 但是,在我的情况下不可能进行这种改组,因为在索引视图中不允许 …
我在 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) 在我的办公室,我们有一个非常难看的查询,但在生产和开发环境中运行得很好(分别为 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) 在这种情况下,在我正在检查的数据库中,有一个保存用户历史记录的存档表,并且有一个触发器或存储过程在一段时间后从该表中删除行,以避免数据过大同样,我没有设计DB,我只是在维护一个使用这个DB的应用程序,所以我不知道这些存储过程或触发器的名称,我想做的是定位这个存储过程或触发器,检查代码并修改它以在表上保留更长的“用户历史记录”。
有人告诉我检查“sysobjects”表,在那里我实际上可以看到与表同名的东西,但这是我能够检索的唯一信息,有什么建议吗?
谢谢你。
我试图通过执行 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 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) 我有一个指向链接服务器的存储过程。在整个过程中的几个地方,我得到了如下内容:
INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Run Code Online (Sandbox Code Playgroud)
这个过程存在于我的开发环境、测试环境和实时环境中。
问题是该过程的每个副本都略有不同,因为每个环境的服务器名称都不同。这使得管理脚本更新的部署变得很麻烦。
有没有办法使程序可移植,以便每个环境都可以运行相同版本的程序?
如果没有,我可以做些什么来使脚本部署更不容易出错/错误?
我计划对我的数据库(数据仓库)中的一些大表应用 PAGE 压缩。这些表相当大,有超过 150 亿行。
当我在测试环境中应用压缩时,整个过程大约需要 22 个小时。这些表每天都会通过运行很长时间的查询进行访问。
sql-server-2008 ×10
sql-server ×2
backup ×1
compression ×1
constraint ×1
deadlock ×1
null ×1
profiler ×1
scripting ×1
sqlcmd ×1
ssms ×1
trigger ×1
view ×1