varbinary(max)
列と列を持つテーブルがありnvarchar(max)
ます。1 つは null で、もう 1 つは値を持っています。
値を持つ列を varbinary(max) 列として返したいと思います。これまでのところ、これを試しましたが、うまくいきません:
SELECT
A =
CASE A
WHEN NULL THEN B
ELSE A
END
FROM Table
varbinary(max)
列と列を持つテーブルがありnvarchar(max)
ます。1 つは null で、もう 1 つは値を持っています。
値を持つ列を varbinary(max) 列として返したいと思います。これまでのところ、これを試しましたが、うまくいきません:
SELECT
A =
CASE A
WHEN NULL THEN B
ELSE A
END
FROM Table
SELECT COALESCE(A, CAST(B As varbinary(max)))
更新: コメント (感謝) に応えて、B がnvarchar(max)
列であると仮定して、CAST
内部を移動しましたCOALESCE
試すSELECT ISNULL(A, cast(B AS varbinary(max))) FROM TABLE
あなたのケースステートメントは恐ろしいものに評価されます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
が、最初の引数のデータ型を想定します。結果を にキャストするにはvarbinary
、varbinary
列を最初に配置するか、明示的にキャストします。
COALESCE(CAST(A AS VARBINARY(MAX)),B)
これは、テーブルを作成して値を挿入し、コードを適用して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]')