当前位置: 首页 > 面试题库 >

声明查询字符串的变量

郎伟兆
2023-03-14
问题内容

我想知道在MS SQL Server 2005中是否有办法做到这一点:

  DECLARE @theDate varchar(60)
  SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

  SELECT    AdministratorCode, 
            SUM(Total) as theTotal, 
            SUM(WOD.Quantity) as theQty, 
            AVG(Total) as avgTotal, 
            (SELECT SUM(tblWOD.Amount)
                FROM tblWOD
                JOIN tblWO on tblWOD.OrderID = tblWO.ID
                WHERE tblWO.Approved = '1' 
                AND tblWO.AdministratorCode = tblWO.AdministratorCode
                AND tblWO.OrderDate BETWEEN @theDate
            )
 ... etc

这可能吗?


问题答案:

有可能,但是需要使用动态SQL。
我建议先阅读动态SQL的诅咒和祝福,然后再继续…

DECLARE @theDate varchar(60)
SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''

DECLARE @SQL VARCHAR(MAX)  
SET @SQL = 'SELECT AdministratorCode, 
                   SUM(Total) as theTotal, 
                   SUM(WOD.Quantity) as theQty, 
                   AVG(Total) as avgTotal, 
                  (SELECT SUM(tblWOD.Amount)
                     FROM tblWOD
                     JOIN tblWO on tblWOD.OrderID = tblWO.ID
                    WHERE tblWO.Approved = ''1''
                      AND tblWO.AdministratorCode = tblWO.AdministratorCode
                      AND tblWO.OrderDate BETWEEN '+ @theDate +')'

EXEC(@SQL)

动态SQL只是一条SQL语句,在执行前由字符串组成。因此,通常的字符串连接发生。每当您想以不允许的SQL语法执行某些操作时,都需要使用动态SQL,例如:

  • 单个参数表示IN子句的逗号分隔值列表
  • 一个既代表值又代表SQL语法的变量(IE:您提供的示例)

EXEC sp_executesql 允许您使用bind / preparedstatement参数,因此您不必担心为SQL注入攻击转义单引号/
etc。



 类似资料:
  • 问题内容: 看看这里找到的这个片段 我可以在中了解到,它有一个名为的var ,它的类型是var ,但是那东西呢 在int之后?这是什么意思?谢谢。 问题答案: 这是一个结构标记。库使用它们来用额外的信息注释结构域;在这种情况下,模块encoding / xml 使用这些struct标签来表示哪些标签对应于struct字段。

  • 问题内容: 这些声明和和之间有什么区别? 问题答案: 总是在堆上创建一个新对象 使用字符串池 试试这个小例子: 为避免在堆上创建不必要的对象,请使用第二种形式。

  • 问题内容: 如何声明用于PostgreSQL 8.3查询的变量? 在MS SQL Server中,我可以这样做: 我如何在PostgreSQL中做同样的事情?根据文档,变量被简单地声明为“名称类型;”,但这给了我一个语法错误: 有人可以给我一个正确语法的例子吗? 问题答案: PostgreSQL中没有这样的功能。您只能在pl / PgSQL(或其他pl / *)中执行此操作,而不能在普通SQL中执

  • 问题内容: 在Java中,当声明一个字符串变量时,单词“ String”被大写,但是我遇到的其他任何类型都不是(例如,“ int”或“ double”)。为什么是这样?设计师是否只是一些奇怪的任意决定? 问题答案: 为什么在Java中将字符串变量的声明大写? 该类型的资本,因为它是一个 类 ,象,而不是一个原始类型像或(其他类型,你可能跑过)。 作为一个类,遵循Sun提出的Java命名约定。简而言

  • 本文向大家介绍VBA 声明一个字符串常量,包括了VBA 声明一个字符串常量的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?为什么不分解为键/值集合? 编辑:我已经编写了自己的函数,但是任何主要的库都可以这样做吗? 问题答案: 是否有任何JavaScript库可以根据查询字符串,样式生成字典? 可以像这样使用的东西: “查询字符串”是否在.NET领域之外称为其他名称?