【问题标题】:How can insert value by selecting from another如何通过从另一个中选择来插入值
【发布时间】:2019-12-22 11:02:07
【问题描述】:

我有三张桌子。 table1 用于插入数据,table2、table3 用于选择数据。

table1:
int id,
varchar name,
varchar gender,
varchar category,

table2:
int id,
varchar gender,

table3:
int id,
varchar category,

根据这些表,我使用的存储过程如下:

Create procedure ABC
(
@id varchar(10),
@name varchar(11),
@gender varchar(10),
@category varchar(10)
)
As
begin
Insert into table1(id, name, gender, category) select @id, @name, g.id, c.id from gender g, category c where g.gender=@gender and c.category=@category
end

现在,如果性别或类别为空,则使用此选项,则不会插入数据。请告诉我哪里错了,并告诉最佳查询使用选择查询插入数据。请帮我解决问题。谢谢

【问题讨论】:

  • 你现在想在这个表中插入你的gender.id 如果gender 是空的那么你怎么能得到这个id,你的预期输出是什么。
  • 有效地防止插入不正确或丢失的数据。如果您需要在没有这种完整性检查的情况下插入数据,只需直接插入表中即可。

标签: sql sql-server stored-procedures


【解决方案1】:

您在 where 子句中使用 and,这意味着只有 gender = @gender 才会选择任何记录。

Create procedure ABC
(
@id int,       ----- change this to int since id is int type in your table
@name varchar(11),
@gender varchar(10)='',
@category varchar(10)=''
)
As
begin
Insert into table1(id, name, gender, category) 
select @id, @name, g.id, c.id from gender g, category c 
where (g.gender=@gender or isnull(@gender,'')='') and (c.category=@category or isnull(@category,'')='')
end

虽然您可以使用这种方法。但是由于您想在表中插入性别和类别列的 id,那么在传递 nullblank 值时,您希望将什么 id 放入您的记录中。

最好先检查您尊敬的表中的性别和类别值,如果未找到记录,则将其插入您的表中,然后将其对应的 id 保存在您的最终表中。

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多