2

varbinary(max)列と列を持つテーブルがありnvarchar(max)ます。1 つは null で、もう 1 つは値を持っています。

値を持つ列を varbinary(max) 列として返したいと思います。これまでのところ、これを試しましたが、うまくいきません:

SELECT 
      A =  
      CASE A
         WHEN NULL THEN B
         ELSE A 
      END
FROM Table
4

4 に答える 4

5
SELECT COALESCE(A, CAST(B As varbinary(max)))

更新: コメント (感​​謝) に応えて、B がnvarchar(max)列であると仮定して、CAST内部を移動しましたCOALESCE

于 2010-10-21T12:38:30.380 に答える
2

試すSELECT ISNULL(A, cast(B AS varbinary(max))) FROM TABLE

于 2010-10-21T12:38:16.667 に答える
1

あなたのケースステートメントは恐ろしいものに評価されますA = NULL:

CASE A WHEN NULL THEN B ELSE A END

以下と同じです:

CASE WHEN A = NULL then B ELSE A END

これを修正する 1 つの方法はA IS NULL、次のように を使用することです。

CASE WHEN A IS NULL THEN B ELSE A END

またはさらに簡単です:

COALESCE(A,B)

whenと の両方coalesceが、最初の引数のデータ型を想定します。結果を にキャストするにはvarbinaryvarbinary列を最初に配置するか、明示的にキャストします。

COALESCE(CAST(A AS VARBINARY(MAX)),B)
于 2010-10-21T12:38:45.620 に答える
0

これは、テーブルを作成して値を挿入し、コードを適用してnull以外の値のみを取得する完全なコードです

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]')
于 2012-12-04T10:16:57.927 に答える