问题描述
我正在尝试从某些表中删除一个寄存器,这些表都与自Elixir以来的同一用户ID有关,但使用的是外部sql Server数据库。我想按特定顺序删除表,但不使用架构。我要执行这些SQL查询
Table.1 -
---------------------------------------------------------------------------
fake_id attribute_1 event_time
---------------------------------------------------------------------------
1 attr_val_11 2020-08-01 05:00:00
2 attr_val_12 2020-08-01 15:00:00
3 attr_val_31 2020-08-03 07:00:00
4 attr_val_41 2020-08-01 05:00:00
Table.2 -
---------------------------------------------------------------------------
fake_id start_time end_time updated_time
---------------------------------------------------------------------------
1 2020-08-01 02:00:00 2020-08-01 08:00:00 2020-08-01 00:00:00
2 2020-08-01 04:00:00 2020-08-01 23:00:00 2020-08-01 00:00:00
3 2020-08-03 02:00:00 2020-08-03 08:00:00 2020-08-03 08:00:00
3 2020-08-03 05:00:00 2020-08-03 10:00:00 2020-08-03 12:00:00
3 2020-08-04 05:00:00 2020-08-04 10:00:00 2020-08-04 12:00:00
4 2020-08-01 08:00:00 2020-08-01 18:00:00 2020-08-01 18:00:00
4 2020-08-01 02:00:00 2020-08-01 05:00:00 2020-08-01 22:00:00
Result :
----------------------------------------------------------------------------------------------
fake_id attribute_1 event_time start_time end_time
----------------------------------------------------------------------------------------------
1 attr_val_11 2020-08-01 05:00:00 2020-08-01 02:00:00 2020-08-01 08:00:00
2 attr_val_12 2020-08-01 15:00:00 2020-08-01 04:00:00 2020-08-01 23:00:00
3 attr_val_31 2020-08-03 07:00:00 2020-08-03 05:00:00 2020-08-03 10:00:00
4 attr_val_41 2020-08-01 05:00:00 2020-08-01 02:00:00 2020-08-01 05:00:00
但是我不想将未使用的架构添加到Elixir保护中。我正在尝试做这样的事情:
SELECT *
FROM UsersConfig
WHERE UserId = 'D9960E26-3F7F-4F8C-954A-FF6316D7A3B3'
SELECT *
FROM UserBranch
WHERE UserId = 'D9960E26-3F7F-4F8C-954A-FF6316D7A3B3'
DECLARE @userCompanyPreferencesId uniqueidentifier
SELECT @userCompanyPreferencesId = UserCompanyPreferencesId
FROM UserCompany
WHERE UserId = 'D9960E26-3F7F-4F8C-954A-FF6316D7A3B3'
SELECT *
FROM UserCompany
WHERE UserId = 'D9960E26-3F7F-4F8C-954A-FF6316D7A3B3'
SELECT *
FROM UserCompanyPreferences
WHERE UserCompanyPreferencesId = @userCompanyPreferencesId
SELECT *
FROM Users
WHERE UserId = 'D9960E26-3F7F-4F8C-954A-FF6316D7A3B3'
def delete_user_by_user_number(user_id) do
query = """
DELETE UsersConfig WHERE UserId = $1
DELETE UserBranch WHERE UserId = $1
DECLARE @userCompanyPreferencesId uniqueidentifier
SELECT @userCompanyPreferencesId = UserCompanyPreferencesId FROM UserCompany WHERE UserId = $1
DELETE UserCompany WHERE UserId = $1
DELETE UserCompanyPreferences WHERE UserCompanyPreferencesId = @userCompanyPreferencesId
DELETE Users WHERE UserId = $1
"""
Ecto.Adapters.sql.stream(UsersRepo,query,[user_id])
end
您能帮我一些想法做类似的事情吗?
解决方法
什么也没发生是因为您正在使用Ecto.Adapters.SQL.stream
。此函数从查询中创建一个惰性结果流,在您开始使用该流之前,实际上不会发生任何事情。我不会将它用于仅需要其副作用的查询(例如删除),而应使用Ecto.Adapters.SQL.query!
。也许像这样:
queries = [
"DELETE UsersConfig WHERE UserId = $1","DELETE UserBranch WHERE UserId = $1","DECLARE @userCompanyPreferencesId uniqueidentifier","SELECT @userCompanyPreferencesId = UserCompanyPreferencesId FROM UserCompany WHERE UserId = $1","DELETE UserCompany WHERE UserId = $1","DELETE UserCompanyPreferences WHERE UserCompanyPreferencesId = @userCompanyPreferencesId","DELETE Users WHERE UserId = $1"
]
for query <- queries do
Ecto.Adapters.SQL.query!(UsersRepo,query,[user_id])
end