数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

3
创建数据库级别的常量(枚举)而不使用CLR?
我有几个SQL对象,它们需要根据请求的期望状态采取其他操作。有没有一种方法可以创建数据库级别的常量(枚举),这些常量可以传递给存储过程,表值函数并可以在查询中使用(不使用CLR)? CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType) AS ...; 然后使用它: EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2); 哪里myEnumType将保留一些枚举值。 在该过程中,我将能够使用@EnumValue它并针对其中的值进行测试myEnumType以完成所需的工作。我将myEnumType考虑的情况下使用位掩码的值。 举一个简单的例子,考虑一个昂贵的过程,该过程需要一个庞大的数据集并将其缩减为较小但仍然非常大的数据集。在此过程中,您需要在过程的中间进行一些调整,以免影响结果。说这是基于归约内中间计算的某些状态来过滤(或针对)某些类型的记录。该@EnumValue类型的myEnumType可以用来测试此 SELECT ... FROM ... WHERE (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...) OR (@EnumValue & myEnumType.EnumValue2 = myEnumType.EnumValue2 AND ...) OR ... 在不使用CLR的情况下,SQL Server中是否可能存在这类数据库级别的常量? 我正在寻找数据库级别的枚举或常量集,这些枚举或常量集可以作为参数传递给存储过程,函数等。

1
持久的计算列导致扫描
将常规列转换为持久计算列会导致此查询无法执行索引查找。为什么? 在多个SQL Server版本上进行了测试,包括2016 SP1 CU1。 复制 使用计算列 带有常规列 麻烦的是table1,col7。 表格和查询是原始文档的部分(简化)版本。我知道查询可以用不同的方式重写,并且出于某种原因可以避免该问题,但是我们需要避免触摸代码,而为什么table1找不到原因仍然存在。 正如保罗·怀特(Paul White)所展示的(谢谢!),寻道在强制的情况下仍然可用,所以问题是:为什么寻道未由优化程序选择,以及我们是否可以做一些不同的事情来使寻道按原样进行而不改变?码? 为了澄清有问题的部分,以下是不良执行计划中的相关扫描:


4
有什么原因停止SQL Server?
我所读到的只是停止SQL Server可能造成的破坏,因为它会创建一个冷缓存并占用内存。那么为什么有人要停止SQL Server?如果您可以提供文章的任何链接,以便我可以阅读更多文章,我将不胜感激! 这个问题是我老师提出的。除非是一个棘手的问题,否则我绝对会感到困惑。他的确切问题是: 使用Internet进行研究,并了解为什么有人想要停止SQL Server。解释你的答案。 这是在我们探索如何使用SQL Server 2008 R2的上下文中。我不确定他是否在寻求明显的答案,或者我缺少什么。

4
如何在PostgreSQL中生成时间序列?
如果您要生成日期序列,请参阅此问题 假设我要每24分钟每5分钟生成一个系列。如何在PostgreSQL中做到这一点? PostgreSQL可以generate_series()来自timestamp,但不能来自time。 选择任意时间戳更好还是还是有另一种方式来生成系列?

2
SQL Server关于旧黑客的建议[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 3年前关闭。 晚上伙计们和女孩们,我希望你们中的一些传说能够在这里帮助我:) 我上次在黑暗时代使用SQL Server的版本是7(我们一起擦了两根木棍以使之运转)。现在,我在21世纪,并且想再次回到DBA的工作。 我想设置一个“廉价”虚拟机和实例,然后进行最新的认证(我认为最新的认证将于2017年4月开始,这对我来说是个不错的时机)。我对BI方面特别感兴趣。 谁能为虚拟机推荐好的托管服务提供商?我是简单地获取Windows Server并从那里去还是可以在某处获取软件包?我承担的Azure还是其他地方?我怀疑有很多选择,希望您可以分享一些不错的选择:) 加上其他有用的提示,我们非常欢迎!

