如何阻止SQL Server Management Studio将"SELECT*"替换为列列表?

Ben*_*yre 5 sql-server ssms

SQL Server Mgmt Studio让我发疯.

如果我从表创建一个视图和SELECT'*',它就可以了,我可以保存视图.查看视图的SQL(例如,通过编写CREATE脚本)可以看出'SELECT*'确实保存在视图的SQL中.

但是只要我使用GUI重新打开视图(右键单击>修改),SELECT*就会替换为表中所有列的列列表.

如何阻止Management Studio执行此操作?我希望我的'SELECT*'保持这一点.

也许这只是谷歌搜索"SELECT*"的困难,这使我无法找到与此相关的任何东西(我确实把它放在双引号中).

请,我在Transact-SQL方面经验丰富,所以请不要给我讲一讲为什么我不应该使用SELECT*.我知道所有的利弊,我有时会使用它.它是一种语言功能,并且像所有语言功能都可以用于善或恶(我强调不同意它永远不适合使用它).

编辑:我正在给Marc答案,因为似乎无法关闭此行为.问题被认为是封闭的.我注意到企业管理器没有类似的东西.解决方法是将SQL编辑为文本,或转到Managment Studio以外的产品.或者不断编辑列列表,并在每次编辑视图时替换*.叹.

mar*_*c_s 3

当 SQL Server Mgmt Studio 创建视图时,我假设他们将 * 扩展为在特定时间基础表中存在的列的完整列表,正是出于以下原因:如果基础表之一发生更改怎么办?您是否希望新列只是简单地显示在引用该表的每个视图中?严重地???

我认为微软试图在这里实现“最不令人惊讶的元素”——你的视图将包含创建视图时出现的那些列——并且它会保持这种状态,除非你明确地、有意地改变它。

当基础表发生变化时,我不想让我的视图突然拥有比以前更多的列……你呢?

抱歉,我认为 Mgmt Studio 中没有任何设置可以关闭此行为。

  • 1. 他明确要求不要接受任何关于Select*的讲座。2. 您可以通过从右键菜单中选择“Script View As”而不是“Design”来避免自动扩展。3. 当需要将两个数据库链接在一起时,可以使用“Create View dbo.TableName AS Select * From OtherDatabase.dbo.TableName”。 (2认同)
  • 感谢您的回答。我认为到目前为止的共识是“不”。<rant> 是的,我确实希望新列能够简单地显示在我的视图中。这正是我想要的。我确实意识到新列的存在会“破坏”我的视图,直到我执行 sp_refreshview 来重新生成元数据。如果我的意思是“选择 Col1、Col2、Col3、...、ColN”,我会键入它,或者使用自动生成列表的多种方法之一。我的意思是“SELECT *”,但似乎 M$ ​​已经决定不再允许我使用这个有价值的语言功能。这就像 SQL-麦卡锡主义。</咆哮> (2认同)