select语句可以更新SQL Server中的数据吗?
我刚刚得到了数百个SQL视图、存储过程和函数 我喜欢直观地查看数据,以便更好地理解对象的功能 如果我运行select语句并执行查询,是否可以假设它不会修改记录/数据 我只是担心有一些SQL技巧可以通过select语句更新数据select语句可以更新SQL Server中的数据吗?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我刚刚得到了数百个SQL视图、存储过程和函数 我喜欢直观地查看数据,以便更好地理解对象的功能 如果我运行select语句并执行查询,是否可以假设它不会修改记录/数据 我只是担心有一些SQL技巧可以通过select语句更新数据 有什么要注意的吗?任何我必须注意的提示或关键字?一个简单的SELECT语句本身不会更新任何数据 即使SELECT语句调用了一个或多个函数s,您也可以放心,这些函数s都不会修改数据库中的任何数据** **看 列出的功能的第一个限制是 用户定义的函数不能用于执行修改 数据库状态
有什么要注意的吗?任何我必须注意的提示或关键字?一个简单的
SELECT
语句本身不会更新任何数据
即使SELECT
语句调用了一个或多个函数
s,您也可以放心,这些函数
s都不会修改数据库中的任何数据**
**看
列出的功能的第一个限制是
用户定义的函数不能用于执行修改
数据库状态
我甚至尝试编写一个函数
,在返回返回值之前执行插入
,得到的错误如下。[感谢@Aaron和@John让我保持诚实]
Msg 443, Level 16, State 15, Procedure CRUDFunction, Line 5
Invalid use of a side-effecting operator 'INSERT' within a function.
正常的基本选择不会修改数据。然而,有几件事你应该注意 如果代码使用动态SQL构建SELECT语句,则必须担心攻击。除非您在参数化动态SQL时非常小心,否则攻击者几乎可以执行当前登录所能执行的任何操作。例如,
删除表格
,删除数据库
,等等。请参阅维基百科上的链接文章
此外,请注意带有
INTO
子句的SELECT
可用于创建表并向其中插入记录。有关更多信息,请参阅和 一个函数不能执行副作用,所以除非他们做了一些疯狂的事情,比如…谢谢提醒函数。看起来只有20-30个函数,它们都有相应的标签。如果有任何不合理的地方,只需执行sp_helptext“ObjectName”就会给出该对象的定义,看看里面发生了什么。不必担心视图,但我建议在接触存储过程和函数定义之前查看它们。这如何回答他的问题。他在问题中没有提到SQL注入攻击。OP询问是否有SQL技巧会导致SELECT
语句更新数据。我想说,SQL注入攻击肯定是一种“伎俩”,有人可以使用它来强制动态SQLSELECT
语句更改数据。另外,请注意,我编辑了我的答案,提到选择进入。+1用于记住选择进入!谢谢你更新你的答案。