将SQL Server存储过程转换为PostgreSQL存储过程

时间:2013-06-05 10:43:56

标签: sql sql-server-2008 postgresql stored-procedures

我是PostgreSQL数据库的新手,我在SQL Server 2008中开发数据库对象,但我也需要对PostgreSQL进行一些操作。

在这里,我编写了一个SQL Server的示例存储过程,我需要将其转换为PostgreSQL。请用PostgreSQL帮助我。

提前致谢。

下面是示例SQL Server存储过程:要求转换为PostgreSQL存储过程

CREATE PROCEDURE [dbo].[usp_GetData_ByTableName]
(
    @TableName NVARCHAR(MAX)    
    ,@IncludeKeepAlive BIT
    ,@RowsAffected BIGINT=0 OUTPUT
) AS

BEGIN

    SET NOCOUNT ON
    DECLARE @SQL VARCHAR(MAX)

    /****************************************************************
    Select data base on parameter.
    *****************************************************************/                          
    SET @SQL =
    '
        SELECT *FROM '+@TableName+' 
        WHERE 1=1
    '
    +
    CASE WHEN (@IncludeKeepAlive = 0)
        THEN
            '
                AND [MessageTransactionID] <> 152
            '
        ELSE
            ''
    END     

    EXECUTE SP_EXECUTESQL @SQL

    RETURN 0  
END

2 个答案:

答案 0 :(得分:3)

从MS SQL到PostgreSQL没有1:1的“转换”。

概念完全不同。

我强烈建议简单地重新实现功能并利用PostgreSQL所具有的功能,而不是试图模仿SQL Server。

当人们试图将一个DBMS的技术解决方案移植到另一个DBMS时,他们通常会遇到一些速度慢而且无法扩展的东西(对Oracle来说也是如此 - &gt; SQL服务,SQL Server - &gt; Oracle,DB2 - &gt; Oracle和SQL Server - &gt; PostgreSQL也是如此。)

阅读有关存储功能的手册(PG没有“程序”)重新阅读当前解决方案的规范,然后使用Postgres提供的功能简单地实现它。

我确信这不是你想要的答案,但我坚信这是唯一可行的方法。

答案 1 :(得分:2)

鉴于你的评论

  

动态传递表名,它将执行动态查询。我有天智的桌子。

我想说你想看一下: