SELECT FROM table WHERE列IS DEFAULT?

时间:2015-03-26 13:51:55

标签: sql postgresql select

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

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

有没有办法避免使用pg_catalog

2 个答案:

答案 0 :(得分:2)

我知道它很难看:)但它是文本的实例:

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)

参考更新 from docs:

  

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

答案 1 :(得分:-1)

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

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

@Value:您的默认值

@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