使用 SQL Server 传递带有数据表参数的表中的非数据表参数

Posted

技术标签:

【中文标题】使用 SQL Server 传递带有数据表参数的表中的非数据表参数【英文标题】:Passing non-datatable parameter in the table with Datatable parameters using SQL Server 【发布时间】:2022-01-23 20:17:17 【问题描述】:

我在数据表中只有 2 列/参数,我试图通过存储过程将其插入表中。

但我还想添加另一个不在 DataTable 中的参数。

ALTER PROCEDURE [Job].[prc_A]
@JobId int = 0,
@StartDate datetime,
@EndDate datetime,
@JobPropertyValue as JobPropertyValuesType READONLY

这里是查询:

if(@JobId = 0)
    BEGIN
INSERT INTO TableA (StartDate, EndDate)
VALUES(@StartDate, @EndDate)
SELECT CAST(SCOPE_IDENTITY() as int)

---A New JobId gets created after first insert query. I want to add that JobId in Table B now with DataTable Parameters---
INSERT INTO TableB (JobId, JobPropertyType, JobValue)
    SELECT  __________________, JobPropertyType, JobPropertyTypeName  
    FROM @JobPropertyValue

(使用存储过程)

插入存在于不同表中的 JobId 和 DataTable 中的其他两个参数的正确方法是什么? (我不想对代码部分进行任何更改或直接在 DataTable 中添加 JobId(Fetching it from the Table)) 我正在使用 Asp.Net Core 来发送请求。

【问题讨论】:

我已经删除了这里几乎所有的标签。在上面,我没有看到这与 C# 有什么关系(除了您的应用程序正在使用它,这似乎与问题无关)并且您在此处标记了 SQL Server 和 mysql。 Edit你的问题和标签请正确。 不得SELECT 语句中使用任何括号 - 只需删除 () 我添加了 SqlServer 和 T-Sql 标签,@ 清楚地表明他们一定是这个意思。 (即,“MSSQL”用词不当让另一个提问者感到困惑)。 SELECT CAST(SCOPE_IDENTITY() as int) 为什么?为什么需要投?您将 Job ID 作为 int 参数传递 - 因此似乎不需要强制转换。而这整个方法似乎过于复杂。在 TableA 中插入一行如何导致在“Table B”中创建一个新的 Job ID(如评论中所述),而您似乎忽略了您的过程作为结果集返回的标识值 SELECT CAST(SCOPE_IDENTITY() as int) Edit问题并提供minimal reproducible example,即涉及的表或其他对象的CREATE语句(粘贴文本,不要使用图像,不要链接到外部站点),INSERT 用于示例数据 (dito) 的语句以及带有表格文本格式的示例数据的所需结果。 【参考方案1】:

假设 TABLEA 的 IDENTITY 列是 JobId,那么只需

if(@JobId = 0)
BEGIN
    INSERT INTO TableA (StartDate, EndDate)
    VALUES(@StartDate, @EndDate)
    set @jobid  = SCOPE_IDENTITY() 

    ---A New JobId gets created after first insert query. I want to add that JobId in Table B now with DataTable Parameters---
    INSERT INTO TableB (JobId, JobPropertyType, JobValue)
        SELECT  @jobid, JobPropertyType, JobPropertyTypeName  
        FROM @JobPropertyValue

【讨论】:

以上是关于使用 SQL Server 传递带有数据表参数的表中的非数据表参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程

带有 TIMESTAMP 的 SQL Server 中的表连接问题

使用 SQL Server 从带有 dblink 的 SQL Server 表向 Oracle DB 表插入数据

带有文本值的 SQL Server 数据透视表

当表在不同的架构中时,如何从 SQL Server 导入所有带有 sqoop 的表?