Questions tagged «sql-server»

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

4
执行访问另一个SQL实例的存储过程
如果这个问题重复另一个已经提出的问题,我深表歉意。我搜索了几个小时,却没有找到适合我的情况。 期望的结果 使用SQL身份验证的用户具有Server1(默认实例)上的Database1的执行权限。用户执行存储过程,作为其过程的一部分,访问存储在Server1 \ Instance2上的数据库2。我希望它既安全又简单(两者都很重要)。 更多信息 我的Windows凭据可以访问两个实例(位于同一服务器上)。因此,我可以在登录时轻松执行存储过程。但是,我不想给用户我的访问权限。我还需要使用SQL登录名,因为该用户将不在域中。 我想要的是为存储过程提供仅针对该过程的访问级别。由于我是系统管理员,因此将为用户提供该过程所需的一切。如果我能做到这一点,我可能会为此目的创建一个帐户,而不是使用我的帐户,但是无论哪种方式都是安全的,因为我可以控制存储的proc的工作。 我尝试将“ WITH EXECUTE AS”语句放入存储的proc中,但无法获取Windows登录信息。当我将其放入时,编译存储的proc时会出现以下错误: 无法以用户“ domain \ jdoe”的身份执行,因为它不存在或您没有权限。 就像我说的,用户在两台服务器上都是sysadmin,所以我不确定它还需要什么。 我研究了以下内容: 可信任-我宁愿不公开我的数据库,这看起来很可怕 链接服务器-我不想授予额外的权限。我不信任其他数据库可以访问我的数据库,也不信任我的数据库可以访问所有其他数据库。 证书-这似乎很复杂而且很困难。除非我能找到一种非常简单的方法来做到这一点并加以维护,否则我不确定这样做是否值得。 所有权链接-再次令人恐惧。当我的目标是防止安全问题时,这似乎会引起更多的安全问题。 镜像用户-我什至在另一个服务器实例上创建了相同(显然是不同的SID)用户,并给了它相同的密码。不行 我觉得自己缺少明显的东西,但不确定是什么。由于我整天都在用头撞墙,所以我可能太近了以至于看不到它。如果有人可以帮我或指出正确的方向,我将不胜感激。我会说我已经阅读了很多MSDN文章(男孩,我讨厌他们-他们似乎从来没有告诉我我想知道什么)。我真正想要的是一个简单易学的教程,它将指导我如何进行操作。缺少这一点,即使是一般性的指示我需要走的方向也会有所帮助。

1
堆栈溢出可以在SQL Server Web Edition上运行吗?
我正在开始一项新的网络冒险,可能需要扩展到大量用户。 我对SQL Server Web版的SPLA许可充满信心,但想知道我是否需要考虑升级到Standard,Enterprise或DataCenter(肯定不会是这个)。 我知道一个人不应该在扩展之前就考虑扩展,但这会影响站点的架构和业务计划。 我知道处理器限制是每个物理处理器而不是线程,因此我不必担心。但是,某些镜像和备份功能会让我担心。SO是否依赖这些功能? tl; dr: 像Stack Overflow这样的网站可以在SQL Server Web上运行吗?维护和高可用性的哪些方面将无法实现?

3
SQL Server-多个运行总计
我有一个包含事务的基本表,我需要创建一个具有运行总计的表。我需要它们是每个帐户的,并且每个帐户还有一些运行总计(取决于交易类型),在其中,每个子帐户都有一些运行总计。 我的基本表具有以下字段(或多或少): AccountID | SubAccountID | TransactionType | TransactionAmount 考虑到我每个Account / TransactionType有大约4种类型的运行总计,每个Account / SubAccount / TransactionType有2种以上的运行总计,我有大约200万个帐户,每个大约有10个子帐户,而我的交易量约为1万笔每分钟(在最大负载下),您将如何做? 这也必须通过SQL作业异步运行,以创建聚合而又不属于事务本身。 我在这里使用游标非常费时-花费的时间太长。我真的很感激任何或多或少都相同的建议/文章。

