Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

5
分页如何与SQL Server中的ROW_NUMBER一起使用?
我有一张Employee有一百万条记录的表。我有以下用于在Web应用程序中分页数据的SQL。一切正常。但是,我认为是一个问题-派生表tblEmployee选择表中的所有记录Employee(以创建 MyRowNumber值)。 我认为,这将导致选择Employee表中的所有记录。 真的有效吗?还是对SQL Server进行了优化以从原始Employee表中仅选择5条记录? DECLARE @Index INT; DECLARE @PageSize INT; SET @Index = 3; SET @PageSize = 5; SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,* FROM Employee) tblEmployee WHERE MyRowNumber BETWEEN ( ((@Index - 1) * @PageSize )+ 1) AND @Index*@PageSize


1
在SQL Server Profiler中进行跟踪时,是否可以在过程调用中记录传入的参数值?
我正在尝试使用SQL Server Profiler(我正在使用SQL Server 2012)来生成有用的跟踪,以显示参数值,而不仅仅是显示带有变量名的SQL。该存储过程将遍历大量库存数据,以产生一些非常有价值的结果,而我正尝试记录现有行为,因此我可以对其进行单元测试,准确定义,然后将其重构为合理的形式。 我有一个执行54参数子过程的存储过程,该过程在一个循环内,在该循环中该存储过程创建一个游标,然后执行while循环。这是一个简化的视图: CREATE PROCEDURE [dbo].[OuterProcedure] ( @ProductCode varchar(8), -- 41 more parameters omitted ) AS SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SET NOCOUNT ON DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations. -- OMIT ABOUT 10 temporary table declarations. DECLARE aCursor CURSOR FAST_FORWARD FOR SELECT …

2
了解MS SQL Server加密和备份
因此,我在聊天中询问有关SQL Server备份文件的安全性。 有人告诉我,如果攻击者可以访问未加密的.bak文件,则他们可以访问数据。 因此,让我们看一下这种情况: OPEN SYMMETRIC KEY MySymetricKey DECRYPTION BY CERTIFICATE MyCertificate 注意-这里没有密码。 然后我们通过以下方式加密表: UPDATE tbl1 SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name) GO 现在,假设有黑客窃取了我的bak文件。为了查看数据(在他自己的计算机和sql-server中),他要做的所有事情是: SELECT convert( NVARCHAR(max), decryptbykey(namePAss)) FROM tbl1 他仍然可以访问数据吗?

2
将数据从Oracle迁移到SQL Server的最简单方法是什么?
我们的产品之一同时支持Oracle和SQL Server作为数据库后端。我们有一个客户希望从Oracle后端切换到Microsoft SQL Server,这对我们来说不是典型的过渡。 将所有数据从整个Oracle模式中获取到SQL Server数据库中的最简单方法是什么? 模式只包含普通的旧表,没有花哨的东西。也许有一个或两个存储过程,我们手工迁移就不会有问题。 我可以使用Oracle的SQLDeveloper将表数据导出为CREATE和INSERT语句,但是这些与SQL Server上使用的语法不匹配,而且我不希望必须手动修复语法错误。

3
拒绝访问SQL Server中的信息架构
我正在寻找对SQL Server中的用户/组禁用对sys.tables/的访问的最佳方法Information Schema。 我从2008年发现了这个话题 它显示了一种如何拒绝访问的方法,[sys].[something]如下所示: DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO 但是没有办法如何禁用对的访问Information Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole 这似乎行不通。 如何禁用对information_schema的访问? 还有一种更简单的方法来禁用对所有sys/的访问information_schema吗? 更新: 实际上我不能同时运行以下语句: DENY SELECT ON [sys] …

6
备份SQL Server中的所有数据库
我有一台Microsoft SQL Server 2005数据库服务器。在数据库服务器中,我大约有250个用户数据库。我必须备份所有这些数据库。由于手动进行备份会花费大量时间,因此我正在寻找可以自动对所有250个数据库进行备份的Batch脚本或DB脚本。有人可以帮忙吗?

4
重建索引,数据库现在的大小是原来的10倍
我有一个大约15演出的SQL Server数据库(2008 R2 SP1)。事实证明,维护已经有一段时间没有运行了,所以我创建了一个维护计划来重建所有索引,它们非常分散。 这项工作完成了,碎片消失了,但是现在数据库已超过120个演出!我知道它会使用额外的空间来进行所有重建,但是既然工作已经完成,我认为所有空间都是可用空间,但是可用空间仅显示为3个演出,因此正在使用117个演出即使索引重建作业已完成。 我很困惑,可以使用一些指导,我已经将数据库恢复到合理的大小,我们没有足够的磁盘空间。 提前致谢! 这是发布的两个查询的结果: log_reuse_wait_desc没有 name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB LIVE_Data 152 123 28 LIVE_Log 18939 89 18849 LIVE_1_Data 114977 111289 3688 第3个文件是.ndf文件,该文件仅在未使用的空间中显示3688,但是在111289中的存储量约为15 gigs。

