Sql-在将字段插入表时如何在字段上添加条件?

Sql-在将字段插入表时如何在字段上添加条件?,sql,sql-server,string,insert,Sql,Sql Server,String,Insert,我需要在sql表中插入字符串,我必须在其中添加条件。例如: SELECT ii.Terminating_Item_Site_ID, ii.Originating_Item_Site_ID, loc.ServiceAddress, loc.ServiceCity, loc.ServiceState, (ii.Originating_Item_Site_ID + ' - ' + loc.ServiceAddress + ', ' + loc.ServiceCi

我需要在sql表中插入字符串,我必须在其中添加条件。例如:

SELECT ii.Terminating_Item_Site_ID,
    ii.Originating_Item_Site_ID,
    loc.ServiceAddress,
    loc.ServiceCity,
    loc.ServiceState,
    (ii.Originating_Item_Site_ID + ' - ' + loc.ServiceAddress + ', ' + loc.ServiceCity + ', ' + loc.ServiceState) AS OrigSite
FROM tblItemInventory ii
LEFT OUTER JOIN tblServiceLocation AS loc ON loc1.ServiceLocationID = ii.Originating_Item_Site_ID
我需要在插入字段
OrigSite
时设置一个条件,因此如果
ii.原始项目\u站点\u ID
loc.ServiceAddress
loc.ServiceCity
loc.ServiceState
null,我不需要包含它,因此我将其替换为“”

发生的情况是,如果上述任何字段为
null
,OrigSite也将变为
null

我尝试在
时使用
,但我无法管理它。
我正在使用SQLServer2008R2


有人能帮忙吗?

当您连接字符串时,其中一个字符串为空,连接的结果也为空。您可以在每个部分上使用isnull('string','')来避免这种行为。下面是代码示例:

SELECT ii.Terminating_Item_Site_ID,
    ii.Originating_Item_Site_ID,
    loc.ServiceAddress,
    loc.ServiceCity,
    loc.ServiceState,
    (ISNULL(ii.Originating_Item_Site_ID,'') 
         + ' - ' + ISNULL(loc.ServiceAddress,'') 
         + ', ' + ISNULL(loc.ServiceCity,'') 
         + ', ' + ISNULL(loc.ServiceState,'')) AS OrigSite
FROM tblItemInventory ii
LEFT OUTER JOIN tblServiceLocation AS loc ON loc1.ServiceLocationID = ii.Originating_Item
ISNULL是一个系统函数,它用预先定义的值替换null值。 Colasce是另一个类似于ISNULL的,但Coalesce是标准sql的一部分。 ISNULL是特定于T-sql的。 更标准,更便携

    SELECT ii.Terminating_Item_Site_ID,
    isnull(ii.Originating_Item_Site_ID,''),
    isnull(loc.ServiceAddress,''),
    isnull(loc.ServiceCity,''),
    isnull(loc.ServiceState,''),
    (isnull((ii.Originating_Item_Site_ID + ' - ' + isnull(loc.ServiceAddress,'') + ', ' + isnull(loc.ServiceCity,'') + ', ' + isnull(loc.ServiceState,'')) AS OrigSite
FROM tblItemInventory ii
LEFT OUTER JOIN tblServiceLocation AS loc ON loc1.ServiceLocationID = ii.Originating_Item_Site_ID

这不起作用,isnull必须用于连接字符串的每个部分,而不是在连接中的每个列上。如果一部分为null,则整个连接变为null。因此isnull适用于整个连接。是的,您可以从连接结果中替换null,但仍会丢失其余子字符串。如果子字符串为空,则不会丢失任何存在的数据。此外,coalecse返回所提供字段的第一个NOTNULL,因此在您的示例中,您可以获得ii.origing_Item_Site_ID或“-”
    SELECT ii.Terminating_Item_Site_ID,
    isnull(ii.Originating_Item_Site_ID,''),
    isnull(loc.ServiceAddress,''),
    isnull(loc.ServiceCity,''),
    isnull(loc.ServiceState,''),
    (isnull((ii.Originating_Item_Site_ID + ' - ' + isnull(loc.ServiceAddress,'') + ', ' + isnull(loc.ServiceCity,'') + ', ' + isnull(loc.ServiceState,'')) AS OrigSite
FROM tblItemInventory ii
LEFT OUTER JOIN tblServiceLocation AS loc ON loc1.ServiceLocationID = ii.Originating_Item_Site_ID