4
第一个范式:确定性定义
我试图得到什么是第一范式的确定版本。我阅读的所有内容都有一个稍微不同的旋转。 许多机构(例如Date)说,根据定义,关系始终是“第一范式”,而其他机构则列出了要求列表。这意味着对1NF的需求从零到很多。 我猜想区别在于表和关系之间的关系:表可能是一个完整的混乱,而关系则受到某些限制。关系在SQL中表示为表的事实因此造成了一些混乱。 我特别关注与SQL数据库有关的1NF。问题是:要确保表格采用第一范式需要哪些属性? 许多权威人士建议,如果表表示一个关系,则该表已经存在于1NF中。这将1NF的定义推回到关系的定义。 以下是1NF中表格的一些属性: 列顺序微不足道[1] 行顺序微不足道 所有行的长度相同(即,行数据与列标题匹配) 没有重复的行(可以使用代理主键来保证,但是PK本身不是必需的) 没有重复的列 每一列包含一个单一值(原子) [1]从技术上讲,属性是无序的,但是在表中,行数据的顺序必须与列标题的顺序相同。但是,实际顺序并不重要。 在多个数据上: 原子数据的概念是不能进一步分解项目。此概念已经过资格验证,尽管从技术上讲,所有内容都可以细分为恶心,但实际上,取决于所使用的数据的方式,所讨论的数据无法进一步细分。 例如,完整的地址或全名通常应进一步细分,但是诸如给定名称或城镇名称之类的组件可能不应进一步细分,尽管事实上它们可以是字符串。 至于重复的列,它是一个设计不良列具有近重复列,例如phone1,phone2等。通常,重复数据指示用于一个附加的相关表的需要。 依存关系 行之间不应有任何关系,除非它们符合相同的标题。 列之间也应该没有关系,但是我认为这是较高范式的主题。 问题是:上面的多少在1NF的定义中?独立行位也进入其中吗?

3
将数据从SQL Server 2005迁移到2016
我是管理SQL Server的新手,但是我对SQL语言和制作SSIS包感到满意。 我想将数据从SQL Server 2005迁移到2016。 我的问题是我是否需要担心系统数据库和其他对象,例如索引,存储过程,视图,安全性和权限。登录,或者我可以只迁移数据。 在这种情况下,建议使用此程序。

4
database_scoped_configurations中的错误
我正在尝试从以下位置插入结果集: SELECT * FROM sys.database_scoped_configurations 到临时表中,因为我想检查服务器上所有数据库的设置。所以我写了这段代码: DROP TABLE IF EXISTS #h CREATE TABLE #h(dbname sysname, configuration_id INT, name sysname, value SQL_VARIANT, value_for_secondary SQL_VARIANT) EXEC sys.sp_MSforeachdb 'USE ?; insert into #h(dbname, configuration_id, name, value,value_for_secondary) SELECT ''?'' as dbname, * FROM sys.database_scoped_configurations D' SELECT * FROM #h H 但随后将只有每个数据库一行,而不是4行,我从在每个数据库中运行一个普通的选择期待。 我知道有比使用sp_MSForEachDB更好的编码方法,我尝试了几种方法。但是我仍然每个数据库只获得一行。我已经在SQL Server 2016 …

2
安装后配置管理器中缺少“ SQL Server网络配置”节点
我有一台运行Windows 2012 R2 Datacenter 64位的服务器。我使用的是SQL 2016 RC3,没有问题,我想将其替换为MSDN上的RTM版本。 卸载RC3,然后安装RTM之后,我无法远程连接到服务器。经过检查,我发现在Configuration Manager中没有“ SQL Server网络配置”的节点。列出了32位版本,并启用了TCP / IP。如何安装此丢失的节点? 我已启动SQL Browser服务,并尝试修复2016安装。似乎没有什么能使这个缺失的成分复活。 我发现有趣的是,有些RC3和RTM安装遗留下来的无法卸载。我不确定这是否相关。我按照Microsoft有关卸载SQL Server的说明进行操作,所以我觉得我做对了所有事情。

2
添加两列时查询不响应
当我在选择中添加两列时,查询没有响应。列的类型是nvarchar(2000)。这有点不寻常。 SQL Server版本为2014。 只有一个主索引。 整个记录只有1000行。 这是之前的执行计划(XML showplan): 之后的执行计划(XML showplan): 这是查询: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < Batch_Tasks_Queue.Finish_Time and Batch_Tasks_Queue.id <> btq.id and btq.Start_Time is not null and btq.State …

