2017-02-22 193 views
0

我对SQL编码有点新,我试图选择一个nvarchar值并将其插入到tinyint列中。将nvarchar转换为tinyint

我用下面的查询

insert into COV (GID, DocumentNumber, RegistrationDate, CustomerCode, CustomerName, DeliveryDateAndTime, LineGID, Item, Quantity, DeliveryDate, MU, ExportedToSchnell) 
    select 
     esd.GID, esd.ADCode, esd.ADRegistrationDate, esc.Code, esc.Name, 
     esd.DeliveryDueDate, esfl.GID, esf.Code, esfl.Quantity, 
     esfl.DeliveryDate, esmm.fMUCode, esfl.Stringfield1 
    from 
     ESFIDocumentTrade esd 
    left join 
     ESFITradeAccount esc on esd.fTradeAccountGID = esc.GID 
    left join 
     ESFIDocumentType est on esd.fADDocumentTypeGID = est.GID 
    left join 
     ESFILineItem esfl on esfl.fDocumentGID = esd.GID 
    left join 
     ESFIItem esf on esf.GID = esfl.fItemGID 
    left join 
     ESMMItemMU esmm on esmm.fItemGID = esf.GID 
    where 
     est.Code = 'COV' 
     and esfl.StringField1 = 'YES' 
     and esd.ADRegistrationDate > '2017-02-01' 

,但我得到了以下错误:

Conversion failed when converting the nvarchar value 'YES' to data type tinyint.

我试图施放nvarchar列,但我无法弄清楚如何做到这一点。

你能帮我吗?由于

回答

3

首先,我认为SqlZim回答是好。

但我只是想在这里添加一些东西。

首先,在连接中,当您在where子句中使用左连接右侧的表的值时,它是内连接,而不是左连接。 其次,在这种情况下,由于where子句,不需要CASE语句,只需在选择列表中放置1代替esfl.Stringfield1即可。

insert into COV (GID, DocumentNumber, RegistrationDate, CustomerCode, CustomerName, DeliveryDateAndTime, LineGID, Item, Quantity, DeliveryDate, MU, ExportedToSchnell) 
select esd.GID, esd.ADCode, esd.ADRegistrationDate, esc.Code, esc.Name, 
esd.DeliveryDueDate, esfl.GID, esf.Code, esfl.Quantity, esfl.DeliveryDate, 
esmm.fMUCode, 1 
from ESFIDocumentTrade esd 
inner join ESFIDocumentType est on esd.fADDocumentTypeGID=est.GID 
inner join ESFILineItem esfl on esfl.fDocumentGID=esd.GID 
left join ESFITradeAccount esc on esd.fTradeAccountGID=esc.GID 
left join ESFIItem esf on esf.GID=esfl.fItemGID 
left join ESMMItemMU esmm on esmm.fItemGID=esf.GID 
where est.Code='COV' and esfl.StringField1='YES' and esd.ADRegistrationDate>'2017-02-01' 
+1

SzlZim?那是谁 ? :P – SqlZim

+1

@SqlZim我的地形。我修好了它。 – DVT

+0

好点,+1 – SqlZim

1

如果需要的值更改为1,其中Stringfield1 = 'Yes',那么你可以用case表达做到这一点很容易:

insert into COV (
    GID 
, DocumentNumber 
, RegistrationDate 
, CustomerCode 
, CustomerName 
, DeliveryDateAndTime 
, LineGID 
, Item 
, Quantity 
, DeliveryDate 
, MU 
, ExportedToSchnell 
) 
select 
    esd.GID 
, esd.ADCode 
, esd.ADRegistrationDate 
, esc.Code 
, esc.name 
, esd.DeliveryDueDate 
, esfl.GID 
, esf.Code 
, esfl.Quantity 
, esfl.DeliveryDate 
, esmm.fMUCode 
, case when esfl.Stringfield1 = 'YES' then 1 else 0 end 
from ESFIDocumentTrade esd 
    left join ESFITradeAccount esc 
    on esd.fTradeAccountGID = esc.GID 
    left join ESFIDocumentType est 
    on esd.fADDocumentTypeGID = est.GID 
    left join ESFILineItem esfl 
    on esfl.fDocumentGID = esd.GID 
    left join ESFIItem esf 
    on esf.GID = esfl.fItemGID 
    left join ESMMItemMU esmm 
    on esmm.fItemGID = esf.GID 
where est.Code = 'COV' 
    and esfl.StringField1 = 'YES' 
    and esd.ADRegistrationDate > '2017-02-01' 
+0

哇。它工作顺利。谢谢 – cdrrrrr

+0

@cdrrrr乐于帮忙! – SqlZim