4
跨链接服务器的远程查询的SQL性能问题
这个过程 create proc dbo.Get_Accounts as begin declare @current_date datetime set @current_date = dbo.fn_currdate() select [fields] into dbo.current_accounts from linkedserver.database.dbo.accounts where date = @current_date end 10分钟后连续失败,并显示以下错误消息: 服务器:消息7399,级别16,状态1,行1 OLE DB提供程序'SQLOLEDB'报告了错误。提供程序终止了执行,因为达到了资源限制。[OLE / DB提供程序返回的消息:超时已过期] OLE DB错误跟踪[OLE / DB提供程序'SQLOLEDB'ICommandText :: Execute返回0x80040e31:执行程序由于达到资源限制而被执行程序终止。 但是,当我在具有硬编码日期的交互式查询窗口中从同一数据库(不在远程数据库)中运行同一查询时: select [fields] into dbo.current_accounts from linkedserver.database.dbo.accounts where date = '1/20/2012' 30秒后返回。 本地服务器是SQLSERVER 2008,远程服务器是SQLSERVER …

1
如何在SQL Server中创建与非主键的关系?
我有一个用户表,该表有两列,分别是主键UserID和另一列UserName。 UserID(int)PK 用户名(varchar(256) 它们都是唯一的,但出于某些原因,我决定将UserName用作其他表中的引用。因此,例如,订单表通过UserName而不是userid引用了user。 订单编号 用户名 我想在所有引用UserName和Users表的表之间建立一种关系,以便获得SQL Server的级联更新/删除功能。 但是SQL Server不允许我在非主键列上创建关系。有什么方法可以在不更改用户表的情况下获得级联更新/删除功能,以便UserName是主键而不是UserID?

3
一个如何缩放SQL Server 2008或2012?
如何缩放SQL Server 2008(或2012)?从根本上讲,我知道有两种选择: 放大: 如果受CPU限制,我可以清楚地看到从1个CPU内核变为2到4个内核。或者,如果RAM使用量猛增,只需增加更多RAM。假设没有应用程序级别更改,SQL Server 2008/2012是否真的采用了这种方法并按比例扩大规模?为了最大程度地减少猜测,假设我没有做一些愚蠢的事情,例如燃烧CPU周期,进行交叉联接等。 向外扩展: 目前还不清楚横向扩展如何工作。我的意思是,如果我在第一个SQL服务器旁边添加了另一个SQL服务器,该查询如何知道要在哪个服务器上运行?前面是否有一些负载均衡器(SQL Server软件随附它吗?)?是否需要更改应用程序级别才能向外扩展正常工作?还是我必须对数据进行分片,并具有根据数据分片键调用正确的数据库服务器的自定义代码? 希望能有更多有经验的人提供意见。

2
将sql server数据库设为只读的好处?
我使用的是报告数据库,出于所有实际目的,该数据库是只读数据库。在此数据库上创建数据并生成并查看动态报告。 我当时正在考虑将此数据库设为只读。 关于只读数据库,我想问的一些问题是 仅数据是只读的吗?我们仍然可以在该数据库上创建索引或视图吗? 使用只读数据库的性能优势是什么?例如使用共享锁的SELECT查询,等等。 使用只读数据库有什么缺点吗? 使用只读数据库时,有什么最佳实践可遵循?

1
具有全局标志的DBCC TRACEON
在“ 需要帮助对Sql Server 2005死锁方案进行故障排除 ”问题中,建议使用DBCC TRACEON (1204, -1)全局跟踪死锁。 在BOL中阅读此命令时,它指出仅当用户或应用程序未在系统上同时运行语句时才应使用该命令。这是否意味着在启用此跟踪标记时我们必须处于单用户模式?另外,为什么要这样做,遵循建议很重要?(在始终运行的生产系统中,似乎很难遵循。)

1
优化SQL Server的最佳工具(不是查询,而是数据库本身)
有谁知道优化整个SQL Server数据库的最佳工具是什么? 我不是在谈论如何编写查询,而是在谈论如何管理数据库文件,索引,分页和碎片。 痛苦的真相 工具与DBA之间的永恒斗争仍然存在...但是我只是想了解产品发展之前的基本知识,然后我才可以聘请一个不精打采的DBA :-)

2
无法删除SQL Server 2008 R2登录
几天前,我已经创建了一个SQL Server登录名。现在,我需要删除相同的内容。因此,我进入了SQL Server Management Studio =>安全=>登录名,并选择了要删除的登录名。它显示一条信息性消息,内容为 删除服务器登录名不会删除与登录名关联的数据库用户。要完成此过程,请删除每个数据库中的用户。可能有必要先将模式的所有权转让给新用户。 忽略此消息,当我确认删除过程时,出现致命错误,提示: 登录“ iis_login”的删除失败。(Microsoft.SqlServer.Smo) 执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo) 此登录名是1个工作的所有者。您必须先删除或重新分配这些作业,然后才能删除登录名。(Microsoft SQL Server,错误:15170) 当登录拥有所有作业(根据以上消息)时,如何删除登录。 问候,尼尔文。


6
围绕唯一索引最大16列的任何方式
根据CREATE INDEX文档: 单个组合索引键最多可以组合16列。 我们有一个约18列的表格,需要形成一个唯一的组合。该表对性能不敏感-我们很少更新值/插入记录。我们只需要确保避免重复记录即可...并认为我们可以施加一个简单的唯一性约束。 有任何想法吗?如果有更好的方法,我愿意完全避免使用唯一的索引/约束。


1
了解SQL Server权限
我针对我的SQL Server 2008 R2 Express Edition实例在SQL Server Management Studio中扎根。我正在尝试了解权限的工作方式。 我可以看到的是(通过许多这些实体的属性) 我的服务器登录名可以链接到数据库用户 我的数据库用户可以具有一个或多个数据库角色 数据库角色之一是拥有模式db_datawriter的db_datawriter 但是到那时,这条路变得很冷。模式db_datawriter在其属性下具有一个权限页面,该页面为空白。 究竟是什么定义了db_datawriter模式的权限?

2
有什么方法可以有效地在MongoDB中执行等效于DENSE_RANK的操作吗?
SQL Server和Oracle都具有DENSE_RANK函数。有没有办法在MongoDB中做类似的事情而不必求助于MapReduce?换句话说,假设您有一个像这样的T-SQL select子句: SELECT DENSE_RANK() OVER(ORDER BY SomeField DESC) SomeRank 在MongoDB中执行相同操作的最佳方法是什么? (注意:这是MongoDB问题的转贴。我希望能从DBA获得更多反馈...)

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.