Sql INSERT INTO语句中的大小写

Sql INSERT INTO语句中的大小写,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在尝试将此存储过程的ActionReq列设置为Expiration+AdvancedCancel(当未提供ActionReq时)的值ActionReq和Expiration是日期时间,AdvancedCancel是一个整数。我该怎么做?我的SQL技能非常基础 ALTER PROCEDURE [dbo].[insertIntoGrid] @Vendor nvarchar(max), @Product nvarchar(max), @Type nvarchar(max)

我正在尝试将此存储过程的
ActionReq
列设置为Expiration+AdvancedCancel(当未提供ActionReq时)的值
ActionReq
和Expiration是日期时间,AdvancedCancel是一个整数。我该怎么做?我的SQL技能非常基础

ALTER PROCEDURE [dbo].[insertIntoGrid] 
    @Vendor nvarchar(max),
    @Product nvarchar(max),
    @Type nvarchar(max),
    @AccountCode nvarchar(max),
    @2016AccCode nvarchar(max),
    @BusinessUnit nvarchar(max),
    @Group nvarchar(max),
    @TIAYTD nvarchar(max),
    @ContractPeriod nvarchar(max),
    @RenewPeriod nvarchar(max),
    @Expiration datetime,
    @AdvancedCancel nvarchar(max),
    @ActionReq datetime,
    @Notes nvarchar(max),
    @Division nvarchar(max)
AS
BEGIN
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT INTO TestRedo3(Vendor, [Product/Service], [Type], AccountCode,
                          [2016AccCode], BusinessUnit, [Group], TIAYTD,
                          ContractPeriod, RenewPeriod, Expiration, AdvancedCancel,
                          case [ActionReq] is null THEN dateadd(day, @AdvancedCancel, @Expiration) 
                            else ActionReq
                          end as ActionReq, Notes, Division) 
    VALUES (@Vendor, @Product, @Type, @AccountCode,
            @2016AccCode, @BusinessUnit, @Group, @TIAYTD,
            @ContractPeriod, @RenewPeriod, @Expiration, @AdvancedCancel,
            @ActionReq, @Notes, @Division)
END

案例的语法必须在以下条件之前具有:

CASE [columnOptional] 
    WHEN .. 
       THEN .. 
       ELSE[optional] .. 
END AS

您需要将插入内容更改为类似这样的内容。我不完全确定你想做什么,但这应该很接近

INSERT INTO TestRedo3
(
    Vendor,
    [Product/Service],
    [Type],
    AccountCode,
    [2016AccCode],
    BusinessUnit,
    [Group],
    TIAYTD,
    ContractPeriod,
    RenewPeriod,
    Expiration,
    AdvancedCancel,
    ActionReq,
    Notes,
    Division
) 
select 
    @Vendor,
    @Product,
    @Type,
    @AccountCode,
    @2016AccCode,
    @BusinessUnit,
    @Group,
    @TIAYTD,
    @ContractPeriod,
    @RenewPeriod,
    @Expiration,
    @AdvancedCancel,
    case when @ActionReq is null THEN dateadd(day, @AdvancedCancel, @Expiration) 
        else @ActionReq
    end,
    @Notes,
    @Division
试试这个:

ALTER PROCEDURE [dbo].[insertIntoGrid] 
-- Add the parameters for the stored procedure here
@Vendor nvarchar(max),
@Product nvarchar(max),
@Type nvarchar(max), 
@AccountCode nvarchar(max),
@2016AccCode nvarchar(max),
@BusinessUnit nvarchar(max),
@Group nvarchar(max),
@TIAYTD nvarchar(max),
@ContractPeriod nvarchar(max),
@RenewPeriod nvarchar(max),
@Expiration datetime,
@AdvancedCancel nvarchar(max),
@ActionReq datetime,
@Notes nvarchar(max),
@Division nvarchar(max) 
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

 -- Insert statements for procedure here
 INSERT INTO TestRedo3(Vendor,[Product/Service],[Type],AccountCode, 
 [2016AccCode],BusinessUnit,[Group],TIAYTD,ContractPeriod,RenewPeriod,
 Expiration,AdvancedCancel,[ActionReq],Notes,Division) VALUES (@Vendor,
 @Product,@Type,@AccountCode,@2016AccCode,@BusinessUnit,@Group,@TIAYTD,
 @ContractPeriod,@RenewPeriod,@Expiration,@AdvancedCancel,
 case when @ActionReq is null THEN dateadd(day, @AdvancedCancel, @Expiration) 
 else @ActionReq
 end,@Notes,@Division)
END

试试这样的

INSERT INTO TestRedo3(
Vendor,
[Product/Service],
[Type],
AccountCode,
[2016AccCode],
BusinessUnit,
[Group],
TIAYTD,
ContractPeriod,
RenewPeriod,
Expiration,
AdvancedCancel,
ActionReq,
Notes,
Division
) VALUES (
@Vendor,
@Product,
@Type,
@AccountCode
@2016AccCode,
@BusinessUnit,
@Group,
@TIAYTD,
@ContractPeriod,
@RenewPeriod,
@Expiration,
@AdvancedCancel,
case @ActionReq is null THEN dateadd(day, @AdvancedCancel, @Expiration) 
else @ActionReq
end ,
@Notes,
@Division
)

你真的把每一列都定义为nvarchar(max)吗?你不能像现在这样决定要插入哪些列。您需要将insert语句更改为select语句。然后,您可以对需要做出此决定的列使用case表达式。这应该是注释,而不是答案。为什么?这是对他问题的回答,给他完整的解决方案不会让他学到什么。但是OP在列列表中有大小写表达式,所以这充其量只是部分答案。非常感谢!为什么select是必需的,不能使用值(@parameter1…)?您不必使用select语句,但大小写表达式必须是值的一部分。您可以将其切换并使用值列表。