2016-03-17 119 views
0

SQL Server中有这个脚本需要在PostgreSQL中转换。 下面是脚本:将SQL Server脚本转换为PostgreSQL

UPDATE Categories_convert SET Categories_convert.ParentID = 
Categories_convert_1.CategoryID 
FROM Categories_convert LEFT OUTER JOIN Categories_convert AS 
Categories_convert_1 ON Categories_convert.MainGroupID_FK = 
Categories_convert_1.MainGroupID 
WHERE (((Categories_convert.Level)=2)); 

然后我试图将其转换为Postgres的。下面是该脚本:

UPDATE x_tmp_categories_convert SET orig.parentid = 
cat2.categoryid 
FROM x_tmp_categories_convert LEFT OUTER JOIN x_tmp_categories_convert AS 
cat2 ON x_tmp_categories_convert.maingroupid_fk = 
x_tmp_categories_convert.maingroupid 
WHERE (((cat.level)=2)); 

请注意,我已经创建的表Categories_convert的SQLServer的到PostgreSQL,并更名为x_tmp_categories_convert。 postgresql中的所有字段都是小写字母。

现在的问题是,当我执行该脚本转换到PostgreSQL,就会发生错误:

ERROR: table name "x_tmp_categories_convert" specified more than once SQL state: 42712

我做错了在转换?

UPDATE:

我已经试过@a_horse_with_no_name的答案,但它并没有在所有的更新记录。字段字段仍为空。它应该基于maingoupid_fk映射该类别的所有参数。

下面是执行建议脚本后的​​记录快照。 由于披露原因,我选择了名称。

Records snapshot link

更新版: 我使用PHP来迁移数据,以便原谅我使用的变量。 下面是执行质疑更新脚本之前使用的2个INSERT语句:

INSERT INTO x_tmp_categories_convert(maingroupid,name,vendorid,level,parentid) 
VALUES ($id,'$mainGroup',$vendorID,1,Null); 

INSERT INTO x_tmp_categories_convert(subgroupid,maingroupid_fk,name,vendorid,level) 
VALUES ($id,'$mainGroupId','$subGroup',$vendorID,2); 

而且,这是x_tmp_categories_convert表的表定义:

CREATE TABLE x_tmp_categories_convert 
(
    categoryid serial NOT NULL, 
    parentid double precision, 
    name character varying(255), 
    level double precision, 
    vendorid double precision, 
    maingroupid integer, 
    subgroupid integer, 
    maingroupid_fk integer, 
    pageid integer, 
    subgroupid_fk integer, 
    CONSTRAINT code_pk PRIMARY KEY (categoryid) 
) 
WITH (
    OIDS=FALSE 
); 

UPDATE V3: 已经求解a_horse_with_no_name。谢谢

+0

请将示例数据和表格定义添加为_formatted_文本(理想的SQL插入语句),[请不要截图](http://meta.stackoverflow.com/questions/285551/why-may-i-not上传图像的代码的时候,问一个问题/ 285557#285557) –

+0

我已经添加了额外的信息的问题。 – ExcellenceIsLife

+0

@a_horse_with_no_name:我已经更新了这个问题。请 – ExcellenceIsLife

回答

0

我已编辑@a_horse_with_no_name的答案,并使其工作。我想这只是一个复制粘贴错误。

下面是最终脚本:

UPDATE x_tmp_categories_convert 
    SET parentid = cat.categoryid 
FROM x_tmp_categories_convert AS cat 
WHERE x_tmp_categories_convert.maingroupid_fk = cat.maingroupid 
AND x_tmp_categories_convert.level = 2; 

对于@a_horse_with_no_name,我很感谢你,因为我不能想出没有你的帮助的解决方案。为你+1人。谢谢

+0

我删除了我的答案,因为它没有解决您的问题。 –

+0

@a_horse_with_no_name:虽然可以。我只是认为它是解决我的问题的垫脚石。在你回答我的线索之前,我不知道我可以在不加入表格的情况下做一个简单的脚本。还有一件事,你的回答是正确的。你只需复制粘贴错误1个词在你的解决方案。我只是将其更改为“x_tmp_categories_convert.level = 2”,而不是“cat.level = 2”。所以,我非常确定这是你回答我的问题时的意思。谢谢 – ExcellenceIsLife

+0

@a_horse_with_no_name:另外,请再次添加您的答案,以便我可以将其标记为答案。 – ExcellenceIsLife