我记得在为信息服务硕士学生开设的 DBMS 课程中学习过这样做。为了节省一些输入,您可以输入:
SELECT t1.id, t2.stuff
FROM
someTable t1
INNER JOIN otherTable t2
ON t1.id=t2.id
;
Run Code Online (Sandbox Code Playgroud)
但是......为什么这在存储过程等中是可以接受的?似乎它所做的只是损害了语句的可读性,同时节省了极少的时间。这样做是否有任何功能或逻辑原因?它似乎增加了歧义而不是消除它;我可以看到使用这种格式的唯一可接受的原因是,如果您添加了一个语义上有意义的别名——例如FROM someTable idsTable——当表名不够描述时。
表别名是不好的做法还是只是滥用有用的系统?
我们正在使用来自供应商应用程序的数据库设置,该应用程序很难读取数据库表名,并且没有关于存储位置的文档。我可以理解为什么人们可能想要在专有应用程序中混淆他们的表结构,但该应用程序(企业资源规划)的卖点之一是它的可定制性。
表名类似于 aptrx(Accounts Payable Transactions)和 apmaster_all(奇怪的是,这是 vendor 表)。这是一个极其复杂的数据库,所以我想知道这个约定是否有任何逻辑,或者它是否只是被有意或以其他方式混淆。
据我所知,表名的长度不会显着影响性能,对吗?数据库非常复杂(数百个表),所以排序是有道理的,但我无法想象为什么 AccountsPayableTransactions 不如 aptrx ....
它的情况是IDENTITY_INSERT只能在一个数据库表在时间设置为ON,但为什么呢?由于IDENTITY列不是全局唯一的,我想不出将身份同时插入多个表可能会导致的任何危险情况(至少不会比通常使用 IDENTITY INSERT 捏造更危险)。
IDENTITY INSERT 应该很少使用,但是硬限制的原因是什么?
我收到以下关于我在程序中运行的 SQL 查询的错误消息。SQL Server 2005 T-SQL。
异构查询需要为连接设置
ANSI_NULLS和ANSI_WARNINGS选项。这确保了一致的查询语义。启用这些选项,然后重新发出您的查询。(严重性 16)
修复它很容易,设置ANSI_NULLS和ANSI_WARNINGS ON,但我想知道异构查询是什么。谷歌搜索带来了几十个结果,告诉我设置ANSI_NULLS和ANSI_WARNINGS,没有解释这个词的意思。查询是:
UPDATE SRV.DB.DBO.TABLE SET Column=
(SELECT Column
FROM SRV1.DB.DBO.TABLE)
Run Code Online (Sandbox Code Playgroud)
我认为这是由于在一个查询中连接到多个数据库引擎,否则我从未遇到过此错误。
“异构”是否只是指在这种情况下查询两个不同的数据库引擎?
每当我在 SQL Server Management Studio 2008(数据库是 SQL Server 2005)的表中手动插入一行时,我的新行就会出现在列表的顶部而不是底部。我正在使用身份列,这会导致诸如
id row
42 first row
1 second row
2 third row
Run Code Online (Sandbox Code Playgroud)
当获取行且未明确排序时。当为 Web 应用提取行并更改TOP 1查询返回的内容时,这会导致不同的外观。
我知道我可以order by,但为什么会发生这种情况?我的大部分数据都是通过 Web 应用程序插入的,从该应用程序插入的所有数据都按照先进先出的顺序进行,例如,最新的插入位于底部,因此 ID 都在一行中。服务器或 Management Studio 中是否有某些设置会导致这种不正确的排序?
customer_comments由于数据库设计,我将一些拆分为多行,对于报告,我需要将comments每个唯一的数据id合并为一行。我以前尝试过使用SELECT 子句和 COALESCE技巧中的此分隔列表进行一些操作,但我不记得它并且一定没有保存它。在这种情况下,我似乎也无法让它工作,似乎只能在一行上工作。
数据如下所示:
id row_num customer_code comments
-----------------------------------
1 1 Dilbert Hard
1 2 Dilbert Worker
2 1 Wally Lazy
Run Code Online (Sandbox Code Playgroud)
我的结果需要如下所示:
id customer_code comments
------------------------------
1 Dilbert Hard Worker
2 Wally Lazy
Run Code Online (Sandbox Code Playgroud)
所以对于每row_num一个实际上只有一行结果;注释应按 的顺序组合row_num。上面链接的SELECT技巧可用于将特定查询的所有值作为一行获取,但我无法弄清楚如何使其作为SELECT将所有这些行吐出的语句的一部分工作。
我的查询必须自己遍历整个表并输出这些行。我没有将它们组合成多列,每一行一个,所以PIVOT似乎不适用。
我正在创建一个网页,用于对即将到来的 2012 年欧洲足球锦标赛的所有比赛进行投注。需要一些帮助来决定在淘汰赛阶段采取什么方法。
我在下面创建了一个模型,当涉及到存储所有“已知”小组赛比赛的结果时,我非常满意。这种设计使得检查用户是否下注正确变得非常容易。
但是,存储四分之一决赛和半决赛的最佳方式是什么?这些比赛取决于小组赛的结果。
我想到的一种方法是将所有比赛添加到matches表中,但在淘汰赛阶段为主/客队分配不同的变量或标识符。然后有一些其他表,这些标识符映射到团队......这可以工作,但感觉不对。

