• Eugene Elutin (12/11/2012)


    Sean Pearce (12/11/2012)


    ALTER PROCEDURE [dbo].[usp_delete]

    @tablename sysname,

    @pid int,

    @pidname varchar(10)

    AS

    DECLARE @SQL NVARCHAR(MAX),

    @params NVARCHAR(MAX);

    SELECT@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',

    @params = '@pid INT';

    EXEC sp_executesql @SQL, @params, @pid = @pid;

    Don't forget to test your sp by executing:

    EXEC dbo].[usp_delete]

    @tablename = 'sometable',

    @pid int = 1,

    @pidname = '1 = 1 OR 1 '

    😎

    It's a good idea to always protect your dynamic sql from injection

    You can offer some protection by wrapping the execution statement.

    ALTER PROCEDURE [dbo].[usp_delete]

    @tablename sysname,

    @pid int,

    @pidname varchar(10)

    AS

    DECLARE @SQL NVARCHAR(MAX),

    @params NVARCHAR(MAX);

    SELECT@SQL = 'DELETE FROM [' + @tablename + '] WHERE ' + @pidname + ' = @pid;',

    @params = '@pid INT';

    IF EXISTS(SELECT * FROM sys.columns WHERE name = @pidname AND OBJECT_NAME(object_id) = @tablename)

    BEGIN

    EXEC sp_executesql @SQL, @params, @pid = @pid;

    END;

    The SQL Guy @ blogspot[/url]

    @SeanPearceSQL

    About Me[/url]