4
表分区以存档数据
场景: 两个数据库:DB_A和DB_Archive,其中有一个非常大的表,称为tableA。 每天都会将超过60天的记录从DB_A中删除,并移至DB_Archive,主要是为了使事情“分开”,因为过去两个月的记录都在DB_A上严重查询了tableA。 我想摆脱此过程,因为它速度慢且消耗大量资源。我正在考虑在date_Column上使用分区功能在DB_A上实现表分区,并在一个分区上存储所有<2个月的记录,在另一个分区上存储所有> 2个月的记录。我的问题: 如果我有2个不同的数据库,这种情况的行为会如何?如果我在tableA中查询记录> getdate()-30,它将读取归档分区吗? 我以为我也必须对索引进行分区,对吗? 我要如何处理明天我的分区函数将“更改”的事实,我的意思是,如果今天创建该函数(7月2日,其范围将是5月2日,但是明天将是5月3日)。我可以创建动态分区功能吗?



1
如何控制SQL Server对ram的过度使用?
我正在使用的数据库服务器正在运行6个不同的SQL Server实例。它具有48 GB RAM。其中之一正在消耗超过10 GB的RAM,目前总消耗为20 GB。RAM消耗持续增长。在使用40 GB以上的RAM之前的几天,服务器的响应速度非常慢。该应用程序显示保存数据时的崩溃问题。 因此,我重新启动了SQL Server服务。 服务重新启动后,使用率已降至4 GB,但现在正在增长。而且我担心它会在4到5天内增长到40 GB,并使服务器变慢。 我猜服务重启不是一个好选择。 我还从其他来源发现,我们可以设置SQL Server的最大内存使用大小。而且我不确定这是否会有所帮助。我无法对此进行测试,因为服务器正在使用生产数据库,如果在修改SQL Server中的设置时服务停止,则将有风险。 任何人都可以帮助解决这个问题吗?
13 sql-server 

1
DBCC CHECKDB每20-60秒触发一次
我有一个开发环境,正在迅速将其部署到生产环境中,并且在日志中注意到大约每20秒我会看到以下消息: Starting up database 'dbname' CHECKDB for database 'dbname' finished without errors 我注意到了这一点,因为测试此问题的最终用户遇到了一个问题,但我将其隔离为Windows事件日志(应用程序日志)中发现的错误: The log for database 'dbname' is not available. Check event log for related messages. 顺便说一句,我没有找到相关消息,但是通过离线/在线周期解决了。 我唯一能想到的是该应用程序每1毫秒收集一次数据,但是不会将所有这些数据插入数据库中。作为开发服务器,已对其进行了配置,以使日志和数据位于同一驱动器上。考虑到这两条信息,我倾向于将其作为IO问题,并且服务器正在尝试从与存储(SAN)的连接断开中恢复。但是,即使这对我来说也没有意义,因为它不会丢失所有数据库,而只是丢失所有数据库。还有什么可能导致这种情况? 平台:Windows Server 2008 R2上的SQL Server 2008 R2(Ent。)(标准)

3
在SQL Server的表上具有多个可为空的FK是否被视为一种不好的做法
在SQL Server的数据库结构中,我有3种类型的产品,它们需要有关订单的不同信息。所以,我创建了一个Customers桌子,三个不同的顺序表:OrdersForProductAs,OrdersForProductBs,OrdersForProductCs。所有订单表在表上都有一对多的关系Customers。 我还有另一个表格,Payments里面将保存付款明细。但是我在这里对如何组织感到怀疑。 因为我有多种产品类型,并且一个客户可能同时具有多个产品的订单,所以我需要将这三个订单表与Payments表相关联。 另一个问题是,客户只能订购一种产品。因此,表上的FK列Payments需要为nullable。 我的问题是nullable,从长远来看,那些FK色谱柱是否会让我头疼?一般来说,在表上具有可空的FK列是否会被视为不好的做法?

3
如果不存在,则插入
我在存储过程中的插入出现并发问题。该过程的相关部分是: select @_id = Id from table1 where othervalue = @_othervalue IF( @_id IS NULL) BEGIN insert into table1 (othervalue) values (@_othervalue) select @_id = Id from table1 where othervalue = @_othervalue END 当我们同时运行3或4个这些存储的proc时,有时会得到多个插入。 我打算像这样修复此问题: insert into table1 (othervalue) select TOP(1) @_othervalue as othervalue from table1 WITH(UPDLOCK) where NOT EXISTS …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.