将在 Microsoft SQL server 2008R2 中创建的物理数据库移动到SQL Azure 有什么含义,该数据库利用诸如对 varchar(MAX) FILESTREAM BLOBS 的全文搜索等高级功能?
需要进行哪些架构更改?这一转变涉及哪些步骤?SQL Azure 迁移向导不能简单地成为自动进行转换的神奇工具。迁移工具无法解决哪些兼容性问题,应该“手动”解决?
我有一个 .tdf SQL Server Profiler 跟踪模板,有人希望我运行,但该模板面向 SS 2008 R2。虽然我的 SSMS 是 2008 R2,但我需要跟踪的服务器是 SS 2005。当尝试跟踪服务器时,服务器类型被锁定(从实际服务器生成),所以我不能只选择我需要的模板,而它被标记为不同的SS版本..

如何更改交易模板所针对的服务器类型?我试过了,File > Templates > Edit Templates...但似乎没有办法改变这一点。是否可以更改目标服务器版本,或者是否必须从头开始重新进行整个跟踪?
我知道索引会降低数据修改性能,但我有一项任务,其中(几乎)所有更新都是按顺序对项目进行的。聚集索引会提高还是降低更新这些行的性能?
聚集索引将在列上id,其中id是一IDENTITY列。id因此永远不会改变并且将是连续的(此外,永远不应该删除行)。这是我的更新语句的格式:
UPDATE [table] SET value = 1
WHERE id IN (1,2,3,4...)
Run Code Online (Sandbox Code Playgroud)
然而,这些值不一定是连续的。IN (1,2,4,5)如果id=3未设置为更新,则也可以使用 的序列,但它们将始终按顺序排列。
当所有更新都按顺序进行时,聚集索引会提高还是降低性能?
假设我有一个聚集在PrimaryKey上的表,并且在所有情况下我都希望我的结果按PrimaryKey排序,所以我总是ORDER BY PrimaryKey在所有查询中。
这是否ORDER BY会以任何方式影响性能,还是由于行已经按此顺序被分析器忽略了?
我使用的是 SQL Server 2005 数据库。
我注意到,对于由我们的组织和我们的一些 ERA 软件提供商制作的 Crystal Reports,他们倾向于使用物理表作为他们报告的数据集,而不是使用视图或存储过程来收集数据。偶尔我看到报告使用存储过程,然后使用物理表而不是临时表来存储和操作数据集。在这些情况下,报告输出通常以类似rpt_ap_vendors或类似的表格形式存在,并且在不使用时可能没有数据,也可能没有数据。
这些总是按需生成报告的情况,因此这不是可以生成一次并多次提供报告的情况,并且没有多个报告/存储过程同时访问此数据。
像这样的报告使用物理表有什么理由?这样做是否有逻辑、技术或性能相关的原因?在生成报告时,我个人一直使用带有临时表或更好的派生表的视图和存储过程,以避免涉及清除/删除临时表的额外磁盘读取。
sql-server ×8
errors ×1
identity ×1
index ×1
mysql ×1
order-by ×1
performance ×1
profiler ×1
query ×1
reporting ×1
ssms ×1
terminology ×1
view ×1