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语句,但大小写表达式必须是值的一部分。您可以将其切换并使用值列表。