我刚接手了数百个SQL视图,存储过程和函数 我喜欢直观地看数据,以便更好地理解对象的作用。
我可以假设我运行一个select语句并执行查询 - 它不可能修改记录/数据吗?
我只是担心有些SQL技巧可以通过select语句更新数据。
选择内部需要注意什么?我需要注意的任何提示或关键字?
答案 0 :(得分:2)
普通的旧SELECT
语句本身不会更新任何数据。
即使SELECT
语句调用了一个或多个FUNCTION
,您也可以放心,这些FUNCTION
中没有一个会修改DATABASE
中的任何数据} **
**见http://technet.microsoft.com/en-us/library/ms191320.aspx 列出的函数的第一个限制是
用户定义的函数不能用于执行修改操作 数据库状态。
我甚至尝试在返回返回值之前编写一个FUNCTION
INSERT
,我得到的错误如下。 [感谢@Aaron和@John保持诚实]。
Msg 443, Level 16, State 15, Procedure CRUDFunction, Line 5
Invalid use of a side-effecting operator 'INSERT' within a function.
答案 1 :(得分:1)
普通的基本SELECT
不会修改数据。但是,有一些事情你应该留意。
如果代码使用动态SQL构建SELECT语句,则必须担心SQL injection攻击。除非您小心参数化动态SQL,否则攻击者可以执行当前登录可以执行的任何操作。例如,DROP TABLE
,DROP DATABASE
等。请参阅维基百科上的链接文章。
此外,请注意具有SELECT
子句的INTO
可用于创建表并将记录插入其中。有关详细信息,请参阅this question和Microsoft TechNet。