代码之家  ›  专栏  ›  技术社区  ›  Shiraz Bhaiji

选择非空列

  •  2
  • Shiraz Bhaiji  · 技术社区  · 14 年前

    我有一张桌子 varbinary(max) nvarchar(max) 列。其中一个为空,另一个为值。

    我想返回值为varbinary(max)列的列。到目前为止,我已经尝试过这种方法,但效果不佳:

    SELECT 
          A =  
          CASE A
             WHEN NULL THEN B
             ELSE A 
          END
    FROM Table
    
    4 回复  |  直到 14 年前
        1
  •  5
  •   Mitch Wheat    14 年前
    SELECT COALESCE(A, CAST(B As varbinary(max)))
    

    更新 :回应评论(谢谢)并假设B是 nvarchar(max) CAST 在里面 COALESCE

        2
  •  2
  •   Zephyr was a Friend of Mine    14 年前

    尝试 SELECT ISNULL(A, cast(B AS varbinary(max))) FROM TABLE

        3
  •  1
  •   Andomar    14 年前

    A = NULL :

    CASE A WHEN NULL THEN B ELSE A END
    

    同:

    CASE WHEN A = NULL then B ELSE A END
    

    A IS NULL ,例如:

    CASE WHEN A IS NULL THEN B ELSE A END
    

    COALESCE(A,B)
    

    两者 when 以及 coalesce 将假定第一个参数的数据类型。将结果转换为 varbinary ,您可以放置 可变长度 列优先,或显式强制转换:

    COALESCE(CAST(A AS VARBINARY(MAX)),B)
    
        4
  •  0
  •   khaled Dehia    12 年前

    CREATE TABLE [dbo].[SUPPLIER](
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [SUPPLIER_NAME] [varchar](100) NOT NULL,
        [ADDRESS] [varchar](150) NULL,
        [CREATE_DATE] [datetime] NULL,)
    
        INSERT INTO [MyPayrol].[dbo].[SUPPLIER]
               ([SUPPLIER_NAME]           
               ,[CREATE_DATE])
         VALUES
               ('Khaled Nabil'
               ,GETDATE())
    
    
    declare @inumberofcolumn int
    
    select @inumberofcolumn= count(*) 
    from sys.columns where OBJECT_NAME(object_id) = 'supplier'
    
    declare @nameofcolumn varchar(100)
    
    set @nameofcolumn =''
    
    declare @counter int
    
    set @counter=1
    
    
    declare @colname varchar(100)
    
    declare @statment varchar(100)
    
    declare @value varchar(100)
    
    while @counter <=@inumberofcolumn
    begin
    
        select @colname= COL_NAME(object_id('[dbo].[SUPPLIER]'),@counter)
        declare @data table ([value] varchar(100))
    
        --set @statment = 'select '+@colname+' from [dbo].[SUPPLIER]'
          insert @data exec ('SELECT top 1 '+ @colname +' from [dbo].[SUPPLIER]') 
          select @value = [value] from @data
        if @value is not  null
        begin
            if @counter = 1
            begin   
                set @nameofcolumn = @nameofcolumn + @colname
            end
            else
            begin
                set @nameofcolumn = @nameofcolumn + ','+ @colname
            end
        end
        set  @counter = @counter+1
    end
    
    
    
    execute ('select '+@nameofcolumn+' from [dbo].[SUPPLIER]')