【问题标题】:SQL stored procedure to get a user object and then update the values of that objectSQL 存储过程获取用户对象,然后更新该对象的值
【发布时间】:2016-06-27 09:38:59
【问题描述】:

我希望创建一条 SQL 语句来从数据库中选择一个对象,然后根据通过表单输入的值更新该对象。

我不习惯编写高级 SQL 查询并且习惯于 ORM 语法,但我想把它做好。

目前我的查询看起来像这样

DECLARE @person;
SET @person = (
select u.*
from
dbo.people as u
inner join dbo.people as pe on pe.people_id = u.people_id
inner join dbo.parties as pa on pa.people_id = pe.people_id
inner join dbo.contact_details as cd on cd.parties_id = pa.parties_id
inner join enum.contact_details_types cdt on cdt.contact_details_types_id = cd.contact_details_types_id
where
u.people_id = 57121526-03e3-4dc2-bfb8-6c6fc84a9de8 #UUID of the user eg)


  UPDATE @person
  SET 
  sexes_id=test
  marital_states_id=test
  employment_states_id=test
  linkedins_id=test
  facebooks_id=test
  first_names=test
  surnames=test
  name_to_call_user=test
  id_number=test
  passport_number=test
  birth_date=test
  tax_number=test
  vat_number=test
  message_to_show_on_user_invoice=test
  workplace_name=test

我一直在阅读有关存储过程的信息,并且知道我需要创建的不仅仅是简单的插入查询。

问:
我的问题是,如何创建一个查询来选择此用户作为对象,从而允许使用更新语句更改数据库中的值?

我遇到的错误:
我目前的错误是我不能以这种方式声明人。 任何帮助将不胜感激

【问题讨论】:

  • 要更新哪个表,要更新到这个表的哪些值?
  • 我想用 sexes_id=test ...workplace_name=test 更新“u”表
  • u.people_id 等于 select 语句中的 uuid
  • test 是字符串还是什么?
  • 是的,只是一个使插入发生的字符串,一旦我这样做了,我将替换为 ?并在桌子上进行验证

标签: mysql sql database stored-procedures


【解决方案1】:

你可能需要这个,试试吧。

update dbo.people u
inner join dbo.people as pe on pe.people_id = u.people_id
inner join dbo.parties as pa on pa.people_id = pe.people_id
inner join dbo.contact_details as cd on cd.parties_id = pa.parties_id
inner join `enum`.contact_details_types cdt on cdt.contact_details_types_id = cd.contact_details_types_id
on u.people_id = 57121526-03e3-4dc2-bfb8-6c6fc84a9de8'
set
    u.sexes_id = ?,
    u.marital_states_id = ?,
    u.employment_states_id = ?,
    u.linkedins_id = ?,
    u.facebooks_id = ?,
    u.first_names = ?,
    u.surnames = ?,
    u.name_to_call_user = ?,
    u.id_number = ?,
    u.passport_number = ?,
    u.birth_date = ?,
    u.tax_number = ?,
    u.vat_number = ?,
    u.message_to_show_on_user_invoice = ?,
    u.workplace_name = ?;

【讨论】:

  • 谢谢,我把这个想法复杂化了。行之有效的简单方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多