插入SQL Server中的外键列表

时间:2018-11-06 19:33:00

标签: sql sql-server

我正在尝试设置一个具有三个变量的存储过程

  1. FK_List
  2. String_of_Info
  3. CreateId

我需要从FK_List中的每个外键向表中插入一个条目。我很好奇构造存储过程的最佳方法是有效地做到这一点。

编辑:添加了代码段

CREATE PROCEDURE StackOverFlowExample_BulkAdd 
    @FKList VARCHAR(MAX),
    @Notes NVARCHAR(1000),
    @CreateId VARCHAR(50)
AS
BEGIN
    INSERT INTO [dbo].[StackOverflowTable] WITH (ROWLOCK)
           ([FKID], [Notes], [CreateId], [UpdateId])
    VALUES (@FKList, <---- this is the problem spot
            @Notes, @CreateId, @CreateId)
END
GO

1 个答案:

答案 0 :(得分:1)

根据您的评论,您只需要稍作修改

CREATE PROCEDURE StackOverFlowExample_BulkAdd 
    @Notes nvarchar(1000),
    @CreateId varchar(50)
AS
BEGIN
    INSERT INTO [dbo].[StackOverflowTable] WITH (ROWLOCK)
           ([FKID]
           ,[Notes]
           ,[CreateId]           
           ,[UpdateId])
     select
           someID
           ,@Notes
           ,@CreateId           
           ,@CreateId
     from FKListTable
END
GO

Here is a simple demo

这将为表中的FK参考插入一行,其中包含您传入的参数。仅此而已!

Here's another demo可能会更清楚,因为我在辅助表上的主键上使用了GUID。

第二编辑

根据您的评论,您将需要一个字符串分隔符。我添加了一个由Jeff Moden创建的通用对象。 See the example here

创建函数后,最终过程将如下所示。您需要将函数中的逗号更改为应用程序的分隔符。另外,您应该开始使用table valued parameters

CREATE PROCEDURE StackOverFlowExample_BulkAdd 
    @FKList VARCHAR(MAX),
    @Notes nvarchar(1000),
    @CreateId varchar(50)
AS
BEGIN
    INSERT INTO [dbo].[StackOverflowTable] WITH (ROWLOCK)
           ([FKID]
           ,[Notes]
           ,[CreateId]           
           ,[UpdateId])
    select item 
           ,@Notes
           ,@CreateId           
           ,@CreateId
    from dbo.DelimitedSplit8K(@FKList,',')
END

您可以这样称呼它:

declare @FKList varchar(1000) = '1,2,3,4,5,6'
declare @Notes varchar(1000) = 'here is my note'
declare @CreatedId int = 1

exec StackOverFlowExample_BulkAdd @FKList, @Notes, @CreatedId