SELECT FROM table WHERE column IS DEFAULT?



是否可以构建一个SELECT查询来选择某一列与默认值匹配的行?

它不需要是标准SQL,只需要PostgreSQL解决方案就可以了。

有没有办法避免使用pg_catalog

我知道它很难看:)但它是文本的工作示例:

create table t2 (i int,v text default 'Vao');
create table t3 (v text);
insert into t3 select 'Vao';
insert into t3 select 'Vao1';
td=# with n as (
    select column_default from 
        information_schema.columns 
    where 
        table_name  = 't2' and 
        column_name = 'v'
) select * from t3 join n on n.column_default = $$'$$||t3.v||$$'::text$$;
  v  | column_default
-----+----------------
 Vao | 'Vao'::text
(1 row)

参考更新来自文档:

可以为列指定默认值。当创建新行并且没有为某些列指定值时,这些列将填充相应的默认值。数据操作命令还可以明确请求将列设置为其默认值,而不必知道该值是

您可以在这里找到解决方案:

@ColsWhereCondition,@QUERY:我用它们来进行查询

@值:您的默认值

@TableName:表名

@TableSchema:架构名称

您可以将它与您的表或动态表一起使用代码:

DECLARE @ColsWhereCondition as nvarchar(max) = '';
DECLARE @Value as nvarchar(max) = '';
DECLARE @QUERY as nvarchar(max) = '';
DECLARE @TableName as nvarchar(max) = 'TblMalls';
DECLARE @TableSchema as nvarchar(max) = '';
SELECT @ColsWhereCondition = STUFF((SELECT ' OR CAST(' + QUOTENAME(COLUMN_NAME) + ' AS nvarchar) = CAST(''' + @Value + ''' AS nvarchar)'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName AND (@TableSchema = '' OR TABLE_SCHEMA = @TableSchema)
FOR XML PATH('')), 1, 3, '');
SET @QUERY = 'SELECT * from ' + @TableName + ' WHERE ' + ISNULL(@ColsWhereCondition, '1<>1');
SELECT @ColsWhereCondition 
SELECT @QUERY 
EXEC @QUERY

相关内容

最新更新