Tag: sql

更新SQL中的多个列

有没有办法使用插入语句相同的方式更新SQL Server中的多个列? 就像是: Update table1 set (a,b,c,d,e,f,g,h,i,j,k)= (t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k) from table2 t2 where table1.id=table2.id 或者类似的东西,而不是像这样: update table set a=t2.a,b=t2.b etc 如果你有100列以上的话,这可能会让你觉得很累。

脚本终止与数据库的所有连接(超过RESTRICTED_USER ROLLBACK)

我有一个开发数据库,​​经常从一个Visual Studio数据库项目(通过TFS自动构build)重新部署。 有时当我运行我的构build时,我得到这个错误: ALTER DATABASE失败,因为锁不能放在数据库'MyDB'上。 稍后再试。 ALTER DATABASE语句失败。 不能删除数据库“MyDB”,因为它目前正在使用中。 我试过这个: ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE 但我仍然不能删除数据库。 (我的猜测是大多数开发人员都有dbo访问权限。) 我可以手动运行SP_WHO,并开始查杀连接,但是我需要一种自动的方式在自动构build中做到这一点。 (虽然这次我的连接是唯一一个在我试图删除的分贝。) 有没有一个脚本,可以删除我的数据库,无论谁连接?

我可以通过用单引号转义单引号和周围的用户input来防止SQL注入吗?

我意识到参数化的SQL查询是构build包含用户input的查询时清理用户input的最佳方式,但是我不知道用户input和转义任何单引号以及用单引号包围整个string是什么问题。 代码如下: sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'" 用户input的任何单引号被replace为双单引号,这就消除了用户结束string的能力,所以他们可以input的任何内容,例如分号,百分号等都将是string的一部分,而不是实际上是作为命令的一部分执行的。 我们正在使用Microsoft SQL Server 2000,为此我认为单引号是唯一的string分隔符,也是唯一的方法来转义string分隔符,所以没有办法执行用户input的任何内容。 我看不出有什么办法对此发起SQL注入攻击,但是我意识到,如果这看起来像其他人可能已经想到的那样是无懈可击的,这将是常见的做法。 我的问题是:这个代码有什么问题? 有没有人知道通过这种消毒技术获得SQL注入攻击的方法? 使用这种技术的示例用户input将非常有帮助。 提前致谢。 更新: 感谢大家的回答; 我的研究中发现的所有信息几乎都出现在这个页面上,这表明那些忙于忙碌的日子里帮助我解决这个问题的人们的聪明才智和技巧。 我还没有接受任何答案的原因是,我仍然不知道有什么办法有效地发起这个代码的SQL注入攻击。 有些人build议反斜杠会转义一个单引号,而让另一个结束这个string,这样string的其余部分就会作为SQL命令的一部分被执行,而且我意识到这个方法可以将SQL注入一个mySQL数据库,但在MS SQL 2000中,唯一可以find的方法是转换单引号。 反斜杠不会这样做。 除非有办法停止单引号的转义,否则用户input的其余部分都不会被执行,因为它将被全部视为一个连续的string。 我明白,有更好的方法来消毒input,但我真的更感兴趣,了解为什么我上面提供的方法将无法正常工作。 如果有人知道任何具体的方式来对这个消毒方法进行SQL注入攻击,我很想看到它。

如何在SQL Server 2008中检查用户定义表types的存在?

我有一个用户定义的表types。 我想在使用OBJECT_ID(name, type)函数修补一个补丁之前检查它是否存在。 什么type的枚举应该传递给用户定义的表types? N'U'为用户定义的表不起作用,即IF OBJECT_ID(N'MyType', N'U') IS NOT NULL

Oraclefind一个约束

我有一个约束称为users.SYS_C00381400 。 我如何find这个约束是什么? 有没有办法查询所有约束?

string作为SQL数据库中的主键

我不太了解数据库和他们工作背后的理论。 从性能的angular度来看(插入/更新/查询)使用主键的string比整数慢吗?

从数据库表生成类

我怎样才能从一个SQL Server表中生成一个类? 我不是在谈论使用一些ORM。 我只需要创build实体(简单的类)。 就像是: public class Person { public string Name { get;set; } public string Phone { get;set; } }

如何使用SQLselect最近24小时的logging?

我正在寻找一个可以用来检索过去24小时logging的where子句?

将数据插入临时表

在创build临时表并声明数据types之后, CREATE TABLE #TempTable( ID int, Date datetime, Name char(20)) 那我如何在数据库中插入物理表上已存的相关数据呢?

何时使用通用expression式(CTE)

我已经开始阅读关于公共表expression式的内容 ,并且不能想到需要使用它的用例。 他们似乎是多余的,因为派生表可以做同样的事情。 有什么我失踪或理解不好? 有人可以给我一个简单的例子限制常规select,派生或临时表查询,使CTE的情况下? 任何简单的例子将不胜感激。