如何在 SQL Server 上进行内省?
我有一台带有供应商应用程序的服务器,该应用程序严重依赖数据库。我需要以自动方式对数据库中几个表中的数据进行一些细微的更改。只是插入和更新,没什么花哨的。供应商就是供应商,我永远无法确定他们在升级期间何时更改数据库的架构。
为此,我如何以某种可编写脚本的方式询问 SQL Server,“嘿,这个表还存在吗?是的,很酷,好的,但是它有这个列吗?它的数据类型和大小是什么?是吗?”可以为空吗?您能给我一个表列表吗?在这个表中,您能给我一个列列表吗?”我不需要对整个模式执行此操作,只需对其中的一部分执行此操作,只需在开始操作之前快速检查数据库即可。
目前我们使用的是 Microsoft SQL Server 2005,但它可能很容易迁移到 Microsoft SQL Server 2008。我在搜索时可能没有使用正确的术语。我确实知道 ORM 不仅开销太大对于这类事情,但我也没有机会向我的同事推销它。
I have a server with a vendor application which is heavily database-reliant. I need to make some minor changes to the data in a few tables in the database in an automated fashion. Just INSERTs and UPDATEs, nothing fancy. Vendors being vendors, I can never be quite sure when they change the schema of a database during upgrade.
To that end, how do I ask the SQL server, in some scriptable fashion, "Hey, does this table still exist? Yeah, cool, okay, but does it have this column? What's the data type and size on that? Is it nullable? Could you give me a list of tables? In this table, could you give me a list of columns? Any primary keys there?" I do not need to do this for the whole schema, only part of it, just a quick check of the database before I launch into things.
We have Microsoft SQL Server 2005 on it currently, but it might easily move to Microsoft SQL Server 2008. I am probably not using the correct terminology when searching. I do know that ORM is not only too much overhead for this sort of thing, but also that I have no chance of pitching it to my coworkers.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
查看Information_Schema 视图。
Check out the Information_Schema views.
运行如下所示的查询,从中您可以看到:
需要 SQL Server 2005+ 才能运行:
您可以删除 WHERE 上的注释以按架构/表/列进行过滤。
您还可以创建一个数据库触发器来提醒您发生更改:
这将让您看到对数据库所做的每个更改。
Run a query like the listed below, from it you can see:
Needs SQL Server 2005+ to run:
you can remove the comment on the WHERE to filter by schema/table/column.
You could also just create a database trigger to alert you of changes:
that will let you see every change made to the database.
要通过 SQL 执行此操作,请使用 INFORMATION_SCHEMA 视图。
要通过代码完成此操作,请查看 SQL Server 管理对象 (SMO):
http: //msdn.microsoft.com/en-us/library/ms162169.aspx
To do it through SQL, use the INFORMATION_SCHEMA views.
To do it through code, look at SQL Server Management Objects (SMO):
http://msdn.microsoft.com/en-us/library/ms162169.aspx