2
sp_msforeachdb在后台如何工作?
我需要解决我遇到的问题,并且需要一些帮助来了解sp_msforeachdb的工作方式以解决我的问题。 每次我运行sp_msforeachdb时,都会发生错误 Msg 102, Level 15, State 1, Incorrect syntax near '61' 我的代码示例如下: EXEC SP_msforeachdb 'SELECT ''?'' AS Database FROM ?.sys.objects WHERE name like ''%aetna%'' 但是,我将什么查询作为sp_msforeachdb的参数并不重要。每次我遇到相同的错误。我确实有一个以'61s1d'开头的数据库,所以我认为它的数据库名称有问题,但是老实说我不知道​​sp_msforeachdb的幕后情况。 注意事项。 它是唯一一个以数字开头的数据库 我可以尝试使用“如果数据库像'%61%'那样不要执行......”之类的代码,但是仍然会出现相同的错误。 我无法测试更改数据库名称的情况-与之连接的东西太多了。 如果我创建一个以“ 51”开头的测试数据库,那么我也会得到该数据库的错误 我该如何克服?

2
> =和>的步内统计值的基数估计
我正在尝试了解SQL Server如何尝试估计SQL Server 2014中的“大于”和“大于等于” where子句。 我想我确实了解基数估算,例如当我踏上台阶时 select * from charge where charge_dt >= '1999-10-13 10:47:38.550' 基数估计为6672,可以很容易地计算为32(EQ_ROWS)+ 6624(RANGE_ROWS)+ 16(EQ_ROWS)= 6672(以下屏幕截图中的直方图) 但是当我这样做 select * from charge where charge_dt >= '1999-10-13 10:48:38.550' (将时间增加到10:48,所以不是一步) 估计是4844.13。 该如何计算?


1
表存储的层次结构中的层次结构权限
假设以下数据库结构(如有需要,可以修改)... 我正在寻找一种确定给定页面上给定用户的“有效权限”的好方法,该方法允许我返回包含Page和有效权限的行。 我认为理想的解决方案可能包括使用CTE来执行递归的功能,以评估当前用户给定页面行的“有效权限”。 背景和实施细节 上面的架构表示内容管理系统的起点,在其中可以通过将用户添加到角色或从角色中删除来授予用户权限。 系统中的资源(例如页面)与角色关联,以授予链接到该角色的用户组所授予的权限。 这个想法是能够通过简单地拒绝所有角色并将树中的根级别页面添加到该角色,然后将用户添加到该角色来轻松锁定用户。 当(例如)为公司工作的承包商长期不可用时,这将允许许可结构保留在原位,然后通过简单地从该角色中删除用户,也将允许相同的原始权限授予。 权限基于典型的ACL类型规则,遵循这些规则可能适用于文件系统。 CRUD权限应为可为空的位,因此,在满足以下条件的情况下,可用值是true,false和未定义: 假+任何东西=假 正确+未定义=正确 真+真=真 未定义+未定义=未定义 如果任何权限为假->假 否则为true-> true 其他(所有未定义)-> false 换句话说,除非您通过角色成员资格授予任何权限,并且拒绝规则将覆盖允许规则,否则您将无任何权限。 应用于此权限的“集合”是指直到当前页面并包括当前页面的所有应用于树的权限,换句话说:如果将false应用于应用于此页面的树中任何页面的任何角色,则结果为false ,但是如果未定义到此处的整个树,则当前页面包含true规则,则此处的结果为true,但对父级而言将为false。 如果可能的话,我想宽松地保留db结构,同时请记住,我的目标是能够执行以下操作:select * from pages where effective permissions (read = true) and user = ?因此,任何解决方案都应能够使我拥有一个具有有效权限的可查询集。以某种方式(只要可以指定条件,返回它们是可选的)。 假设存在2个页面,其中1个是其他角色的子代,并且存在2个角色,一个用于admin用户,一个用于只读用户,这两个页面都仅链接到根级别页面,我希望看到这样的内容作为预期的输出: Admin user: Id, Parent, Name, Create, Read, Update, Delete 1, null, Root, True …

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.