“数组参数”SQL

2024-03-17

我有一个表,其中包含呼叫数据记录,每个呼叫都有一个呼叫数据记录,其中一个字段是我们在查询数据库时使用的 CallerId。

我们使用下面的 TSQL 来模拟数组参数,这是正确的方法还是我们已经走得太远了?

ALTER PROCEDURE [dbo].[spStudio_Get_Smdr]
    @beginTime INT,
    @endTime INT,
    @subscribers VARCHAR(MAX) = NULL,
    @exchanges VARCHAR(MAX) = '1:',
    @beginDateValue int, 
    @endDateValue int
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @exch TABLE(Item Varchar(50))   
    INSERT INTO @exch
    SELECT Item FROM [SplitDelimitedVarChar] (@exchanges, '|') ORDER BY Item


    DECLARE @subs TABLE(Item Varchar(19))
    INSERT INTO @subs
    SELECT Item FROM [SplitDelimitedVarChar] (@subscribers, '|') ORDER BY Item

    SELECT
      ,[Level]
      ,[Timestamp]
      ,[EndYear]
      ,[EndDate]
      ,[EndTime]
      ,[CallingNumber]
      ,[DialledNumber]
      ..more fields between
      ,[DateValue]
      ,[TimeValue]
  FROM [SmdrFormat] AS S
    WHERE
        (S.[DateValue] BETWEEN @beginDateValue AND @endDateValue)
    AND
        (S.[TimeValue] BETWEEN @beginTime AND @endTime)
    AND
        EXISTS(SELECT [Item] FROM @exch WHERE [Item] = S.[Level])
    AND
        (@subscribers IS NULL OR (EXISTS(SELECT [Item] FROM @subs WHERE [Item] = S.[CallingNumber]
                                            OR [Item] = S.[DialledNumber])))

END

我正在使用表变量来存储我从中拆分的临时表和 |我们作为参数传入的分隔字符串。 SplitDelimitedVarChar SQL 函数分割 VarChar 并返回 Table 变量。时间和日期值存储为整数。

WHERE 子句中使用的所有字段都已建立索引。

当分隔字符串参数很短时,这种方法效果很好,但当它变大时(最多由 | 分隔的数百个字符串),执行查询需要相当长的时间。

因为我显然不是 SQL 专家,所以我觉得可能有人可以告诉我我是否真的很糟糕 att SQL 或者只是有某些部分错误?任何建议表示赞赏

提前致谢 约翰


