2012-02-29 132 views
0

我在將mysql插入語句轉換爲sql server 2008時出現錯誤。 因爲限制和別名不起作用,有人可以告訴我我在做下面的查詢時做錯了什麼。將mysql插入語句轉換爲sql server插入語句?

insert into account (product_cd, cust_id, open_date, 
    last_activity_date, status, open_branch_id, 
    open_emp_id, avail_balance, pending_balance) 
select a.prod_cd, c.cust_id, a.open_date, a.last_date, 'ACTIVE', 
    e.branch_id, e.emp_id, a.avail, a.pend 
from customer c cross join 
(select b.branch_id, e.emp_id 
    from branch b inner join employee e on e.assigned_branch_id = b.branch_id 
    where b.city = 'Woburn' limit 1) e 
    cross join 
(select 'CHK' prod_cd, '2000-01-15' open_date, '2005-01-04' last_date, 
    1057.75 avail, 1057.75 pend union all 
    select 'SAV' prod_cd, '2000-01-15' open_date, '2004-12-19' last_date, 
    500.00 avail, 500.00 pend union all 
    select 'CD' prod_cd, '2004-06-30' open_date, '2004-06-30' last_date, 
    3000.00 avail, 3000.00 pend) a 
where c.fed_id = '111-11-1111'; 

錯誤

Msg 102, Level 15, State 1, Line 9 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 14 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 24 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 29 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 39 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 46 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 56 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 59 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 69 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 74 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 84 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 87 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 97 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 102 
Incorrect syntax near 'a'. 
Msg 102, Level 15, State 1, Line 112 
Incorrect syntax near 'limit'. 
Msg 102, Level 15, State 1, Line 119 
Incorrect syntax near 'a'. 

編輯:

create table account 
(account_id integer not null identity, 
    product_cd varchar(10) not null, 
    cust_id integer not null, 
    open_date date not null, 
    close_date date, 
    last_activity_date date, 
    status char(5) not null check(status in ('ACTIVE','CLOSED','FROZEN')), 
    open_branch_id smallint , 
    open_emp_id smallint , 
    avail_balance decimal(10,2), 
    pending_balance decimal(10,2), 
    constraint fk_product_cd foreign key (product_cd) 
    references product (product_cd), 
    constraint fk_a_cust_id foreign key (cust_id) 
    references customer (cust_id), 
    constraint fk_a_branch_id foreign key (open_branch_id) 
    references branch (branch_id), 
    constraint fk_a_emp_id foreign key (open_emp_id) 
    references employee (emp_id), 
    constraint pk_account primary key (account_id) 
); 

回答

3

變化:

(select b.branch_id, e.emp_id 
    from branch b inner join employee e on e.assigned_branch_id = b.branch_id 
    where b.city = 'Woburn' limit 1) 

有了這個:

(select TOP 1 b.branch_id, e.emp_id 
    from branch b inner join employee e on e.assigned_branch_id = b.branch_id 
    where b.city = 'Woburn') 

雖然似乎沒有ORDER BY子句,並且您還執行了兩個CROSS JOIN,您確定這會返回您的預期輸出嗎?

+0

我跑了你有什麼建議沒有得到'消息8152,級別16,狀態14,行1 字符串或二進制數據將被截斷。 該聲明已被終止。 '錯誤。 – 2012-02-29 13:59:13

+0

@ViswanathanIyer - 這是一個完全不同的問題,現在它運行查詢,但無法插入數據,因爲目標表和查詢中的列之間有不同的數據類型。您應該讓我們知道您的表格定義 – Lamak 2012-02-29 14:02:11

+0

使用create'table'語句更新的問題。 – 2012-02-29 14:04:44