我在存储过程之一中获取以下输入参数值。
@DocKey1, @DocValue1,
@DocKey2, @DocValue2,
@DocKey3, @DocValue3,
@DocKey4, @DocValue4,
@DocKey5, @DocValue5
从该过程中,我将调用另一个过程以插入每对值。
现在,我多次调用InsertDocValues存储过程以插入每一对。
exec InsertDocValues @DocKey1, @DocValue1
exec InsertDocValues @DocKey2, @DocValue2
exec InsertDocValues @DocKey3, @DocValue3
exec InsertDocValues @DocKey4, @DocValue4
exec InsertDocValues @DocKey5, @DocValue5
无论如何,我可以将完整的一组值传递给另一个过程,如下所示,然后拆分每对并插入
例如:@DocKey1, @DocValue1 and @DocKey2, @DocValue2 etc
@DocKey1, @DocValue1, @DocKey2, @DocValue2, @DocKey3, @DocValue3, @DocKey4, @DocValue4, @DocKey5, @DocValue5
下面是程序正在使用的插入
Create PROCEDURE [dbo].[InsertDocValues]
(
@DocKey varchar(20),
@DocValue nvarchar(20)
)
AS
SET NOCOUNT ON;
BEGIN
INSERT INTO dbo.DocValues(
DocKey,
DocValue
)
VALUES(
@DocKey,
@DocValue
)
End
请提出建议
答案 0 :(得分:2)
也许下面的代码对您有用。
使用用户定义的表类型变量。
CREATE TYPE DocTable AS TABLE
(
DocKey int,
DocValue nvarchar(50)
);
GO
然后使用此类型在第一个SP中创建所需的变量,并将其传递给第二个SP。
DECLARE @DocTable AS DocTable;
INSERT INTO @DocTable
SELECT @DocKey1, @DocValue1 UNION ALL
SELECT @DocKey2, @DocValue2 UNION ALL
SELECT @DocKey3, @DocValue3 UNION ALL
SELECT @DocKey4, @DocValue4 UNION ALL
SELECT @DocKey5, @DocValue5
您也可以动态创建上述插入查询。填充表格的方法有很多。因此,从第一个SP获取输出时,请使用任何一个。
然后致电您的第二个SP。
EXEC [dbo].[InsertDocValues] @DocTable
第二个SP的更改如下所示。
Create PROCEDURE [dbo].[InsertDocValues]
(
@DocTable DocTable READONLY
)
AS
SET NOCOUNT ON;
BEGIN
INSERT INTO dbo.DocValues(
DocKey,
DocValue
)
SELECT
DocKey,
DocValue
FROM @DocTable
END
答案 1 :(得分:1)
我感觉到您有一对字符串(键,值)。也许是这样的:
示例
Declare @List varchar(max) = 'Key1:Value1,Key2:Value2'
Insert Into dbo.DocValues(DocKey,DocValue )
Select DocKey = left(RetVal,charindex(':',RetVal+':')-1)
,DocVal = stuff(RetVal,1,charindex(':',RetVal+':'),'')
From (
Select RetSeq = row_number() over (Order By (Select null))
,RetVal = ltrim(rtrim(B.i.value('(./text())[1]', 'varchar(max)')))
From (Select x = Cast('<x>' + replace((Select replace(@List,',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) A
插入的数据将是
DocKey DocVal
Key1 Value1
Key2 Value2