看一眼SQL Server 中的数组和列表 http://www.sommarskog.se/arrays-in-sql-2005.html作者:厄兰·索马斯科格

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“数组参数”SQL 的相关文章

  • 如何在存储过程中查找数据表列引用

    我更改了 SQL Server 2005 数据库表中的列名称 我还有一个相当大的存储过程集合 它们可能引用也可能不引用该列 有没有办法找到哪些存储过程引用该列 而无需实际遍历每个存储过程并手动搜索它 有没有办法自动查找哪些存储过程现在会中断
  • 将多个子查询作为值插入

    假设我要插入一个有很多 fk 的表 只是为了在下面解释一下错误的说法 insert into mytable values somevalue somevalue select id from othertable1 where condi
  • SELECT * FROM (VALUES (x,y)) AS TableLiteral(Col1, Col2) 的名称

    以下是有效的 SQL 语法 SELECT FROM VALUES p q x y AS TableLiteral Col1 Col2 并返回表 Col1 Col2 1 p q 2 x y 此语法可以进一步用于 CTE 等 这个有名字吗 我通
  • 带逗号和句点的 SQL Server 2005 货币格式

    有没有办法在 SQL Server 2005 中转换货币字段以对其进行格式化 例如 该字段包含 99966 00 我们希望以这种格式返回 99 966 00 convert varchar cast SalesProducts Price
  • SQL Server 2008中的分割函数

    I have Table1像这样的列 ID Name 1 MSSQL 2 MySQl 3 Oracle In Table2 我有一个像这样的专栏 Databasename 1 3 2 1 2 我的输出应该是 Databasename MSS
  • 范围身份与当前身份

    经过大量研究后 我对应该在 sql 中使用哪个身份跟踪器有点困惑 据我了解 scope identity 将为我提供从任何表更新的最后一个 id 而 ident current 将返回指定表中的最后一个 id 因此 考虑到这些信息 在我看来
  • SQL删除具有重复值的行同时保留一个

    假设我有这张桌子 id data value 1 a A 2 a A 3 a A 4 a B 5 b C 6 c A 7 c C 8 c C 我想删除每个数据具有重复值的行 同时保留具有最小 id 的行 例如结果将是 id data val
  • SQL Server 条件流

    如果我写两个SELECT中的语句IF EXISTS条件与AND这些选择查询之间的子句 即使第一个查询是否都会执行两个查询SELECT返回假 IF EXISTS SELECT AND EXISTS SELECT BEGIN END 在这种情况
  • SQL Server 表不使用默认值

    我正在使用 SSIS 包填充表 这个想法是 每当包上传到表时 它都会使用时间戳记该值getdate 当我打开它时 我的 DDL 看起来像这样 CREATE TABLE REPORTING post ssis table 1 validati
  • 如何中止触发器中的多行插入

    使用 SQL Server 2005 我已经声明了一个触发 AFTER INSERT UPDATE 的触发器 在这个触发器中 我使用 WHILE 和 CURSOR 在 INSERTED 表的行上循环 当我发现一行不满足特定条件时 我希望触发
  • 如何将 Byte[] 转换为数据以在 SQL Server 中的 varbinary(max) 列中插入值?

    我有一个对象byte 属性 我想将此值转换为正确的值 以便可以使用 T SQL 将其插入数据库 但我不知道如何转换byte 为 T SQL 插入的正确值 Thanks 创建一个控制台应用程序项目并尝试此代码 Sample Class pub
  • 在 Java 中实现 SQL CHECKSUM

    我在 SQL Server 2008 中有一个现有数据库 它通过存储过程为现有 PHP Web 应用程序执行用户身份验证 Web 应用程序向存储过程发送一个字符串 无论存储过程如何存储 并使用 SQL Checksum 检查该值 http
  • 在创建 IDENTITY 的同一个 T-SQL 语句中获取 IDENTITY 值?

    有人问我是否可以有一个插入语句 其中有一个作为 身份 列的 ID 字段 以及分配的值是否也可以插入到同一插入语句中同一记录中的另一个字段中 这可能吗 SQL Server 2008r2 Thanks 你不能真正做到这一点 因为将用于的实际值
  • 对存储过程内容的只读访问

    是否可以设置 SQL Server 来为开发人员提供对生产数据库上存储过程内容的只读访问权限 您可以授予他们VIEW DEFINITION这些进程的特权 See here http msdn microsoft com en us libr
  • 在 SQL Server 中创建层次结构

    我有以下格式的数据 Table 1 e id e name e type 1 CBC 2 2 ABC 3 3 N2 1 4 CBC1 3 5 ABC1 3 6 N1 1 Table 2 N ID N Name 3 N2 6 N1 Table
  • 使用 IF..ELSE IF 控制 T-SQL SP 中的流程 - 还有其他方法吗?

    我需要将我的 T SQL 存储过程 MS SQL 2008 控制流分支到多个方向 CREATE PROCEDURE fooBar inputParam INT AS BEGIN IF inputParam 1 BEGIN END ELSE
  • 如何在 T-SQL 中实现 ZIP JOIN?

    假设我有表 Foo Id Color 1 Red 2 Green 3 Blue 4 NULL 和表 Bar Value 1 2 5 我想使用简单的语句创建表 Result 来获取 Id Color Value 1 Red 1 2 Green
  • T-SQL:如何使用 SELECT 创建表?

    在 oracle 中 您可以发出 create table foo as select from bar 等效的 T SQL 语句是什么 您可以使用SELECT INTO http msdn microsoft com en us libr
  • 重命名重复行

    这是我的问题的一个简化示例 我有一个表 其中有一个包含重复条目的 名称 列 ID Name 1 AAA 2 AAA 3 AAA 4 BBB 5 CCC 6 CCC 7 DDD 8 DDD 9 DDD 10 DDD 进行 GROUP BY 操
  • 单独的逗号分隔值并存储在sql server的表中

    我有一个存储过程 它将逗号分隔的值作为输入 我需要将其分开并需要将其作为单独的行存储在表中 令 SP 的输入为 Rule ID ListType ID Values 1 2 319 400 521 8465 2013 我需要将它存储在一个名

