使用 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 中的表连接问题