Sql server 根据参数值插入到不同的表中

Sql server 根据参数值插入到不同的表中,sql-server,Sql Server,我有这样一个存储过程: create procedure [dbo].[InsertInput] (@ResourceTag int, @Element varchar(50), @PeriodID int, @BackPay varchar(50), @InputValue decimal(18,5), @UserID varchar(50), @Source varchar(50), @InputDate datetime, @SourceID int, @Comments varchar(

我有这样一个存储过程:

create procedure [dbo].[InsertInput]
(@ResourceTag int, @Element varchar(50), @PeriodID int, @BackPay varchar(50), @InputValue decimal(18,5), @UserID varchar(50), @Source varchar(50), @InputDate datetime, @SourceID int, @Comments varchar(200), @ProcessID int, @TableCode int, @ScopeID int = NULL Output)
as
begin

INSERT INTO 
[dbo].[Input]
([Resource Tag] ,[Element] ,[Period ID] ,[Back Pay], [Input Value], [User ID], [Source], [Input Date], [Source ID], [Comments], [Process ID])
Values(@ResourceTag, @Element, @PeriodID, @BackPay, @InputValue, @UserID, @Source, @InputDate, @SourceID, @Comments, @ProcessID)

set @ScopeID = (Select Scope_Identity())

end
现在我添加了参数@TableCode,根据这个值,上面的insert语句应该转到不同的表。 例如 如果@TableCode=0,则插入[dbo]。[Input]。。。 如果@TableCode=1,则插入[dbo]。[Input1]

因此,我尝试添加一个CASE语句,如以下代码段:

INSERT INTO 
CASE WHEN @TableCode = 0 THEN
[dbo].[Input]
([Resource Tag] ,[Element] ,[Period ID] ,[Back Pay], [Input Value], [User ID], [Source], [Input Date], [Source ID], [Comments], [Process ID])
Values(@ResourceTag, @Element, @PeriodID, @BackPay, @InputValue, @UserID, @Source, @InputDate, @SourceID, @Comments, @ProcessID)

set @ScopeID = (Select Scope_Identity())
但我只是得到了类似于“CASE”附近的错误语法”的错误

在第页上,我并没有看到将CASE与INSERT一起使用的示例,所以这可能是不可能的

我应该使用多个if语句吗? 例如:


CASE
语句根据条件返回一个值,并且不执行查询,因此它不能用于控制SQL语句的执行流。这就是为什么,这个错误

如果变量只有2个值(或更少的值),如示例中所示,请使用

否则,您可以使用动态sql并动态设置表名。请点击此链接:


CASE
语句根据条件返回一个值,并且不执行查询,因此它不能用于控制SQL语句的执行流。这就是为什么,这个错误

如果变量只有2个值(或更少的值),如示例中所示,请使用

否则,您可以使用动态sql并动态设置表名。请点击此链接:


外壳不是流量控制元件。如msdn页面所述:

CASE表达式不能用于控制Transact-SQL语句、语句块、用户定义函数和存储过程的执行流

您需要使用
IF…ELSE
来控制存储过程的流


它是insert语句这一事实与此问题无关。

Case不是流控制元素。如msdn页面所述:

CASE表达式不能用于控制Transact-SQL语句、语句块、用户定义函数和存储过程的执行流

您需要使用
IF…ELSE
来控制存储过程的流


事实上,这是一个insert语句与此问题无关。

问题是什么?不,你不能。不能像这样将case语句与insert语句一起使用。如果您想使用前面提到的case语句,那么必须将sql语句转换为动态查询。如果你不稍微改变一下,你将面临一个非常具有挑战性的性能问题。问题是什么?不,你不能。不能像这样将case语句与insert语句一起使用。如果您想使用前面提到的case语句,那么必须将sql语句转换为动态查询。如果你不稍微改变一下,你将面临一个非常具有挑战性的性能问题。
IF @TableCode = 0 
Begin
INSERT INTO [dbo].[Input]
([Resource Tag] ,[Element] ,[Period ID] ,[Back Pay], [Input Value], [User ID], [Source], [Input Date], [Source ID], [Comments], [Process ID])
Values(@ResourceTag, @Element, @PeriodID, @BackPay, @InputValue, @UserID, @Source, @InputDate, @SourceID, @Comments, @ProcessID)

set @ScopeID = (Select Scope_Identity())
end 

If @TableCode = 1...
IF @var=0
INSERT.... table1
ELSE IF @var=1
INSERT.... table2
ELSE
INSERT... table3