Rub*_*uby 1 t-sql sql-server stored-procedures soft-delete
此代码用于执行软删除.它首先删除记录.如果删除成功,则回滚然后更新同一记录的标志列.如果该记录具有依赖性并且无法删除,则不执行任何操作.为了知道,行动发生了,我保留了Status变量.但是,无论如何,它总是会产生无效的结果.我哪里错了.
ALTER PROCEDURE SoftDelete
(
@TableName nvarchar(50), @ColName nvarchar(50),
@Id nvarchar(50)
)
AS
BEGIN
DECLARE @qryDel nvarchar(MAX),@qryUpd nvarchar(MAX),@Status int = null,
@Param nvarchar(MAX)
SET @Param = N'@TableName nvarchar(50), @ColName nvarchar(50),
@Id nvarchar(50)'
SET @qryDel = N'delete from @tablename where @colname=@id'
SET @qryUpd = N'update @tablename set deleted = 1 where @colname=@id'
BEGIN TRY
BEGIN TRANSACTION
EXECUTE sp_executesql @qryDel, @Param, @TableName, @ColName, @Id
ROLLBACK TRANSACTION
BEGIN TRANSACTION
EXECUTE sp_executesql @qryUpd, @Param, @TableName, @ColName, @Id
COMMIT TRANSACTION
SET @Status = 1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
SET @Status = 0
END CATCH
SELECT @Status
END
Run Code Online (Sandbox Code Playgroud)
C#:( Linq To Entities)
public int SoftDelete()
{
return MYDB.SoftDelete("tblCountry","CountryId,"101").FirstOrDefault ?? -1;
}
Run Code Online (Sandbox Code Playgroud)
你只是缺少空间......
鉴于这种:
'delete from'+@tablename+'
Run Code Online (Sandbox Code Playgroud)
当你想要删除时tblCountry,你会得到
delete fromtblCountry
Run Code Online (Sandbox Code Playgroud)
您需要在关键字和表变量之间添加空格from!
用这个:
'delete from '+@tablename+'
^
+------- crucial **SPACE** here!!
Run Code Online (Sandbox Code Playgroud)
但为什么你为什么首先实际删除该行,回滚该交易,然后才进行"软删除"?对我没有任何意义....