我需要刪除(讀取/更新)某些表中的某些值,並且希望使用存儲過程來減少安全問題。SQL Server存儲過程:動態刪除記錄
由於表很多,記錄更多,並且爲每個組合編寫存儲過程是不合理的,並且由於每個人都有這種需求,我認爲可以很容易地找到存儲過程來執行此操作。但是使用google搜索很多,我沒有找到一個簡單而簡短的答案,所以我嘗試構建自己的存儲過程。但恐怕它可能有一些安全問題:主要是當我宣佈@Table
爲nvarchar(30)
..我試圖宣佈爲表,但它返回錯誤..
可以建議什麼是不可接受的,並提出一個解決方案?
感謝
這裏存儲的程序刪除..但對於其他操作可能是相似的:
CREATE PROCEDURE dbo.spDeleteRecord
(
@UID nvarchar(20) = NOT NULL,
@PWD nvarchar(30) = NOT NULL,
@Table sysname,
@WhereField sysname,
@WhereValue nvarchar(150) = NOT NULL
)
AS
SET NOCOUNT ON;
DECLARE @S nvarchar(max) = '',
@P nvarchar(max) = ''
SET @S = 'DELETE t
from dbo.'+quotename(@Table)+' t
join dbo.subUsers su on t.UID = su.UID
where ' + quotename(@WhereField) + ' = @_WhereValue
and su.SUID = @_UID
and su.PWD = @_PWD'
SET @P = '@_UID nvarchar(50),
@_PWD nvarchar(50),
@_Table sysname,
@_WhereField sysname,
@_WhereValue nvarchar(150)'
--PRINT @S
EXEC sp_executesql @S, @P, @UID, @PWD, @Table, @WhereField, @WhereValue
SET NOCOUNT OFF
感謝您閱讀 喬
一個動態的過程刪除行...可能會出錯! –
爲什麼這個代碼?爲什麼不在外鍵中使用CASCADE DELETE或者刪除相關記錄的TRIGGER?這不僅是安全問題。除非您在單個程序中調用* all *刪除,否則您將擁有殭屍條目。爲什麼不寫*一個*存儲過程刪除所有相關條目?您甚至可以使用代碼生成來創建刪除語句 –
,這些都是簡單的表格,沒有相關記錄。基本上,表格中包含激活某個服務的用戶的名稱,用戶修改其自己的訂閱。 在任何情況下..從來沒有使用'CASCADE DELETE',但它可能會在其他情況下有用。 感謝您的意見。 – Joe