Tag: tsql

如何比较可能都为null的值是T-SQL

我想确保我没有插入重复行到我的表(例如只有主键不同)。 我所有的领域都允许NULLS,因为我已经决定为“所有的价值”。 由于空值,我的存储过程中的以下语句无法工作: IF EXISTS(SELECT * FROM MY_TABLE WHERE MY_FIELD1 = @IN_MY_FIELD1 AND MY_FIELD2 = @IN_MY_FIELD2 AND MY_FIELD3 = @IN_MY_FIELD3 AND MY_FIELD4 = @IN_MY_FIELD4 AND MY_FIELD5 = @IN_MY_FIELD5 AND MY_FIELD6 = @IN_MY_FIELD6) BEGIN goto on_duplicate END 因为NULL = NULL是不正确的。 我怎样才能检查重复没有每个列IF IF NULL语句?

将多行转换为逗号分隔符

如果我发出SELECT username FROM Users我得到这个结果: 用户名 ——– 保罗 约翰 玛丽 但我真正需要的是以逗号分隔的所有值的一行,如下所示: 保罗,约翰,玛丽 我该怎么做呢?

在SQL Server中,如何通过SQL注入来避免单引号溢出的卫生问题?

为了解决这个问题,我很清楚参数化查询是最好的select,但是我在问什么使得我现在处于弱势的策略成为可能。 人们坚持下面的解决scheme不起作用,所以我正在寻找一个为什么它不会的例子。 如果在发送到SQL Server之前使用以下转义代码构builddynamicSQL,那么什么样的注入可以击败此? string userInput= "N'" + userInput.Replace("'", "''") + "'" 这里也回答了类似的问题,但我不相信任何答案都适用于此。 在SQL Server中不能使用“\”来转义单引号。 我相信SQL走私与Unicode( 这里概述)将被阻止的事实,即正在生产的string被标记为单引号之前的N的Unicode。 据我所知,没有其他字符集,SQL Server会自动转换为单引号。 没有一个没有转义的单引号,我不相信注射是可能的。 我不相信串截断也是一个可行的载体。 SQL Server肯定不会被截断,因为根据微软 , nvarchar的最大大小是2GB。 2 GB的string在大多数情况下是不可行的,在我的情况下是不可能的。 二次注射可能是可能的,但有可能的情况是: 所有进入数据库的数据都使用上述方法进行消毒 数据库中的值永远不会附加到dynamicSQL中(为什么要这样做呢?只要引用任何dynamicSQLstring的静态部分中的表值?)。 我并不是说这比使用参数化查询更好,或者是使用参数化查询的替代方法,但是我想知道我所概括的是如何易受攻击的。 有任何想法吗?

将数据库模式导出到SQL文件中

在MS SQL Server 2008可以将数据库结构导出为T-SQL文件吗? 我不仅要导出表模式,还要导出主键,外键,约束,索引,存储过程,用户定义的types/函数。 另外我不希望数据出现在这个T-SQL文件中。 有什么办法可以实现吗?

数据库表中的随机logging(T-SQL)

有一个简洁的方法来从SQL Server表中检索一个随机logging? 我想随机化我的unit testing数据,所以我正在寻找一个简单的方法来从表中select一个随机的ID。 在英文中,select将是“从表中select一个id,其中id是表中最低的id和表中最高的id之间的随机数。 我不能找出一种方法来做到这一点,而不必运行查询,testing一个空值,然后重新运行,如果为空。 想法?

为什么RAISERROR拼写错误? 或者不是?

RAISERROR为什么不拼写RAISEERROR ? 第二个E在哪里? 我可以理解,如果这是一个古老的关键字长度限制,但我不希望它是一个九个字符的限制。 RAIS还是RROR是一个技术词汇,“raise-error”只是一个误读? 它的(直接)源于不同的语言? 我search了谷歌,但没有find太多关于这个问题。

简单的DateTime sql查询

如何查询一定范围内的DateTime数据库字段? 我正在使用SQL SERVER 2005 下面的错误代码 SELECT * FROM TABLENAME WHERE DateTime >= 12/04/2011 12:00:00 AM AND DateTime <= 25/05/2011 3:53:04 AM 请注意,我需要在一定的时间范围内获得行。 例如,10分钟的时间范围。 目前SQL在“12”附近语法错误返回。“

如何将一个执行结果分配给一个SQLvariables?

如何将SQL调用的结果分配给SQL中的variables? 我有一个名为up_GetBusinessDay的存储up_GetBusinessDay ,它返回一个date。 你可以做这样的事情: exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

删除表中的所有行

通常我会做一个delete * from XXX但在这个表非常缓慢,它通常有大约500k到1m行(其中一个是一个varbinary(MAX),如果mathers)。 基本上,我不知道是否有一个快速的方法来emty所有内容的表,其实际上更快地删除和重新创build它,然后通过删除sql语句删除内容 我不想重新创build表的原因是因为它的使用和删除/重新创build我认为将销毁由sql server收集的索引和统计信息 我也希望有办法做到这一点,因为有一个“聪明”的方式,通过sys.sysindexes行数,所以即时通讯希望有一个equaly聪明的方式来删除内容

如何将string转换为dateT-SQL?

如何在T-SQL中将string转换为date? 我的testing用例是string: '24.04.2012'