如何修复损坏的SQL视图

时间:2011-11-16 11:19:50

标签: mysql view

我使用的是开源CMS pimcore(http://www.pimcore.org),它运行在MySQL后端。

它使用相当复杂的视图来表示对象,并且当视图引用的另一个表中的列被重命名时,其中一个视图在某个阶段已被破坏。每当我尝试通过SQL命令与表进行交互时,我都会收到错误:

  

查看'barriste_website.object_6'引用无效表格或   列或功能或定义者/调查者缺乏使用权   它们

我想简单地更新视图以引用重命名的列,但是在开始讨论之前我需要知道视图的当前结构 - 一旦它被破坏,我究竟如何检索视图的结构?我试过了

SHOW CREATE VIEW object_6

但我收到同样的错误。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:26)

<强> MySQL的:

SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';

参考:The INFORMATION_SCHEMA VIEWS Table

SQL Server:

USE databasename
GO

EXEC sp_helptext viewName

或者像这样的查询:

SELECT TABLE_NAME as ViewName,
VIEW_DEFINITION as ViewDefinition
FROM INFORMATION_SCHEMA.Views

您可以在其中添加WHERE以仅检索一个视图

答案 1 :(得分:6)

只需使用“drop view object_6”删除视图,然后进入pimcore后端并再次保存该类。然后自动重新生成视图。

答案 2 :(得分:0)

在我的情况下,罪魁祸首是使用ORDER BY alias 引起问题。我从以下位置改变了看法:

CREATE VIEW v_storename_totalnamelength AS
SELECT
  (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) AS `TotalNameLength`
FROM
  `promoter`.`v_storename_extracted` `a`
ORDER BY
  `TotalNameLength` DESC
;

收件人:

CREATE VIEW v_storename_totalnamelength AS
SELECT
  (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) AS `TotalNameLength`
FROM
  `promoter`.`v_storename_extracted` `a`
ORDER BY
  (char_length(`a`.`ExtractedLongName`) + char_length(`a`.`ExtractedLongName`)) DESC
;