Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

7
将表移动到另一个SQL2008数据库(包括索引,触发器等)
我需要将一大堆(100多个)大型(数百万行)表从一个SQL2008数据库移动到另一个数据库。 我最初只是使用导入/导出向导,但是所有目标表都缺少主键和外键,索引,约束,触发器等。(标识列也被转换为普通INT,但是我想我只是错过了向导。) 什么是正确的方法? 如果这只是几个表,我将回到源头,编写表定义的脚本(包括所有索引,等等),然后在目标上运行脚本的索引创建部分。但是,有这么多表,这似乎是不切实际的。 如果没有太多数据,我可以使用“创建脚本...”向导来编写包括数据在内的源脚本,但是72m行脚本似乎不是一个好主意!

1
为不同的SQL Server架构设置用户权限
我需要限制对特定用户的访问,但是他们仍然需要能够查看dbo拥有的表中的数据。 我正在尝试执行以下操作: dbo模式具有正常功能,可以访问所有内容 schema1模式只能访问schema1对象 如果schema1视图或存储过程访问dbo拥有的表中的数据,则权限链会适当 user1有权访问schema1,除此之外没有其他权限;#3除外 这是我尝试过的: 创建一个使用随机密码映射到测试登录名的user1用户 在dbo模式中创建了几个表,其中包含一些测试数据 创建一个schema1模式 创建一个schema1.get_profiles,该视图从一个名为schema1.profiles的视图中进行选择,该视图访问dbo.people,dbo.taglinks和dbo.tags中的数据 但是,以user1身份登录时使用以下语句: EXEC get_profiles 1 结果是: The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'. 我已经尝试过WITH EXECUTE AS OWNER并且无法开始理解“所有权链接”应该如何工作。 我也尝试过 GRANT EXECUTE ON SCHEMA::schema1 TO user1 GRANT INSERT ON SCHEMA::schema1 TO user1 GRANT SELECT ON SCHEMA::schema1 …

7
源代码控制下的存储过程,最佳实践
我目前正在使用Tortoise SVN来对.NET Web应用程序进行源代码控制。将我们的SQL Server存储过程纳入Source Control的最佳方法是什么?我目前使用VS 2010作为开发环境,并使用SQL Server数据工具(SSDT)连接到内部SQL Server 2008 R2数据库。 我过去所做的就是将procs保存到.sql文件,并将此文件置于源代码控制下。我确定必须有比这更有效的方法?我可以在生产计算机上的VS2010,SSDT甚至SQL Server上安装扩展吗?




5
如何将1毫秒添加到日期时间字符串?
基于选择,我可以返回x行,如下所示: 1 2019-07-23 10:14:04.000 1 2019-07-23 10:14:11.000 2 2019-07-23 10:45:32.000 1 2019-07-23 10:45:33.000 我们所有的毫秒都为0。 有没有一种方法可以将1乘以1毫秒,因此选择如下所示: 1 2019-07-23 10:14:04.001 1 2019-07-23 10:14:11.002 2 2019-07-23 10:45:32.003 1 2019-07-23 10:45:33.004 我正在尝试创建一个游标甚至没有成功的更新。 这是获取我想要的结果的查询: select top 10 ModifiedOn from [SCHEMA].[dbo].[TABLE] where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59' 有81k值。该字段是DATETIME。

5
要将10-20个SQL Server数据库备份和还原到〜同步状态?
我需要备份10-20个大小在10-50 GB之间的SQL Server 2008 R2数据库,而这些数据库是联机的并且由单个企业应用程序同时使用。我还需要将它们恢复到在所有数据库之间都基本同步的状态(我可以承受数据库之间长达几秒钟的取消同步)。目的是为QA / DEV环境捕获生产数据。 我强烈希望不要要求数据库以完全恢复的方式运行,并且要提出一种备份方法,该方法专用于为QA环境捕获数据,并且保持独立于不受我控制的主要备份过程。 对于我的客户,将需要1-2个小时来捕获20个完整备份,每个备份约30 GB。这使得按顺序进行完整备份是不可接受的,因为在简单恢复中运行时,数据库将太不同步。 我在寻找比这些更好的主意: 理念1:VM磁盘的SAN级别快照。从快照xcopy MDF / LDF。 将复制的文件附加到其他服务器实例后,其恢复过程将生成一致的数据库,这些数据库几乎同时是快照。 谷歌搜索使我确信这不是一个好主意,至少因为我可能会与master / msdb / etc失去同步。 理念2:在所有数据库之间进行复杂的备份和同步还原 这要求我要求数据库在完全恢复中运行,而这是我所不希望的。在截止日期(T0)之前,为所有数据库开始并行备份。达到T0后,备份所有日志(最多需要几分钟)。进行大量的备份,然后尝试还原它们并向前/向后滚动日志,以获得相对于T0的数据库之间的某种一致性状态。 这需要大量的计划和脚本来可靠地使用它,因此我会竭尽全力避免它。 我是否还缺少其他解决方案? PS1:我很想能够使用数据库快照。这个想法是在每个数据库上启动一个快照(应该以秒为单位),然后在接下来的几分钟/小时内依次完全备份每个数据库。然后将它们全部还原到另一台服务器上,并将它们还原为快照。AFAIK这种情况是不可能的,因为快照无法与数据库一起备份。它们只能在创建它们的服务器上回滚到位。此外,他们需要企业版,但我并没有为所有客户提供。 PS2:如果您知道能够产生跨数据库同步备份的第三方解决方案,请提出。

