列出SQL Server中具有默认值的所有字段的语句
发布时间:2024-01-16 20:17:27
专家解答
通过查询任何数据库中的三个系统表,你可以获得每个表的每一个字段的默认值。下面是这个核心查询。它返回分配给当前数据库中每个用户表的默认值。这个查询在SQL 2000和SQL 2005中都是兼容的。
Quote:
SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U'
ORDER BY SO.[name], SC.colid
sysobjects 为我们提供了表元数据。在这个例子中,我们只对表名称感兴趣。syscolumns 表存储与每个表的各个字段相关联的元数据。在这个例子中,我们只需要字段名称。最后,默认值元数据由syscomments表提供。
对Northwind数据库运行这个查询生成下面的结果(为了简短,省略了一些记录)。注意,因为LEFT JOIN到syscomments表所以它将返回NULL默认值。
现在我在想这个很好的基本查询版本有什么选择。。。
选择1:搜索特别的默认值
通过编辑WHERE条件语句,我们可以在所有的表中查看特别的默认值。
Quote:
SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U' AND SM.TEXT = '(0)'
ORDER BY SO.[name], SC.colid
选择2:只返回具有默认值字段的信息
修改核心查询的WHERE条件语句来忽略syscomments.text表中的NULL值,这个技巧如下所示:
Quote:
SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U' AND SM.TEXT IS NOT NULL
ORDER BY SO.[name], SC.colid
但是,将FROM条件从句中的JOIN从一个LEFT JOIN改为一个INNER JOIN会提供优化:
Quote:
SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
INNER JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U'
ORDER BY SO.[name], SC.colid
其实还有另一个选择,利用SQL 2005中的系统目录视图。前面的查询给我提供了这时所需要的信息,并在SQL 2000和SQL 2005中都可以使用,在SQL2000实例中可以挖掘出与这个默认值(实际上是一个默认约束)关联的额外元数据。通过将这个查询特定在系统目录视图上,我们可以获得在之前的查询中没有显示出来的额外信息。
Quote:
SELECT ST.[name] AS "Table Name", SC.[name] AS "Column Name", SD.definition AS "Default Value", SD.[name] AS "Constraint Name"
FROM sys.tables ST INNER JOIN sys.syscolumns SC ON ST.[object_id] = SC.[id]
INNER JOIN sys.default_constraints SD ON ST.[object_id] = SD.[parent_object_id] AND SC.colid = SD.parent_column_id
ORDER BY ST.[name], SC.colid
所以记住,就因为你被告知没有更好的方法,依靠你作为一个数据库管理员的本能来钻研。你永远不会知道你可能会得到些什么。
猜你喜欢
- 由 于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间。
- 关于段落<p></p>相信大家已经都在自己的工作中开始关注并应用了。因为那真的是非常简单的事,只要你愿意你随时都可以
- 最近去公司,连续几天被保安查健康码,觉得他们效率有点慢,排了长队,回到家就来兴致,写了个简易的健康码识别系统(主要是针对上海的健康码 随申码
- 数据库基本操作在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写
- 最简单、直观的认识,将 yield 看做 return 对待,只是 return 返回一个值,而 yield 返回一个生成器。要理解 yie
- 判断python中的一个字符串是否为空,可以使用如下方法1、使用字符串长度判断len(s) ==0 则字符串为空#!/user/local/
- 本文实例讲述了PHP中使用addslashes函数转义的安全性原理分析。分享给大家供大家参考。具体分析如下:先来看一下ECshop中adds
- 插值对于一些时间序列的问题可能比较有用。Show the code directly:import numpy as npfrom matp
- 原来看过MYSQL同步数据的实现,可是自己还没有动过手,今天没什么事就玩一玩,正好在旁边有另一台空电脑,都在同一个路由器下。哈哈,正好。 不
- 我就废话不多说了,直接上代码吧!# -*- coding: utf-8 -*-import pandas as pdimport matpl
- CategoricalDtype自定义排序当我们的透视表生成完毕后,有很多情况下需要我们对某列或某行值进行排序。排序有很多种方法。例如sor
- 首先这个bak文件是SQL数据库的备份文件,要使用SQL恢复然后就可以查询了找到需要的文件注意解压出来有7GB+1、下载SQL server
- 代码: import os while True: dynamic = input('输入计算表达式:') if dynam
- 项目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master这个de
- 好东西找起来很麻烦,好用的又不太容易找到,之前看到很多用JS写的,固定漂浮这种效果拖动时难免会产生抖动,自己对CSS还是蛮有好感的,找来找去
- 前言在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引
- 前言最近有人在Twisted邮件列表中提出诸如"为任务紧急的人提供一份Twisted介绍"的需求。值得提前透露的是,这个
- # 查看下centos7.6上的python版本[root@registry ~]# cat /etc/redhat-releaseLinu
- CSV文件是一种纯文本文件,它使用特定的结构来排列表格数据。CSV文件内容看起来应该是下面这样的:column 1 name,column
- python保存图片时和原图大小一致之前遇到过一次这个问题,当时解决了但是忘了记录,这里再记录一次好了。1. matplotlib系列的整体