有没有办法查询 SSDT 项目以获取表或外键列表?类似于您可以对实际数据库执行的操作?
jmoreno's questions
我在工作中处理一个查询,它有一个左连接
cast(cola as varchar) + '-' + right('000' + cast(colb as varchar), 3) = x
此查询的实际执行计划相当接近,估计为 269,实际为 475。
将右 +padding 更改为使用 format(colb, '000') 会导致对行数的巨大错误估计,至少减少 400 万,这会导致查询花费 10-15 倍的时间。
我明白为什么错误估计会导致问题,但我不明白为什么使用 Format 会导致估计不太准确。
是否有返回所有可用属性名称的函数或系统视图?
我正在寻找MSDN OBJECTPROPERTY 页面上未列出的“SYSTEMDATAACCESS”和“USERDATAACCESS” 。我添加了关于它们的评论,但我想知道是否还有其他我不知道的...鉴于它是 SQL,我希望它们可以在某处作为可查询的元数据使用,但找不到任何东西。元数据中的属性是否在某处?
编辑:虽然它与我的问题并不相关,但这是系统数据访问的示例用法。 select OBJECTPROPERTY(OBJECT_ID('sys.dm_db_stats_properties'), 'SYSTEMDATAACCESS')
我正在使用 Microsoft SQL Server Migration Assistant v6(又名 SSMA)将数据库从 Access 更新到 SQL Server。我收到信息性消息“A2SS0029:索引名称‘名称’在转换期间已更改。”。
因为这些只是索引名称,所以这对我来说应该不会造成问题。但我确实想知道为什么必须更改名称。特别是因为我能够在迁移后手动创建具有给定名称的索引。
为什么要重命名索引名称?我是否认为这不会引起任何问题是错误的(假设我没有任何使用索引提示的查询,如果 Access 甚至可能的话)。
我正在处理涉及大量结构更改的脚本,并且喜欢在处理所有需要更改的内容时返回到“基本”条件,因此我将更改包含在开始/回滚事务中。
如果没有错误,这工作得很好,但是当我犯了一个错误(试图删除一个不存在的列或具有 FK 约束等)时,回滚不起作用。因此,我用 sp_rename 重命名的对象或我删除的列的名称错误/不存在。
假设这是有记录的/正确的行为,它在哪里记录?可能只是我的眼睛呆滞了……但我不记得/找不到任何说明失败导致提交的内容。
我知道 SQL Server 不支持使用视图作为外键约束的参考,这是有原因的(即与关系模型有关)吗?好像有用啊。。。。
这个问题指出,各种 DMV(动态管理视图)都需要“查看服务器状态”权限,但我找不到任何关于你做什么和不想授予权限的信息。
现在我当然了解“最少权限”,以及为什么您不想将其授予任何人,但我找不到任何关于如何评估是否应该授予它的指导。
所以,我的问题是:授予用户“查看服务器状态”权限的安全性和性能影响是什么。他们能做什么,他们可能不应该被允许做......
更新:一个暗示是用户将能够使用 DMV 来查看查询。如果查询或查询参数可能包含用户无法看到的机密信息,则允许查看服务器状态将允许他们这样做(即 dob = 或 ssn =)。
我有一个表,其中所有操作都会影响单行(插入和更新,没有删除,但如果有,它们也将是单独的)。我正在考虑在检查约束中使用 UDF,这样我可以确保字段值仅与另一个值结合使用(两个 FK,第一次使用 A=1,B=x 变得固定,所以如果x = 4 那么 A=1 永远不能与 B=3 或除 4 以外的任何东西匹配)。
除了插入/更新行时花费的额外时间之外,这样做的缺点是什么?
更新:该应用程序不提供在创建行后更改 A 列或 B 列的机制。