首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sp_executesql不验证查询字符串。

sp_executesql不验证查询字符串。
EN

Stack Overflow用户
提问于 2016-01-08 11:33:18
回答 1查看 492关注 0票数 1

今天我遇到了最糟糕的情况。数据库中有一个存储过程,我不得不修改它,使用内联查询,

通过执行以下查询,一切都进行得很顺利:

代码语言:javascript
复制
DECLARE @script AS NVARCHAR(MAX)

SET @script = 'ALTER PROCEDURE GetALL
               with recompile
               AS
               BEGIN
                   SELECT *  
                   FROM dbo.Main
                   INNER JOIN dbo.alabla ON dbo.Main.ID = dbo.ATTENDANCE.EMPLOYEE_ID
               END'

EXEC sp_executesql @script ;

上面的查询有语法错误alabla,表不存在,但EXEC sp_executesql @script ;执行时没有任何错误。

当我尝试使用这个存储过程时,我得到了一个错误:

Msg 208,16级,状态1,过程GetALL,第5行 无效的对象名'dbo.alabla‘。

这里有人知道我们如何确保内联查询执行是安全的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 12:37:43

看看这里:How to precompile stored procedures in SQL server?

sp_recompile只在下次调用它时标记要重新编译的方法.

如果新创建的过程不操作数据(上面的例子),您可以立即调用它.

最好的提示可以是查看一下SET FMTONLY,即使它是不推荐的(https://msdn.microsoft.com/de-de/library/ms173839(v=sql.120).aspx或者您可以使用sp_describe_first_result_set (以及相关的:参见所提到的页面上的链接)。

这会迫使我们立即进行汇编..。

进一步看一看

  • DBCC CHECKDB
  • DBCC FREEPROCCACHE
  • DBCC PROCCACHE

顺便说一句:如果你只想读取数据,我不会使用SP。您上面的例子将是一个完美的候选人,一个无法(单语句,临时)的TVF.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34676102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档