sql - 插入 SQL Server 中的外键列表
问题描述
我正在尝试设置一个包含三个变量的存储过程
- FK_List
- String_of_Info
- 创建 ID
我需要从 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
解决方案
根据您的评论,您只需要稍作修改
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
这将使用您传入的参数为引用表中的每个 FK 引用插入一行。这就是它的全部内容!
这是另一个演示,因为我使用 GUID 作为辅助表上的主键,所以可能更清楚。
第二次编辑
根据您的评论,您将需要一个字符串拆分器。我添加了一个由Jeff Moden创建的常见的。请参阅此处的示例
创建函数后的最终过程将如下所示。您需要将函数中的逗号更改为您的应用程序的分隔符。此外,您应该开始使用表值参数。
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
推荐阅读
- html - 将一个圆圈居中放在 div 的中间
- angular - kendo-grid Angular 的页脚
- google-chrome-devtools - Chrome DevTools:文件失去与工作区的链接
- php - 不要通过模型从数据库中获取行,而是通过外观数据库获取它
- php - php解析错误与意外';' 在第 12 行,但没有错
- javascript - 如何在 C# 的类库中运行 npm 命令
- vue.js - vuex 模块无法将元素添加到根状态
- ios - 从相机捕获图像时内存泄漏
- android - Android 库模块的消费者必须添加类路径依赖项
- java - 使用 XML 配置进行 DAO 调用的 Spring 重试