[英]SQl Transactions - query doesnt return value as expected
tblParent
pid(int) name deleted(bit)
1 abc 0
2 def 0
tblChild
cid(int) name pid(ForeignKey)
1 aaa 1
2 bbb 1
當刪除來自tblParent
的記錄時,應檢查是否有任何子記錄。 如果是,則回滾並返回0.如果否,則將已刪除列更新為“1”並返回1.基本上,執行軟刪除
SP工作正常。 我需要的是根據發生的動作將狀態知道為0或1。 應該怎么做。 我會將此商店程序從c#,linq調用到實體以獲取狀態。 就像是:
public int somefuntion() //returning a string is also fine..
{
return MYDB.SoftDelete(parameters.....);
}
編輯:
ALTER PROCEDURE SoftDelete
(
@TableName nvarchar(50), @ColName nvarchar(50),
@Id nvarchar(50)
)
AS
BEGIN
DECLARE @qry nvarchar(500)
SELECT @qry = 'begin transaction
delete '+@tablename+' where '+@colname+'='+@id+'
if(@@Error <> 0)
Begin
--select 0
End
else
Begin
rollback transaction
update '+@tablename+' set deleted = 1 where '+@colname+' = '+@id+'
--select = 1
end'
EXECUTE sp_executesql @qry
END
在您的腳本中,在您構建的sql語句中無法訪問@status變量,因為“execute sp_executesql @qry”將在不同的空間中執行。 而是使用select n“替換為”set @status = 0“和”set @status = 1“
嘗試這個
Declare @tablename nvarchar(50), @colname nvarchar(50),
@id nvarchar(50), @qry nvarchar(500)
set @tablename = 'tblParent'
set @colname = 'pid'
set @id = '1'
select @qry = 'begin transaction
delete '+@tablename+' where '+@colname+'='+@id+'
if(@@Error <> 0)
Begin
select 0
End
else
Begin
rollback transaction
update '+@tablename+' set deleted = 1 where '+@colname+' = '+@id+'
select 1
end
execute sp_executesql @qry
嘗試這個:
Declare @status nvarchar(50),@tablename nvarchar(50), @colname nvarchar(50),
@id nvarchar(50), @qry nvarchar(500)
set @tablename = 'person'
set @colname = 'id'
set @id = '15'
begin try
begin transaction
set @qry='delete '+@tablename+' where '+@colname+'=@id'
execute sp_executesql @qry,N'@id nvarchar(50)',@id=@id
rollback
--NO FK violation.So begin another transaction and soft delete
begin transaction
set @qry='update '+@tablename +' set deleted=1 where '+@colname+'=@id'
execute sp_executesql @qry,N'@id nvarchar(50)',@id=@id
commit
select 1
end try
begin catch
print(Error_Message())
--FK violation.Do nothing.Return 0
select 0
end catch
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.