随机推荐

  • 如何在 MPAndroidChart 中向 x 轴和 y 轴添加字符串标签

    I am trying to add a String Label in order to label both the domain x axis and the range y axis of my LineChart as shown
  • Django:GenericForeignKey 中的 content_type_id

    我根据文档编写了这个类 以便能够对应用程序中具有 id 的任何内容进行投票 class Vote models Model class Meta unique together voted id voter id content type
  • take 2 $ [1..] 在 haskell 中如何工作?

    我们知道 运算符绑定的是最松散的 并且也关联到右侧 这意味着 1 应该首先被评估 因此 它不应该陷入无限循环吗 为什么它甚至完全停止了 Haskell is lazy and doesn t change that The operator
  • 适用于 C++ 的最佳开放式 XML 解析器是什么? [复制]

    这个问题在这里已经有答案了 我正在寻找一个简单 干净 正确的 XML 解析器来在我的 C 项目中使用 我应该自己写吗 怎么样RapidXML http rapidxml sourceforge net RapidXML 是一个用 C 编写的
  • C++:全局变量作为指针

    我是 C 新手 对全局变量有一个问题 我在许多示例中看 到全局变量是带有堆地址的指针 所以指针位于全局 静态变量的内存中 地址后面的数据位于堆上 对吗 相反 您可以声明存储数据的全局 无指针 变量 因此 数据存储在全局 静态变量的内存中 而
  • Grails - 将 HTML 文件作为 UTF-8 提供?

    通过 tomcat 通过 web app 提供的 html 文件的 UTF 8 被破坏 如果我直接打开文件file 它渲染得很好 如果我在运行应用程序期间查看该文件 它看起来不错 然而 当我部署为战争时 UTF 8字符出现乱码 响应的内容类
  • 如何内省地将处理程序连接到信号?

    gtk Builder http www pygtk org docs pygtk class gtkbuilder html能够识别 GUI 在 XML 文件中描述 可以发出的所有信号 并使用以下方法连接信号 http www pygtk
  • 状态栏中图标的颜色(Flutter)

    我正在使用 FLUTTER 设计指的是状态栏的黑色 并且状态栏图标的颜色必须是白色 那么如何改变 flutter 中状态栏图标的颜色呢 要改变icon白色尝试以下内容build method import package flutter s
  • 在 Rails 中清理迁移的好方法是什么?

    所以我已经在这个 Web 应用程序上工作了一年 我想将模式编译为一个迁移 这样我的文本编辑器加载速度更快 git 工作目录也不会那么混乱 搜索查找会更快 我的任何配置 数据库都不会长 4000px 迁移服务器后 请删除迁移文件 如果您想开始
  • CSV 标准 - 多个表

    我正在开发一个 python 项目 对 csv 文件进行一些分析 我知道 csv 文件没有明确定义的标准 但据我了解定义 https www rfc editor org rfc rfc4180 page 2 https www rfc e
  • 以编程方式控制 Angular-ui 手风琴的好方法是什么?

    我正在使用手风琴指令http angular ui github com bootstrap http angular ui github com bootstrap 我需要更好地控制手风琴何时打开和关闭 更准确地说 我需要手风琴组内的一个
  • ggplot2:如何通过多个变量为图表着色

    我相当确定我在某处看到了这个问题的解决方案 但由于我无法找到它 这就是我的问题 我有一些由多个变量标识的时间序列数据 我希望能够使用多个变量来绘制图表并区分颜色ggplot2 样本数据 date lt c 2016 04 01 UTC 20
  • Symfony2 跨多个应用程序共享用户

    我有多个 symfony2 应用程序 它们共享公共实体 但使用不同的数据库设置 每个数据库都有表user user role and role 问题是 我希望该用户能够登录app1通过访问www myproject com app1 log
  • 从另一个类启动 JavaFX 应用程序

    我需要从另一个 容器 类启动 javafx 应用程序并调用应用程序上的函数 但似乎没有任何方法可以获取对使用 Application launch 方法启动的应用程序的引用 这可能吗 谢谢 假设这是我们的 JavaFX 类 import j
  • 在 Erlang 中确定传入 TCP/IP 连接的 IP 地址和端口

    我想获取传入 TCP IP 连接的 IP 地址和端口号 很遗憾gen tcp s accept and recv函数只返回一个套接字 而gen udp s recv函数还返回地址信息 有没有一种简单的方法来收集属于 Erlang 中套接字的
  • 调整控制台事件的大小

    所以我认为窗口调整大小事件将通过 winproc 进行 我可能是错误的 希望获得控制台调整大小事件的通知 我想在调整大小时最大化控制台缓冲区 一旦完成 基本上将其缩小回窗口大小 从而防止由于缓冲区小于窗口而导致溢出错误 不幸的是 答案是你无
  • 如何用空字符串替换未定义

    我正在使用jsPdf 当字段留空时 pdf 上会打印 未定义 我想用空字符串替换它 我正在尝试使用 if 语句 但我没有得到它 doc text 30 190 Budget if scope currentItem JobOriginalB
  • EF/Postgresql 数据库优先方法可能吗?

    经过几个小时的搜索 我有点失望 任何人都可以确认 或不确认 在现有的 Postgres SQL 数据库中可以使用 EF 数据库优先方法 我的意思是 使用 VS EDMX degigner 吗 一些要求 我想使用 ngsql 提供程序 因为它
  • Raspberry Pi 2 上的 Google Assistant SDK

    Google Assistant SDK 是否也可以在 Pi 2 Model B ARM Cortex A7 32 位处理器 上运行 或者是 Pi 3 Model B ARM Cortex A53 64 位处理器 吗 和跑步 它在 Rasp
  • “数组参数”SQL

    我有一个表 其中包含呼叫数据记录 每个呼叫都有一个呼叫数据记录 其中一个字段是我们在查询数据库时使用的 CallerId 我们使用下面的 TSQL 来模拟数组参数 这是正确的方法还是我们已经走得太远了 ALTER PROCEDURE dbo