奇怪的SQL查询

时间:2013-06-18 18:25:54

标签: sql tsql sql-server-2005

我在一些继承的代码中遇到了这个tsql:

DECLARE @a NVARCHAR(1000) ,
    @b NVARCHAR(4)
SET @b = ( SELECT   RIGHT(CAST(SQL_VARIANT_PROPERTY('#', 'basetype') AS VARCHAR(7)),
                          4)
         )
SET @a = SUBSTRING(object_definition(OBJECT_ID('sys.sp_columns')), 399, 6)
    + ' ' + @b + '(' + REPLACE(REPLACE(REPLACE('^523101239923^42310123^623^5',
                                               '^', '11'), '3',
                                       ' + ' + @b + '('), '2', ')')
    + ') '' '''
EXEC sp_executesql @a 

它将结果“秘密”输出到查询窗口(可能是一个笑话?)。我不知道为什么要编写这个代码或者是谁编写代码。有人可以试着向我解释它是如何工作的吗?它有什么用处或者我可以把它撕掉吗?

2 个答案:

答案 0 :(得分:2)

这是生成和执行查询的一种非常迂回的方式:

select char(115) + char(101) + char(99) + char(114) + char(101) + char(116) + char(115) ' '

这是另一种写作方式:

select 'secrets' as ' '

它是否有用取决于如何调用此查询 - 是否可能比应用程序调用它来获取(非常差的)密码或加密密钥?

答案 1 :(得分:2)

请稍等一下,

select sql_variant_property('#','basetype') = 'varchar'
select right('varchar',4) = 'char'
select object_definition(object_id('sys.sp_columns')) = [sys.sp_colums tsql]
select substring(sys.sp_colums tsql,399,6) = 'select'

这样:

@a = 'select select char(115) + char(101) + char(99) + char(114) + char(101) + char(116) + char(115) ' ''

exec sp_executesql @a  = 'secrets'

这基本上是某人有一些额外的时间在他们手上并且想要制造过于复杂的东西的情况。可能认为这很有趣。

我希望它没有被使用。