我创建了一个从Inventory_view_03
表输入值和过滤信息的过程,并将这些数据插入Trn_note_header
但过程正常运行。
当我输入一个值到输入时,如果我输入两个或更多,我不起作用,但不显示错误。
你能告诉我这是什么问题吗?
CREATE PROCEDURE insertrecord
@KITITEM Varchar(20)
AS
BEGIN
DECLARE @LASTNO int
IF (@LASTNO IS NULL) OR (LEN(@LASTNO) > 0)
BEGIN
SET @LASTNO= 0
END
SELECT @LASTNO=ISNUMERIC([Trn_number])from [dbo].[Trn_note_header]
SET @LASTNO=@LASTNO+1
insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs])
select @LASTNO,[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03]
WHERE trb_kit_desc IN(@KITITEM)
End
答案 0 :(得分:0)
当你输入一个时,输入看起来像这样
trb_kit_desc IN('a')
当您输入两个或更多时,输入看起来像这样
trb_kit_desc IN('a,b,c')
没有与您的查询匹配的值,这就是原因,它不起作用..
您可以像下面一样更改插入内容,即使在多个值的情况下也可以使用,您必须使用以下其中一个函数拆分这些值:https://sqlperformance.com/2012/07/t-sql-queries/split-strings
;with cte
as
(
select * from dbo.split_strings(@KITITEM,',')
)
insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs])
select @LASTNO,[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03]
WHERE trb_kit_desc IN(select item from cte)
答案 1 :(得分:0)
您可以构建动态T-SQL语句并执行它。例如:
您可以将语句构建为字符串,如下所示:
DECLARE @DynamicSQLStatement NVARCHAR(MAX);
SET @DynamicSQLStatement = 'insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs])
select ' + CAST(@LASTNO AS VARCHAR(12)) + ',[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03]
WHERE trb_kit_desc IN(''' + REPLACE(@KITITEM, ',', ''',''') +''')';
EXEC sp_executesql @DynamicSQLStatement
您可以将变量传递给sp_executesql
过程,如下所示:
DECLARE @DynamicSQLStatement NVARCHAR(MAX);
SET @KITITEM = REPLACE(@KITITEM, ',', ''',''');
SET @DynamicSQLStatement = 'insert into[dbo].[Trn_note_header]([Trn_number],[kit_number],[Supplier],[Season],[Pcs])
select ' + CAST(@LASTNO AS VARCHAR(12)) + ',[trb_kit_desc],[shortname],[se_name],[Expr1] From[dbo].[Inventory_view_03]
WHERE trb_kit_desc IN(''@KITITEM'')';
EXEC sp_executesql @DynamicSQLStatementN, '@KITITEM Varchar(20), @LASTNO INT', @KITITEM, @LASTNO;
无论如何,这是另类,但如果我是你,我会使用@TheGameiswar的夹板值的解决方案。