问题标签 [table-variable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3932 浏览

sql - 如何将值列表存储为变量以执行多个 SQL 查询?

有没有办法将 WHERE 子句语句存储为可调用变量?

我需要使用不同的“日期”和“ID”值运行大约 20 次以下查询,但“代码”值将保持不变。但是,在 20 次查询之后,我需要将“代码”值更改为另一组值并使用相同的 20 个“日期”和“ID”组合。

我正在使用 SQL Server Management Studio 2012。

编辑:这实际上是一个子查询,我可以计算由此产生的记录数。每个计数查询都与其他计数查询联合,因此我可以一次执行所有查询并让结果显示 1 列的计数。我想知道如何制作一个包含每列特定于“代码”集的结果的 excel 表,但我还没有研究过。

我的代码值如何变化:

还有另外2个Code列表,共5个,涉及BETWEEN、IN、=语句。如果有帮助,我也可以发布这些,但它们遵循与上述相同的声明方式。

日期值适用于日历年或季度。ID 值通过 IN、NOT IN 或 = 表示。它们都是 char、varchar、tinyint 或 date。

替代方案:我可以一遍又一遍地复制和粘贴代码,但想提高我的编码能力。此外,查找和替换仅读取单行。我无法让它适用于多行,例如 WHERE 子句。我听说过正则表达式,但不知道如何使用它们来做我想做的事。

谢谢您的帮助!

0 投票
1 回答
903 浏览

sql - SQL 表变量 - 添加检查匹配行集是否存在的约束

更新 pmbAustin 的建议

pmbAustin,谢谢。我认为这会奏效。我创建了一个返回 0 或 1 的函数“dbo.CK_WinteamSportExists”。但是我现在收到了令人费解的错误消息。当我测试我的解决方案时,我得到以下信息:

错误消息:消息 4121,级别 16,状态 1,行 1 找不到列“dbo”或用户定义的函数或聚合“dbo.CK_WinteamSportExists”,或者名称不明确。

我尝试使用完全限定名称“mydatabase.dbo.CK_WinteamSportExists”,没有骰子。
看来我在检查中的语法错误,但在我的一生中我找不到错误。

原始问题
我正在尝试对表变量强制执行参照完整性。我在 SQL Server 2012 中工作。

@GameID_Table 中 WinTeamID/SportID 和 LoseTeamID/SportID 的组合必须受到单独表 Link_TeamSport 中存在匹配行的约束,该表定义为:

通常我会使用复合外键来执行此操作,但是表变量中不允许使用这些外键。
我还尝试创建用户定义的函数来检查 Link_TeamSport 中是否存在匹配的行,但表变量中也不允许使用 UDF。

这是一个说明我的约束条件的工作代码示例。如果找到匹配的行,则下面的代码返回结果 1,否则返回 0。但是,我无法弄清楚如何将此概念合并到@GameID_Table 中的检查约束中。

0 投票
2 回答
1259 浏览

sql - T-SQL:创建具有灵活结构的临时表/表变量

我正在开发一个基于 SQL 的报告项目,但我限制了对数据库的访问;我只能进行 SELECT 查询并将检索到的数据插入到临时表/表变量中。我无法创建/执行存储过程或任何类型的函数。

我正在运行的查询旨在将所有工程师以及他们拥有的不同关键技能汇集在一起​​​​,以便我们稍后可以查看每个工程师拥有哪些技能或哪些工程师属于某种技能。

为此,我正在尝试创建一个具有灵活结构的表变量/临时表,该结构基于先前在同一查询中获得的值。

例如

第一个输出:亚当·布拉德·胡里奥·马丁内斯

第二个输出(以空格分隔的技能):VOIP TTS DBA Exchange Server

创建使用第一个输出作为行和第二个输出作为列的临时表/表变量,反之亦然。然后,我将根据主数据库上的不同值填充这个新表。

请告知如何做到这一点,或提供任何其他解决此问题的方法。谢谢

0 投票
2 回答
1132 浏览

sql - SQL Server 从表变量更新

最终编辑 - 已解决 - 下面的解决方案

我不敢相信我不知道这一点,但显然问题在于表变量和真实表都具有相同的名称:@CHECKERS 和 dbo.CHECKERS。触发器显然混淆了两人。我通过更改触发器中的插入和更新操作的顺序发现了这一点,以便在从表变量更新之后插入到真实表中。突然,更新开始毫无问题地通过。

当然,我只创建了 dbo.CHECKERS 来调试@CHECKERS,所以很明显存在一些原始问题,这一切都开始了;但无论如何,问题已经解决,触发器工作正常。我在下面发布它,所以如果您愿意,请随时提供任何反馈。我不是专家(显然),并且总是很高兴收到建设性的反馈。

感谢大家的帮助和评论。我希望这篇文章可以帮助那里的人避免头痛...

查询 - 解决方案

结束查询 - 解决方案

--------开始原始帖子--------

我有一个客户需要我修改一堆执行各种功能的旧触发器。一般来说,我不赞成这一点,并认为他们的程序应该更新——但无论如何。

存在三个触发器,我只需将它们组合成一个触发器,它工作得更顺畅一些,并且有更多的条件。(目前,完全缺乏条件使得触发器在每次操作时都会运行,这看起来非常缓慢。)

简而言之,我创建了一个新触发器,在其中声明了一个表变量(下面的查询)。我这样做是为了让自己直接控制列名,而不是简单地使用 SELECT X INTO #temp。此后,我尝试使用 CASE 检查来更新主表中的各个字段,具体取决于我的表变量中记录的更改。

问题是更新没有做任何事情。我没有收到任何错误,但主表中的值保持不变。为了确保表变量正在获取值并且它们可供使用,我向测试数据库添加了一个新表,并在每次触发触发器时将表变量中当前包含的值插入到新表中,如下所示:

当然,实际触发器中还有更多更新,但您明白了。

任何想法为什么订单的更新没有通过?可能是一些小的、愚蠢的、令人尴尬的事情——但我再说一遍,无论如何;)谢谢。

