标签: dynamic-sql

PostgreSQL将列转换为行?移调?

我有一个PostgreSQL函数(或表),它给我以下输出:

Sl.no    username    Designation    salary   etc..
 1        A           XYZ            10000    ...
 2        B           RTS            50000    ...
 3        C           QWE            20000    ...
 4        D           HGD            34343    ...
Run Code Online (Sandbox Code Playgroud)

现在我想要输出如下:

Sl.no            1       2        3       4       ...
 Username        A       B        C       D       ...
 Designation     XYZ     RTS      QWE     HGD     ...
 Salary          10000   50000    20000   34343   ...
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

sql postgresql pivot-table dynamic-sql crosstab

25
推荐指数
4
解决办法
5万
查看次数

如何连接到名称在另一个表中存储为值的表?

Ι有一些表(例如[Table1],[Table2],[Table3]等)与[ID]作为主键和一个RecTime作为DATETIME每个.

ΑlsoΙ有一个表[Files],用于保存varbinary(max)列中的文件,并引用具有其名称和ID的其他表.

[Table2],[Table3]和其他人有不同的结构,但完全分享[ID][RecTime][Table1]

以下是可视化数据的快速示例.

DECLARE @Table1 as table (
      [ID] [bigint]
    , [RecTime] [datetime]
)
DECLARE @Table2 as table (
      [ID] [bigint]
    , [RecTime] [datetime]
)
DECLARE @Table3 as table (
      [ID] [bigint]
    , [RecTime] [datetime]
)

