我的程序
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
有任何建议
答案 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功能。