当我必须调查由 IMPLICIT_TRANSACTIONS ON 引起的问题时,我可以专注于客户端工具设置 IMPLICIT_TRANSACTIONS ON 或 ANSI_DEFAULTS ON 还是可以针对影响所有客户端的整个数据库进行设置?
我可以通过将标准脚本头更改为来避免该问题
SET ANSI_DEFAULTS ON
SET IMPLICIT_TRANSACTIONS OFF
Run Code Online (Sandbox Code Playgroud)
但是这个设置会在哪些级别的会话、数据库、服务器上受到影响呢?
编辑:
似乎可以在服务器级别进行设置。
在“服务器属性”对话框(“连接”页面)中,我发现选项已更改并编写了脚本:
隐式交易:
EXEC sys.sp_configure N'user options', N'2'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)
隐式交易关闭:
EXEC sys.sp_configure N'user options', N'0'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)
但执行
exec('dbcc useroptions')
Run Code Online (Sandbox Code Playgroud)
SSMS中没有反映变化。对于此类连接,服务器设置似乎以某种方式被覆盖。
现在我必须重新提出这个问题,
是否有客户端不会覆盖服务器设置,并且在服务器设置更改时可能会崩溃。
众所周知,每当执行任何大型查询时,就会出现两种类型的日志文件 (*.ldf):1. 数据库日志(事务日志)文件 2. tempdb 日志。
请描述一下 SQL Server 在执行任何查询时如何使用这些文件?
我想知道的第二件事是,什么时候收缩日志文件(数据库日志、tempdb 日志)是安全的?在什么情况下我们不应该记录文件?
我有以下查询,它连接几个非常大的表的透视数据,并且运行速度非常慢。我尝试为每次旋转创建临时表,它运行得更快。这是一种在不创建临时表的情况下强制索引/表假脱机的方法吗?
select ...
from T1 ....
left join (select ... from (select ... from T2....) pivot (sum(C1) on C2 in (...))) p1
on ...
left join (select ... from (select ... from T3....) pivot (sum(...) on ... in (...))) p2
on ...
left join (select ... from (select ... from T4....) pivot (sum(...) on ... in (...))) p3
on ...
Run Code Online (Sandbox Code Playgroud) 如何在 SQL Server Management Studio 2008 中查看给定时间范围内的存储过程错误列表?
有没有一种方法可以识别执行查询时实际消耗大量资源的顶级数据库用户?
我正在使用 Tsql 脚本来恢复多个数据库。
RESTORE DATABASE XXX_M
FROM DISK = 'C:\XXX.bak'
WITH FILE = 1, replace
GO
Run Code Online (Sandbox Code Playgroud)
有时 .bak 文件已损坏(不是数据损坏)。
我想知道是否有一种方法可以检查文件是否未损坏,然后进行恢复,否则不会。我尝试在恢复验证后使用@@rowcount,但效果不好。
RESTORE VERIFYONLY
FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else
print 'good'
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
谢谢。
sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2014
我的最终目标是将前几年的钱计算为 2019 美元。
我从 BLS 获得了这些数字,并在 sql 中创建了 CPI_U,如下所示:
create table CPI_U (year int, dec decimal(4,2), annual_avg decimal(4,2))
insert into CPI_U (year, dec, annual_avg)
values
(2000, 3.4,3.4),
(2001, 1.6,2.8),
(2002, 2.4,1.6),
(2003, 1.9,2.3),
(2004, 3.3,2.7),
(2005, 3.4,3.4),
(2006, 2.5,3.2),
(2007, 4.1,2.8),
(2008, 0.1,3.8),
(2009, 2.7,-0.4),
(2010, 1.5,1.6),
(2011, 3.0,3.2),
(2012, 1.7,2.1),
(2013, 1.5,1.5),
(2014, 0.8,1.6),
(2015, 0.7,0.1),
(2016, 2.1,1.3),
(2017, 2.1,2.1),
(2018, 1.9,2.4)
Run Code Online (Sandbox Code Playgroud)
然后我像这样构建一个三角形:
with cpi_triangle as (
select c1.year, c1.dec as c1, c2.dec as c2, c3.dec as c3, c4.dec …Run Code Online (Sandbox Code Playgroud) 如果我执行以下操作:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent as avg,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID('dbname'), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID('dbname')
ORDER BY indexstats.avg_fragmentation_in_percent desc
Run Code Online (Sandbox Code Playgroud)
它显示了碎片级别。然后我运行了 Ola Hallengren 的索引优化脚本,这显然减少了索引。
如果我再次运行查询,它现在会在没有索引的表中显示高碎片,例如:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent as …Run Code Online (Sandbox Code Playgroud) SQL Server 是否支持对同一数据库表的并行批量插入?
对我的特定用例的一些说明:
Session.bulk_insert_mappings()方法同时插入20k条数据。我的具体问题:
sql-server-2008 sql-server concurrency bulk-insert sql-server-2017
我想防止表中的删除、插入、更新和选择并发,因此我尝试SERIALIZABLE在转换之前使用该表,但这并没有为其他进程锁定该表!如何修复它?
我尝试过什么:
1-创建表_1
--Create Sample Table
CREATE TABLE [dbo].[Table_1](
[Number] [bigint] NOT NULL,
[Price] [bigint] NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[Number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (1, 1000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (2, 3000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (3, 8000)
GO
Run Code Online (Sandbox Code Playgroud)
2- 查询有延迟的会话一:
--SESSION 1
SET TRANSACTION ISOLATION LEVEL …Run Code Online (Sandbox Code Playgroud) sql-server-2008 sql-server query concurrency sql-server-2008-r2