Я использую SQL Server 2012, и я пишу хранимую процедуру.SQL Server Хранимая процедура и SQL-инъекция
Я хочу знать, есть ли какая-либо возможность SQL-инъекции в моей хранимой процедуре?
IF OBJECT_ID('Production.InsertProducts', 'P') IS NOT NULL
DROP PROCEDURE Production.InsertProducts
GO
CREATE PROCEDURE Production.InsertProducts
@productname AS NVARCHAR(40)
, @supplierid AS INT
, @categoryid AS INT
, @unitprice AS MONEY = 0
, @discontinued AS BIT = 0
AS
BEGIN
INSERT Production.Products (productname, supplierid, categoryid, unitprice, discontinued)
VALUES (@productname, @supplierid, @categoryid, @unitprice, @discontinued);
RETURN;
END;
GO
Или
IF OBJECT_ID('Production.InsertProducts', 'P') IS NOT NULL
DROP PROCEDURE Production.InsertProducts
GO
CREATE PROCEDURE Production.InsertProducts
@productname AS NVARCHAR(40)
, @supplierid AS INT
, @categoryid AS INT
, @unitprice AS MONEY = 0
, @discontinued AS BIT = 0
AS
BEGIN
Declare @Command NVArchar(Max) = 'INSERT Production.Products (productname, supplierid, categoryid, unitprice, discontinued)
VALUES (''' + @productname + ''',' + @supplierid + ',' + @categoryid + ',' + @unitprice + ',' + @discontinued + ');'
Execute(@Command);
RETURN;
END;
GO
Или
IF OBJECT_ID('Production.InsertProducts', 'P') IS NOT NULL
DROP PROCEDURE Production.InsertProducts
GO
CREATE PROCEDURE Production.InsertProducts
@productname AS NVARCHAR(40)
, @supplierid AS INT
, @categoryid AS INT
, @unitprice AS MONEY = 0
, @discontinued AS BIT = 0
AS
BEGIN
Declare @Command NVArchar(Max) = '
INSERT Production.Products (productname, supplierid, categoryid,
unitprice, discontinued)
VALUES (@productname , @supplierid,@categoryid,@unitprice,@discontinued);'
Execute SP_ExecuteSql @Command,
' @productname NVARCHAR(40) , @supplierid INT , @categoryid INT
, @unitprice MONEY , @discontinued BIT ' ,
@productname= @productname,@[email protected],
@[email protected],@[email protected],@[email protected]
RETURN;
END;
GO
Какой из этих запросов лучше всего?
Почему вы используете RETURN ;? – HaveNoDisplayName
Возврат не имеет значения, когда он использовался в последней строке SP. –
вот мой вопрос, тогда почему вы его используете, удалите это. – HaveNoDisplayName