代码之家  ›  专栏  ›  技术社区  ›  keparo

如何执行作为sp参数传递的SQL文本?

  •  2
  • keparo  · 技术社区  · 16 年前

    我有一个带有nvarchar参数的存储过程。我希望调用方在使用此sp时提供SQL命令的文本。

    如何从SP中执行提供的SQL命令?

    这是可能的吗?-

    我认为使用exec是可能的,但有以下几点:

    EXEC @script
    

    指示无法按给定名称找到存储过程的错误。因为它是一个脚本,这显然是准确的,但让我觉得它并没有按预期工作。

    4 回复  |  直到 16 年前
        1
  •  8
  •   OMG Ponies    16 年前

    用途:

    BEGIN
    
      EXEC sp_executesql @nvarchar_parameter
    
    END
    

    …假设参数是整个SQL查询。如果不是:

    DECLARE @SQL NVARCHAR(4000)
    SET @SQL = 'SELECT ...' + @nvarchar_parameter
    
    BEGIN
    
      EXEC sp_executesql @SQL
    
    END
    

    意识到 SQL Injection attacks 我强烈推荐阅读 The curse and blessing of Dynamic SQL .

        2
  •  0
  •   Community Mohan Dere    9 年前

    您可以在您的sp中执行@sqlstation。但是,这不是最好的做法,因为它可以为您打开SQL注入。你可以看到一个例子 here

        3
  •  0
  •   AaronLS    16 年前

    你用 EXECUTE 将命令作为字符串传递给它。注意,这可能会使您的系统面临严重的漏洞,因为很难验证您盲目执行的SQL语句的非恶意性。

        4
  •  0
  •   Joel Coehoorn    16 年前

    如何从SP中执行提供的SQL命令?

    非常小心。该代码可以做任何事情,包括添加或删除记录,甚至整个表或数据库。

    为了安全起见,您需要创建一个单独的用户帐户,该帐户仅对一小部分允许的表/视图具有dbreader权限,并使用 EXECUTE AS 用于将上下文限制到该用户的命令。