所以我试图插入看起来像这样的数据:
INSERT INTO RELATIONSHIP_CONFIG (USERID, WORKGROUPID, PRIORITY) VALUES
(@userId, @WorkgroupId10, @SmartFeedPriority10),
(@userId, @WorkgroupId11, @SmartFeedPriority11),
(@userId, @WorkgroupId12, @SmartFeedPriority12),
(@userId, @WorkgroupId13, @SmartFeedPriority13);
这通常非常简单和线性,因为所有插入一个接一个地发生并且表现良好(我认为)。
问题是我允许使用的SQL参数数量存在硬限制 - 2100。 上限边缘情况考虑了一个比它高出一点的插入。
我正在考虑将WorkgroupId和SmartFeedPriority的数据作为csvs传递,并使用split函数创建表格或类似的东西......
处理这类数据的最佳方法是什么?
也许创建一个存储过程,传递@ UserId,@ WorkgroupId(CSV)和@SmartFeedPriority(CSV)并以这种方式逐个插入线性,但是我不太清楚这个逻辑将如何看...
答案 0 :(得分:0)
看看你的问题,提出一个好的方法有点困难。我无法看到数据来源的方式和位置。
我看到你提到了一个CSV文件。您可以使用以下脚本从CSV文件导入数据。数据在表格中后,您可以尝试以下示例之一。
IF OBJECT_ID('tempdb.dbo.#TempTable', 'U') IS NOT NULL
DROP TABLE #TempTable ;
CREATE TABLE #TempTable
(
[UserID] NVARCHAR(MAX) NULL,
[WorkGroup] NVARCHAR(MAX) NULL,
[SmartFeedPriority] NVARCHAR(MAX) NULL,
)
BULK INSERT #TempTable
FROM ' put your csv file path here '
WITH
(
FIELDTERMINATOR = ',', -- comma delimited
ROWTERMINATOR = '\n',
CODEPAGE = 65001 --'65001'
)
如果您尝试插入的数据来自表格,您可以尝试将数据选择到您需要的表格中。
示例:
SELECT [UserID], [WorkgroupID], [SmartFeedPriority]
INTO [dbo].[RELATIONSHIP_CONFIG]
FROM [dbo].[SorceTable]
如果您想采取程序路线,可以尝试以下方法。如果数据源位于表格中并且您希望单独插入每条记录,则下面的示例将起作用。
示例:
插入程序
CREATE PROCEDURE [dbo].[CREATE_RELATIONSHIP_CONFIG](@UserId INT, @WorkgroupId INT, @SmartFeedPriority INT)
AS
BEGIN
INSERT INTO RELATIONSHIP_CONFIG (UserId, WorkgroupId, Priority) VALUES
(@userId, @WorkgroupId, @SmartFeedPriority)
END
您可以在while循环中包装上述过程。 我在下面添加了一个例子。
declare @UserId int;
declare @WorkgroupId int;
declare @Priority int;
WHILE EXISTS (SELECT [UserID] FROM #TempTable)
BEGIN
SELECT TOP 1 @UserId=[UserID], @WorkgroupId=[WorkGroup] , @Priority=[SmartFeedPriority] FROM #TempTable
EXEC [dbo].[CREATE_RELATIONSHIP_CONFIG] @UserId, @WorkgroupId, @Priority
DELETE TOP (1)FROM #TempTable
END