【问题标题】:Find all tables given column name查找给定列名的所有表
【发布时间】:2014-05-05 19:48:04
【问题描述】:

我正在使用一段代码(通过 Excel VBA),它似乎在互联网上的几个地方。目的是查找包含某个字段/列的所有表。

这是我的 SQL 字符串:

SELECT t.name AS table_name, 
       SCHEMA_NAME(schema_id) AS schema_name, 
       c.name AS column_name FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE c.name LIKE 'MyCol' 
ORDER BY schema_name, table_name;

这适用于大多数表格,但不适用于视图。有没有办法在视图中查看?

如果有人有任何想法,我非常感谢您的反馈。我希望这一切都有意义,因为我对 SQL 还很陌生,但我从事 VBA 已经很长时间了。提前非常感谢!

【问题讨论】:

  • 请注意,此 sql 对于 SQL 注入攻击已经成熟。改用参数化的 sql 查询。
  • @paqogomez 是不是有点偏执?它是一个管理脚本,如果不暴露在外部世界怎么可能容易受到注入攻击?
  • @dean 我明白你在说什么,但我同意@paqogomez。 OP 没有说明此脚本的用法,并且传入 % 实质上将执行数据库的完整模式转储。根据服务器存储的信息,这可能会产生巨大的安全问题。最好以安全的方式编写所有查询,而不是养成在字符串中使用直接注入的习惯。
  • 对不起,我对注入攻击有点迷茫。我将尝试阅读一些关于它以及参数化 sql 查询的含义的内容。感谢您的回复。
  • 我不确定这是否有助于澄清任何事情,但我确实想了解更多关于负责任的信息,因为我不想无意中编写会导致崩溃或损害数据的内容。

标签: sql sql-server vba


【解决方案1】:

使用sysobjects 而不是systables

sysobjects 是大多数基于 DML 的对象(触发器除外),而 systables 则很好......表

http://technet.microsoft.com/en-us/library/ms190324.aspx

并小心 sys.objects 与 sysobjects。

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/a965676e-d4d9-4365-ad0a-58ca26ec4701/differenece-between-sysobjects-and-sysobjects-in-sql-server-2005-?forum=sqlkjmanageability

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多