2010-09-01 63 views
0

有点生疏了在SQL检查字段为空或空并插入SQL Server 2008中

我有一个情况我需要插入场“@Amount”到一个临时table.If @amount从表A为空或0从表B得到它

这是我做的一个简化的例子。当插入到#CustomerTable中时,必须在select语句中完成 当声明中需要一个case吗?

DECLARE @Amount DECIMAL(18,4) 

SELECT @Amount=Amount 
FROM TableA 

INSERT #CustomerTable(id,Name,Amount) 
SELECT 1,CustomerName,--if Amount is null or 0 get it from TableB else Get it from Table A. 
FROM TableB 
+0

什么是#CustomerTable,表A之间的关系表B?他们有没有共同的领域? – 2010-09-01 16:05:38

回答

1

由于您使用的2008年,我想捻新NULLIF()函数与ISNULL()函数,并使用子查询:

insert @CustomTable (id, name, amount) 
select 
    1, 
    CustomerName, 
    ISNULL(NULLIF(TableA.Amount,0),(select Amount from TableB where TableB.ID = TableA.ID)) 
from 
    TableA 
+0

非常感谢您的回复。像这样,我可以做更多的SQL Server 2008风格 – user9969 2010-09-01 18:25:54

1
INSERT #CustomerTable(id,Name,Amount) 
SELECT 1, 
    CASE 
     WHEN Amount IS NULL or Amount = 0 THEN TableA.CustomerName 
     ELSE TableB.CustomerName 
    END, 
    Amount 
FROM TableA, TableB 
-- need a WHERE clause here to get TableA/TableB records, and you need to make 
-- sure you join them properly 
1

相当接近@dcp答案,而是采用在case语句的子查询。

INSERT @CustomTable 
(
    id, 
    Name, 
    Amount 
) 
SELECT 
    1, 
    CustomerName, 
    CASE 
     WHEN ISNULL(TableB.Amount,0) > 0 THEN TableB.Amount 
     ELSE (SELECT TableA.Amount FROM TableA WHERE 1 = 1) --Replace logic to get value from TableA 
    END AS Amount 
FROM TableB