如何在sql存储过程中为列传递多个值?

时间:2017-10-25 11:42:12

标签: sql sql-server sql-server-2008

我有两个表,例如

队列

QueueID
LogParameters

QueueParameters

QueueParametersID
QueueID
LogParametersKey
LogParametersValue

我必须编写SP才能在两个表中创建一个条目

LogParameterKey和LogParameterValue可能包含多个值,但每个值的QueueID应相同,QueueParameterID可能不同。

**QueueID**  **LogParameters**      
   1          AA        



**QueueParametersID**   **QueueID**  **LogParametersKey** **LogParametersValue**
       1                     1             FirstName             Mohammad
       2                     1             LastName               Salman
       3                     1                Age                    17

如何为LogParameterKey和LogParameterValue传递多个值?..有人建议我为此使用数组......还有其他方法吗?

创建过程AddQueue @LogParameters NVARCHAR(255) @AuditParameters AS AuditParameter READONLY, - UserDefinedTable

AS

SET NOCOUNT ON;

BEGIN 

DECLARE @QueueID BIGINT

EXECUTE dbo.procInsertQueue
@LogParameters = @LogParameters,
@QueueID = @QueueID OUTPUT


DECLARE @GetQueueID BIGINT = (SELECT QueuesID FROM Queues WHERE LogParameters= @LogParameters
DECLARE @AuditQueueParametersID BIGINT
DECLARE @TempTable TABLE(
ParameterKey NVARCHAR(255),
ParameterValue NVARCHAR(255),
AuditQueuesID BIGINT)

INSERT INTO @TempTable(ParameterKey,ParameterValue,QueuesID)
SELECT ParameterKey,ParameterValue,@GetQueueID FROM @AuditParameters

DECLARE @LogParameterKey NVARCHAR(255) = (SELECT ParameterKey FROM @TempTable WHERE QueuesID = @GetQueueID)
DECLARE @LogParameterValue NVARCHAR(255) = (SELECT ParameterValue FROM @TempTable WHERE QueuesID = @GetQueueID)

EXECUTE dbo.procAddQueueParameters
@AuditQueueID = @GetQueueID 
@LogParametersKey = @LogParametersKey,
         @LogParametersValue = @LogParametersValue,
@QueueParametersID = @QueueParametersID OUTPUT
END 

END

1 个答案:

答案 0 :(得分:0)

<强> 1。使用用户定义的表类型

https://technet.microsoft.com/en-us/library/bb522526(v=sql.105).aspx

<强> 2。生成xml字符串并在SP中解析

3.使用临时表

CREATE TABLE #Input
(
QueueParametersID ..
QueueID ..
LogParametersKey ..
LogParametersValue ..
)
--INSERT VALUES
EXEC dbo.YouSP 

IN SP使用表#Input