--------结束原帖--------

- 编辑:

我也尝试过这样编写更新:

这种方法给出了相同的结果:没有错误消息(或任何其他消息,就此而言),并且没有更新......

-- 第二次编辑:

如果我使用实际表 CHECKERS 而不是表变量 @CHECKERS,则更新通过:

无论 JOIN 中是否存在 Orders,这也有效:

现在唯一的问题是,在客户的数据库中,我无法添加真正的表 CHECKERS。我将它添加到我的测试数据库中只是为了澄清这些值是否传递到表变量中!这是我不熟悉的表变量的限制吗?我很难在在线文档中找到任何此类限制......

0 投票
1 回答
212 浏览

sql - 无法访问 sql 中查询的表值参数

我在单个存储过程中有两个查询。我有一个表值参数和我用于两个查询的 TVP。我的一个查询工作正常(更新查询工作正常),但如果我使用相同的 TVP 进行插入查询,那么它不会向其中插入值。我不知道发生了什么并且错误也不会出现。

这是我的查询:

我的表看起来像这样 在此处输入图像描述

我是否要更改提供给插入查询的参数序列。请对此提出您的建议

0 投票
2 回答
143 浏览

sql-server-2005 - 仓库中使用的物理表是临时表。有什么优势吗?

正如我在之前的文章中所说,我继承了一个基于 SQL Server 框架的仓库。

在对现有组件和前人采用的做法的不断审查中,我发现了一些引起我注意并让我惊讶的事情:有几个地方正在使用物理表作为临时表来操作大量数据。第一反应是认为这种做法对 DBMS 来说非常昂贵,但希望对此有更多反馈。

关于这个主题的一些注释:

  • 在 SP 中创建/删除的物理表(称为“TMP_TableName”的表)
  • 主要用于处理大量数据的表格
  • 每天夜间处理期间多次提及的 SP 呼叫

问题:

  1. 这种做法是否为我不知道的处理程序带来了任何好处?
  2. 有没有这方面的最佳实践?
  3. 我的计划是更新代码以使用#temp 表来提高性能。对此有何评论?
  4. 我应该考虑使用变量表吗?我读到在处理大数据时性能很差。

我很感激任何基于您的知识/经验的反馈,您可能想与所有stackoverflowers分享。

提前致谢,

0 投票
1 回答
1164 浏览

sql - 具有只读访问权限的 Sql 虚拟表:插入、删除、更新?

2个问题:

  1. 我能否使用对数据库具有只读访问权限的用户创建虚拟表?

前任:

  1. 我是否能够使用对数据库具有只读访问权限的用户创建的虚拟 sql 表中插入、删除和更新数据?

前任:

0 投票
1 回答
546 浏览

sql-server-2008 - SSIS - 在多个并行任务中使用表变量

我正在处理具有以下逻辑的 T-SQL 脚本:

...依此类推,有 5 个插入来自链接服务器 link2 的 5 个不同的本地表,但使用来自链接服务器 link1 的 @tbl 过滤。

填充每个本地表大约需要 30 分钟,因此整个脚本需要大约 2.5 小时。

我正在尝试并行化此过程,因此我将 5 个插入中的每一个放入单独的 SSIS 任务中并同时执行它们。但是,我不知道如何在 SSIS 中的任务之间共享 @tbl 表变量。在脚本中,@tbl 只是一个变量。在 SSIS 中没有表变量。顺便提一句。该表包含大约 200K id 值,因此无法构建逗号分隔的字符串。

所以问题是:如何实现一个共享的、“一次性的”、包级别的记录集对象,该对象将从数据库查询中初始化,然后用于同一个包中的几个并行任务?

我在 SQL Server 2008 R2 上。

0 投票
1 回答
339 浏览

sql-server - 替换保留字列表中的列文本

我有一个表变量,其中包含要从查询结果中替换的单词列表。

我想600在表变量中搜索这些词中的任何一个。我只是为了这个例子做了3。然后,如果找到的话,我想替换它。我得到了结果,但每个字都重复。我有一个 UDF,它采用公司名称中的每个单词并查看它是否匹配。

这回归...

我想让它只返回一个结果,并且“LLC”和“Inc”都将被删除,因为这些词在保留词表变量中。所以字符串“Sony LLC Inc”

将会...

0 投票
2 回答
913 浏览

sql - 有人可以给我一个实时示例,其中包含我在 stackexchange 中找到的以下临时表和表变量示例

临时表和表变量之间的区别如下:

上的操作@table_variables作为系统事务执行,独立于任何外部用户事务,而等效#temp table操作将作为用户事务本身的一部分执行。出于这个原因,ROLLBACK命令将影响 a#temp table@table_variable保持不变。

谁能告诉我什么时候会实时使用上述应用程序/场景?谁能给出一个实时的例子。谢谢

PS - 从此链接引用:https ://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server/16386#16386