【问题标题】:Sql Case Statement when is not null不为空时的 Sql Case 语句
【发布时间】:2012-02-01 17:17:38
【问题描述】:

我想根据表格动态生成变量声明。 我的意思是,我想声明一个表的变量,每个变量必须与其列的类型相同 我正在做类似的事情,但结果只有在类型不是 int 时才有效

Select 'Declare @Doc' + COLUMN_NAME + ' '+DATA_TYPE+case(CHARACTER_MAXIMUM_LENGTH) when Null then ' '  else '(' +convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'Documentos'

我的结果是这样的

(No column name)
NULL
Declare @DocSerie varchar(5)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
Declare @DocImporteLetras varchar(255)
Declare @DocMotivos text(2147483647)
NULL
Declare @DocDocumentosReferencia varchar(255)
NULL
NULL
Declare @DocAuditoriaIPC varchar(40)
NULL
NULL
Declare @DocAuditoriaIPM varchar(40)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

【问题讨论】:

    标签: sql sql-server sql-server-2008 sql-server-2005


    【解决方案1】:

    CASE x WHEN null THENCASE WHEN x = null THEN 相同。但是以这种方式没有任何东西等于 null 。这意味着您总是得到 CASE 语句的 ELSE 部分。这意味着您正在尝试将字符串与 NULL 连接,这总是产生 NULL。

    你需要 CASE WHEN x IS NULL THEN 代替...

    SELECT
      'Declare @Doc'
      + COLUMN_NAME + ' '
      + DATA_TYPE
      + CASE WHEN (CHARACTER_MAXIMUM_LENGTH) IS Null then ' '  else '(' convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end 
    FROM
      INFORMATION_SCHEMA.COLUMNS 
    WHERE
      TABLE_NAME = 'Documentos'
    

    【讨论】:

      【解决方案2】:

      Coalesce

      SELECT 'Declare @Doc'
        + COLUMN_NAME + ' '
        + DATA_TYPE + Coalesce('(' + CHARACTER_MAXIMUM_LENGTH + ')', '')
      FROM
        INFORMATION_SCHEMA.COLUMNS 
      WHERE
        TABLE_NAME = 'Documentos'
      

      Switch Case

      SELECT 'Declare @Doc' 
        + COLUMN_NAME + ' ' 
        + DATA_TYPE 
        + Case When CHARACTER_MAXIMUM_LENGTH Is Null Then '' Else '(' + Convert(Varchar, CHARACTER_MAXIMUM_LENGTH) + ')' End
      FROM
        INFORMATION_SCHEMA.COLUMNS 
      WHERE
        TABLE_NAME = 'Documentos'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-21
        • 1970-01-01
        • 2022-06-22
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多