DECLARE @Files as table (
      [ID] [bigint]
    , [tblName] nvarchar(255) NULL
    , [tblID] bigint NULL
    , [BinaryData]  varbinary(max)
    /* …
Run Code Online (Sandbox Code Playgroud)

sql sql-server cursors dynamic-sql sql-server-2012

24
推荐指数
3
解决办法
2976
查看次数

PostgreSQL - 动态值作为表名

可能重复:
Postgres动态查询功能

我希望使用下面查询中返回的字符串作为其他查询的表名.

SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')
Run Code Online (Sandbox Code Playgroud)

如你所见,它返回一个字符串.我希望将它用作另一个查询的输入,例如

CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) 
AS * SELECT FROM backup
Run Code Online (Sandbox Code Playgroud)

可以吗?有什么线索怎么样?

sql postgresql dynamic-sql postgresql-9.1

21
推荐指数
1
解决办法
2万
查看次数

postgres中的动态sql查询

我试图使用动态SQL在postgres中运行一些查询.

例:

EXECUTE format('SELECT * from result_%s_table', quote_ident((select id from ids where condition = some_condition)))
Run Code Online (Sandbox Code Playgroud)

我必须查询一个表,其格式为result_%s_table,其中,我需要用另一个表替换正确的表名(一个id).

我收到了错误 ERROR: prepared statement "format" does not exist

链接:使用查询结果postgresql进行字符串替换

postgresql dynamic-sql psql

20
推荐指数
3
解决办法
5万
查看次数

从SQL 2008中的外键关系生成删除语句?

是否可以通过脚本/工具基于表fk关系生成删除语句.

即我有表:DelMe(ID)并且有30个表格,其中我需要首先删除其ID的fk引用,是否有一些我可以运行的工具/脚本将生成基于FK关系的30个删除语句为了我 ?

(顺便说一下我知道关于级联删除的关系,我不能在这个现有的db中使用它)

我正在使用Microsoft SQL Server 2008

sql code-generation foreign-keys dynamic-sql

19
推荐指数
2
解决办法
3万
查看次数

在PostgreSQL中动态生成交叉表的列

我试图crosstab在PostgreSQL中创建查询,以便它自动生成crosstab列而不是硬编码.我编写了一个函数,可以动态生成我的crosstab查询所需的列列表.我们的想法是crosstab使用动态sql 在查询中替换此函数的结果.

我知道如何在SQL Server中轻松完成这项工作,但我对PostgreSQL的了解有限,阻碍了我在这方面的进展.我正在考虑将生成动态列列表的函数结果存储到变量中,并使用它来动态构建sql查询.如果有人可以指导我这样做会很棒.


-- Table which has be pivoted
CREATE TABLE test_db
(
    kernel_id int,
    key int,
    value int
);

INSERT INTO test_db VALUES
(1,1,99),
(1,2,78),
(2,1,66),
(3,1,44),
(3,2,55),
(3,3,89);


-- This function dynamically returns the list of columns for crosstab
CREATE FUNCTION test() RETURNS TEXT AS '
DECLARE
    key_id int;
    text_op TEXT = '' kernel_id int, '';
BEGIN
    FOR key_id IN SELECT DISTINCT key FROM test_db ORDER BY key LOOP …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql crosstab plpgsql postgresql-9.1

19
推荐指数
2
解决办法
2万
查看次数

T-SQL动态SQL和临时表

看起来像使用动态SQL通过EXECUTE字符串方法创建的#temptables具有不同的范围,并且不能被同一存储过程中的"固定"SQL引用.但是,我可以在子序列动态SQL中引用由动态SQL语句创建的临时表,但似乎存储过程不会将查询结果返回给调用客户端,除非修复了SQL.

一个简单的2表场景:我有2个表.我们称之为订单和物品.Order具有OrderId的主键,而Items具有ItemId的主键.Items.OrderId是标识父订单的外键.订单可以包含1到n个项目.

我希望能够为用户提供一个非常灵活的"查询构建器"类型界面,以允许用户选择他想要查看的项目.过滤条件可以基于Items表和/或父Order表中的字段.如果一个项满足过滤条件包括和父条件中的条件(如果存在),那么该项应该在查询中返回以及父订单.

通常,我想,大多数人会在Item表和父Order表之间构造一个连接.我想改为执行2个单独的查询.一个返回所有符合条件的项目,另一个返回所有不同的父订单.原因有两个,你可能会也可能不会同意.

第一个原因是我需要查询父Order表中的所有列,如果我执行单个查询将Orders表连接到Items表,我将多次重新发布Order信息.由于每个订单通常有大量商品,我想避免这种情况,因为这会导致更多的数据被转移到胖客户端.相反,如上所述,我想在数据集中单独返回两个表,并使用其中的两个表来填充自定义Order和子Items客户端对象.(我对LINQ或Entity Framework还不够了解.我手工构建了我的对象).

我希望做的是这样的:

在客户端上构造一个动态SQL字符串,它将orders表连接到Items表,并根据在Winform胖客户端应用程序上创建的自定义过滤器指定的每个表上的过滤器.客户端上的SQL构建看起来像这样:

TempSQL = "

    INSERT INTO #ItemsToQuery
       OrderId, ItemsId
    FROM
       Orders, Items 
    WHERE
       Orders.OrderID = Items.OrderId AND
       /* Some unpredictable Order filters go here */
      AND
       /* Some unpredictable Items filters go here */
    "
Run Code Online (Sandbox Code Playgroud)

然后,我会调用一个存储过程,

CREATE PROCEDURE GetItemsAndOrders(@tempSql as text)
   Execute (@tempSQL) --to create the #ItemsToQuery table

SELECT * FROM Items WHERE Items.ItemId IN (SELECT ItemId FROM #ItemsToQuery)

SELECT * FROM Orders WHERE Orders.OrderId IN (SELECT DISTINCT OrderId FROM #ItemsToQuery)
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于,#ItemsToQuery表由于它是由动态SQL创建的,因此无法从以下2个静态SQL中访问,如果我将静态SQL更改为动态,则不会将结果传递回胖客户端.

我想到了一个更好的一个: …

t-sql sql-server stored-procedures dynamic-sql temp-tables

17
推荐指数
3
解决办法
5万
查看次数

即席查询与存储过程对比动态SQL

即席查询与存储过程对比动态SQL.任何人都可以说利弊吗?

sql stored-procedures adhoc-queries dynamic-sql

17
推荐指数
1
解决办法
2万
查看次数

为PostgreSQL中的记录变量动态传递列名

使用PostgreSQL,第一条记录的表中的列值存储在记录变量中.例如:让变量为:recordvar

recordvar.columnname
Run Code Online (Sandbox Code Playgroud)

给出指定列名的值.我将columname在变量中定义:

var := columnname
Run Code Online (Sandbox Code Playgroud)

在地方columnname,如果我与变量如更换recordvar.var,这是行不通的.

请让我知道如何处理这种情况.以下是示例代码:

CREATE OR REPLACE FUNCTION getrowdata(id numeric, table_name character varying)
RETURNS SETOF void AS
$BODY$ 
DECLARE

srowdata record;
reqfield character varying;
value numeric;


BEGIN

RAISE NOTICE 'id: %',id; 
reqfield:= 'columnname';

EXECUTE 'select * from datas.'||table_name||' WHERE id = '||id into srowdata;

RAISE NOTICE 'srowdata: %',srowdata; 

RAISE NOTICE 'srowdatadata.columnname: %',srowdata.columnname;

value:= srowdata.reqfield;

RAISE NOTICE 'value: %',value;


END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
Run Code Online (Sandbox Code Playgroud)

postgresql types dynamic-sql plpgsql hstore

17
推荐指数
1
解决办法
2万
查看次数

处理PostgreSQL异常的优雅方式?

在PostgreSQL中,我想创建一个安全包装机制,如果发生异常,它将返回空结果.考虑以下:

SELECT * FROM myschema.mytable;
Run Code Online (Sandbox Code Playgroud)

我可以在客户端应用程序中进行安全包装:

try {
    result = execute_query('SELECT value FROM myschema.mytable').fetchall();
}
catch(pg_exception) {
    result = []
}
Run Code Online (Sandbox Code Playgroud)

但我可以直接在SQL中做这样的事情吗?我想使下面的代码工作,但似乎它应该被放入DO $$ ... $$块中,在这里我迷路了.

BEGIN
    SELECT * FROM myschema.mytable;
EXCEPTION WHEN others THEN
    SELECT unnest(ARRAY[]::TEXT[])
END
Run Code Online (Sandbox Code Playgroud)

sql postgresql exception-handling dynamic-sql plpgsql

17
推荐指数
1
解决办法
2万
查看次数