繁体   English   中英

如何获取SQL Server 2008中的所有字段

[英]how to get all the fields in sql server 2008

我想从查询中选择的表中获取所有字段,即使这些字段不包含任何值(值null或空)。 以下是我写的查询。

SELECT (
           SELECT T1.[CarrierCode_Destination] AS '@CarrierCode_Destination',
                  T1.[CarrierCode_Destination_Address] AS 
                  '@CarrierCode_Destination_Address',
                  T1.[CarrierCode_Destination_Address1] AS 
                  '@CarrierCode_Destination_Address1',
                  T1.[CarrierCode_Destination_Address2] AS 
                  '@CarrierCode_Destination_Address2',
                  T1.[CIMtrek_RegContact] AS '@CIMtrek_RegContact',
                  T1.[CIMtrek_CarrierContact] AS '@CIMtrek_CarrierContact',
                  [T1].[CIMtrek_AdditionalContacts] AS 
                  '@CIMtrek_AdditionalContacts'
           FROM   (
                      SELECT CD.[CIMtrek_DestinationName] 
                             CarrierCode_Destination,
                             CD.[CIMtrek_DestinationAdd] 
                             CarrierCode_Destination_Address,
                             CD.[CIMtrek_DestinationAdd_1] 
                             CarrierCode_Destination_Address1,
                             CD.[CIMtrek_DestinationAdd_2] 
                             CarrierCode_Destination_Address2,
                             CD.[CIMtrek_RegContact] CIMtrek_RegContact,
                             CD.[CIMtrek_CarrierContact] CIMtrek_CarrierContact,
                             CD.[CIMtrek_AdditionalContacts] 
                             CIMtrek_AdditionalContacts
                      FROM   CIMtrek_SystemTable_DatawareHouse CD
                      WHERE  LEN(
                                 LTRIM(
                                     RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                                 )
                             ) != 0
                  ) AS T1 
                  FOR XML PATH('Record'),
                  TYPE
       ) FOR XML PATH('CarrierCode_Destination'),
       TYPE

我得到的结果是

<CarrierCode_Destination>
  <Record CarrierCode_Destination="8S - San Fran" CarrierCode_Destination_Address="SAN FRANCISCO  -  Redistribution" CarrierCode_Destination_Address1="4025 Whipple Road, " CarrierCode_Destination_Address2="Union City CA  94587" CIMtrek_RegContact="RDC San Francisco" />
  <Record CarrierCode_Destination="8G - St Louis" CarrierCode_Destination_Address="ST. LOUIS  -  Redistribution" CarrierCode_Destination_Address1="126 Enterprise  Drive, " CarrierCode_Destination_Address2="Wentzville MO  63385" CIMtrek_RegContact="RDC St Louis" />
  <Record CarrierCode_Destination="V8     PHO/CYPR/CUST/TL  " />
</CarrierCode_Destination>

但我想要查询中选择的所有字段。 如果您看到结果,它将为我提供具有价值的字段,而忽略没有价值的字段。

怎么做,请帮忙。

最好的祝福

如果对每个列都使用isnull()语句,然后将空值转换为空字符串,则应强制为所有列生成属性。 您可能需要也可能不需要添加rtrim()语句,如下所示,具体取决于您是否有要返回固定大小字符串的数据类型:

SELECT (
       SELECT rtrim(isnull(T1.[CarrierCode_Destination],'')) AS '@CarrierCode_Destination',
              rtrim(isnull(T1.[CarrierCode_Destination_Address],'')) AS 
              '@CarrierCode_Destination_Address',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address1],'')) AS 
              '@CarrierCode_Destination_Address1',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address2],'')) AS 
              '@CarrierCode_Destination_Address2',
              rtrim(IsNull(T1.[CIMtrek_RegContact],'')) AS '@CIMtrek_RegContact',
              rtrim(IsNull(T1.[CIMtrek_CarrierContact],'')) AS '@CIMtrek_CarrierContact',
              rtrim(IsNull([T1].[CIMtrek_AdditionalContacts],'')) AS 
              '@CIMtrek_AdditionalContacts'
       FROM   (
                  SELECT CD.[CIMtrek_DestinationName] 
                         CarrierCode_Destination,
                         CD.[CIMtrek_DestinationAdd] 
                         CarrierCode_Destination_Address,
                         CD.[CIMtrek_DestinationAdd_1] 
                         CarrierCode_Destination_Address1,
                         CD.[CIMtrek_DestinationAdd_2] 
                         CarrierCode_Destination_Address2,
                         CD.[CIMtrek_RegContact] CIMtrek_RegContact,
                         CD.[CIMtrek_CarrierContact] CIMtrek_CarrierContact,
                         CD.[CIMtrek_AdditionalContacts] 
                         CIMtrek_AdditionalContacts
                  FROM   CIMtrek_SystemTable_DatawareHouse CD
                  WHERE  LEN(
                             LTRIM(
                                 RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                             )
                         ) != 0
              ) AS T1 
              FOR XML PATH('Record'),
              TYPE
   ) FOR XML PATH('CarrierCode_Destination'),
   TYPE

当我测试它时,这对我有用,但是如果您还有空值未生成属性的问题,则可以首先使用NULLIF()强制将所有空值从SELECT原始数据表中以NULL形式返回。

SELECT (
       SELECT rtrim(isnull(T1.[CarrierCode_Destination],'')) AS '@CarrierCode_Destination',
              rtrim(isnull(T1.[CarrierCode_Destination_Address],'')) AS 
              '@CarrierCode_Destination_Address',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address1],'')) AS 
              '@CarrierCode_Destination_Address1',
              rtrim(IsNull(T1.[CarrierCode_Destination_Address2],'')) AS 
              '@CarrierCode_Destination_Address2',
              rtrim(IsNull(T1.[CIMtrek_RegContact],'')) AS '@CIMtrek_RegContact',
              rtrim(IsNull(T1.[CIMtrek_CarrierContact],'')) AS '@CIMtrek_CarrierContact',
              rtrim(IsNull([T1].[CIMtrek_AdditionalContacts],'')) AS 
              '@CIMtrek_AdditionalContacts'
       FROM   (
                  SELECT NullIF(CD.[CIMtrek_DestinationName],'') 
                         CarrierCode_Destination,
                         NullIF(CD.[CIMtrek_DestinationAdd],'') 
                         CarrierCode_Destination_Address,
                         NullIF(CD.[CIMtrek_DestinationAdd_1],'') 
                         CarrierCode_Destination_Address1,
                         NullIF(CD.[CIMtrek_DestinationAdd_2],'') 
                         CarrierCode_Destination_Address2,
                         NullIF(CD.[CIMtrek_RegContact],'') CIMtrek_RegContact,
                         NullIF(CD.[CIMtrek_CarrierContact],'') CIMtrek_CarrierContact,
                         NullIF(CD.[CIMtrek_AdditionalContacts],'') 
                         CIMtrek_AdditionalContacts
                  FROM   CIMtrek_SystemTable_DatawareHouse CD
                  WHERE  LEN(
                             LTRIM(
                                 RTRIM(ISNULL(LTRIM(RTRIM(CD.[CIMtrek_DestinationName])), ''))
                             )
                         ) != 0
              ) AS T1 
              FOR XML PATH('Record'),
              TYPE
   ) FOR XML PATH('CarrierCode_Destination'),
   TYPE

我通常使用以下语法:

SELECT *
FROM   TABLE_NAME
WHERE  FIELD_NAME = "CRITERIA"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM