是否可以构建一个SELECT
查询来选择某列与默认值匹配的行?
它不需要是标准的SQL,只有PostgreSQL解决方案就可以了。
有没有办法避免使用pg_catalog
?
答案 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