如何在PDW中退出存储过程

时间:2016-03-22 19:24:46

标签: stored-procedures parallel-data-warehouse

我在PDW AU5工作。我正在编写一个需要动态SQL的存储过程(因为数据库名称可变)。因此,为了防止SQL注入,我正在对存储过程的输入参数值进行简单测试。如果测试失败,我想退出存储过程。通常在SMP上,我会使用RETURN -1执行此操作。但是,PDW上的存储过程中不允许RETURN。我怎么能绕过这个?

2 个答案:

答案 0 :(得分:0)

您需要将代码包装在IF语句周围,并且在它应该是RETURN ed 的部分中,只需确保不满足IF条件并绕过整个代码块并在存储过程的末尾。

e.g。

CREATE PROCEDURE dbo.uspDynamicSQL
( @UserField varchar(255) )
AS

IF CHARINDEX(@UserField) > 0 THEN
BEGIN

-- YOUR SQL CODE AS NORMAL

END;

它不漂亮但它有效。

答案 1 :(得分:0)

您可以尝试使用QUOTENAME函数来转义输入字符串上的单引号字符,以停止注入Dynamic SQL。

DECLARE @userfield VARCHAR(255) = 'abc'' ;SELECT 1; '
DECLARE @sql NVARCHAR(4000)

SET @sql = 'SELECT ' + QUOTENAME(@UserField, '''')

PRINT @sql

EXEC (@sql)

请参阅另一篇有关如何防止SQL注入的帖子how to prevent SQL Injection