1
是否需要在非聚集索引中包含聚集索引列?
考虑到非聚集索引是基于聚集索引的,那么非聚集索引是否有必要列出聚集索引中包含的任何列? 换句话说,如果“产品”表在ProductID上包含聚集索引,则在创建非聚集索引时建议在其中包含ProductID列时,是否仍然需要将其添加为列? 如果不是,是否存在将列名添加到非聚集索引的好方案?

2
如何使用执行计划优化T-SQL查询
我有一个SQL查询,过去两天我一直在尝试使用试错法和执行计划进行优化,但无济于事。请原谅我这样做,但我将在此处发布整个执行计划。我已尽力使查询和执行计划中的表名和列名通用化,以简化和保护我公司的IP。可以使用SQL Sentry Plan Explorer打开执行计划。 我已经做了相当多的T-SQL,但是使用执行计划来优化查询对我来说是一个新领域,并且我确实试图理解如何做到这一点。因此,如果有人可以帮助我并解释如何解释该执行计划以在查询中找到优化它的方法,我将永远感激不已。我还有许多要优化的查询-我只需要一个跳板就可以帮助我解决第一个问题。 这是查询: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) = 'XYZ'; DECLARE @Param5 VARCHAR(100) = NULL; DECLARE @Param6 VARCHAR(50) = 'Text3'; SET NOCOUNT ON DECLARE @MyTableVar TABLE …

3
按范围返回每个日期的列
假设我有表A:BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 我需要用以下视图实现: Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 该系统用于举办活动,因此每次酒店预订可能需要1到15天之间的任何时间,但最多不过。任何想法将不胜感激。

2
快速查看为SQL Server分配了多少RAM?
使用SQL Server 2005,您可以查看任务管理器,至少可以粗略地了解为SQL Server分配了多少内存。 使用SQL Server 2008,即使SQLServer:Memory Manager /总服务器内存(KB)性能计数器的状态为16,732,760,工作集或提交大小也不会真正超过500 MB。 是否有设置可以在任务管理器中实际显示服务器内存?还是它们更改了SQL Server中内存使用方式的结果

2
用于存储标志数组(位图/位数组)的数据类型
我需要为表的每个记录存储一个位数组,以支持以下操作: 测试是否设置了一个位,并设置了一个位(使用SQL) 使用ADO 2.8(而非ADO.NET)查询和设置值 索引编制(为了从“覆盖索引”功能中受益) 此数组中要存储的最大位数是固定的,但可以超过32。也就是说,简单的int列并不总是有效。 到目前为止,我的选择是: 使用多个int列 使用bigint(只要位数小于等于64即可工作) 使用二进制 ? 第一个选项可以工作,但是需要在访问数据的代码中进行大量重构。第二种选择只是暂时的解决方案,到目前为止,根据我的搜索,我不太确定ADO是否可以与bigint一起使用。我没有使用binary的经验,并且不知道其他任何选项。 根据要求,您会选择哪种数据类型?

4
大索引INCLUDE字段将如何影响系统性能?
这个问题是关于SQL Server索引性能的,其中包含a varchar(2000)作为INCLUDE索引。 我试图在缓慢而不稳定的数据库应用程序中提高性能。在某些情况下,数据是通过大VARCHAR字符串来访问的,与查询包括像multple字符串操作SUBSTRING(),SPACE()和DATALENGTH()。这是访问的简化示例; update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 模式如下所示: CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 定义了以下索引,并在大文本列上覆盖了一个字段。 CREATE NONCLUSTERED INDEX …

5
我的SQL服务器可能受到攻击?
检查我的SQL Server日志,我看到几个这样的条目: Date: 08-11-2011 11:40:42 Source: Logon Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50] Date: 08-11-2011 11:40:42 Source: Logon Message: Error: 18456. Severity: 14. State: 8. Date: 08-11-2011 11:40:41 Source: Logon Message: Login failed for user 'sa'. Reason: Password did …

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.