条件插入sql

时间:2014-12-15 21:22:44

标签: sql sql-server

我的程序

 ALTER PROCEDURE [dbo].[spMyProc]
 @uniqueid  uniqueidentifier,
 @y int

DECLARE @ID uniqueidentifier
 SELECT TOP 1 @ID = uniqueid FROM tbl_x WHERE y= @y

INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
VALUES
(
   @otherfields
   ,if @ID == null then @uniqueid else @ID -- this is what i want to happen how i do not know
)

现在我可以使用if else阻止这样做,但我不想这样做。我想要一些很好的编码方式

这是我不想做的事情

if(@id IS NULL)
BEGIN
INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
VALUES
(
   @otherfields
   ,@uniqueid 
)
END
ELSE
BEGIN
INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
VALUES
(
   @otherfields
   ,@id 
)
END

有任何建议

3 个答案:

答案 0 :(得分:4)

您可以像这样使用insert into select

INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
SELECT 
  @otherfields,
  ISNULL(@ID , @uniqueid)

答案 1 :(得分:0)

您可以将IF放入分配值的SELECT

ALTER PROCEDURE [dbo].[spMyProc]
 @uniqueid  uniqueidentifier,
 @y int

DECLARE @ID uniqueidentifier
 SELECT TOP 1 @ID = ISNULL(uniqueid,@uniqueid) FROM tbl_x WHERE y= @y

INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
VALUES
(
   @otherfields
   ,@ID
)

答案 2 :(得分:0)

您可以在插入值时使用CASE

INSERT INTO tbl_x
(   
    otherfield
    ,uniqueid   
)
VALUES
(
   @otherfields
   ,CASE WHEN @ID IS NULL THEN @uniqueid ELSE @ID END
)

或者您也可以使用ISNULL功能。