TL;DR:使用 Transact-SQL/SQL Server,如何找到表中与另一列中的某些值集的列值(ColA、ColB、ColC)的单个“解决方案”三元组相匹配的行?
更多信息:假设我有一个与此类似的表(为了获得焦点而删除了 ID 列):
| 火焰离子化检测器 | 可乐 | 科尔B | 科尔C |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 1 | 2 | 2 | 2 |
| 2 | 1 | 1 | 1 |
| 2 | 3 | 3 | 3 |
| 3 | 1 | 1 | 1 |
| 3 | 2 | 2 | 2 |
我试图找到 FID 的每个值都存在的 (ColA、ColB、ColC) 的共同三元组值。在此示例中,(1, 1, 1) 将是该三元组,因此我想返回类似以下内容的内容:
| 火焰离子化检测器 | 可乐 | 科尔B | 科尔C |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |
| 3 | 1 | 1 | 1 |
这感觉应该是某种使用的集合操作intersect,但我对如何最好地以声明方式对其进行建模和编码感到困惑。想法?非常感谢您的帮助!
澄清:几点希望有助于解释我的问题。
| 火焰离子化检测器 | 可乐 | 科尔B | 科尔C |
|---|---|---|---|
| 13 | 1 … |
今天我正在阅读一些很久以前做的数据库笔记。我看到了这个查询:
UPDATE Sales.Orders
SET (shipcountry, shipregion, shipcity)=
(SELECT country, region, city
FROM Sales.Customers AS C
WHERE C.custid =Sales.Orders.custid)
WHERE custid IN
(SELECT custid FROM Sales.Customers WHERE country = 'USA');
Run Code Online (Sandbox Code Playgroud)
我对这个语法真的很陌生。但我的注释说它是“有效的 SQL Server 更新语法”。这是真的?SSMS 无法解析它。当我尝试运行它时,我得到了这个:
另外,SQL Server 的UPDATE文档似乎建议在关键字(之后不允许使用SET。无论如何,我只是想确认一下。
我正在阅读这篇博客文章,其中包含一个查询,可以让您找到 a 何时DROP被解雇。我更改LIKE 'DROPOBJ%'为NOT LIKE 'DROPOBJ%'这样我可以返回更多行:
SELECT [Current LSN]
,[Operation]
,[Context]
,[Transaction ID]
,[Description]
,[Begin Time]
,[Transaction SID]
,[Transaction Name]
FROM fn_dblog (NULL,NULL)
INNER JOIN(SELECT [Transaction ID] AS tid
FROM fn_dblog(NULL,NULL)
WHERE [Transaction Name] NOT LIKE 'DROPOBJ%')fd ON [Transaction ID] = fd.tid
Run Code Online (Sandbox Code Playgroud)
该查询在 Azure SQL 数据库上轻松执行,但是当我尝试将SUSER_SNAME博客文章中所述的内容添加到代码中时:
SELECT [Current LSN]
,[Operation]
,[Context]
,[Transaction ID]
,[Description]
,[Begin Time]
,[Transaction SID]
,SUSER_SNAME ([Transaction SID]) AS WhoDidIt
FROM fn_dblog (NULL,NULL)
INNER JOIN(SELECT [Transaction ID] …Run Code Online (Sandbox Code Playgroud) 假设不使用 ORDER BY 子句,在实例化表并用连续插入填充表的 TABLE 值函数中,插入顺序是否具有确定性?
我需要查看发送给我们的给定数据集中使用的 Unicode 字符范围,以便弄清楚为什么 SSMS 中的查询结果中的某些空格(或者至少在眼睛看来是空格)没有被使用。在某些解析例程中,其行为类似于 char(32)。因此,我编写了一个快速而肮脏的函数,将相关列中的字符串值转换为一组可以查询的元组:
create function [foo].[AllChars]
(@in nvarchar(max))
returns @t TABLE (c nchar(1))
as
begin
declare @i int;
while len(@in)>0
begin
insert @t(c) values (left(@in,1));
set @in = substring(@in, 2, len(@in)-1)
end
return;
end
Run Code Online (Sandbox Code Playgroud)
可以这样称呼:
select X.c theChar, unicode(X.c) uValue
from myTable T
cross apply foo.AllChars(T.myCol) X
Run Code Online (Sandbox Code Playgroud)
并将为myTable中的每一行返回一组元组:
t 116
h 104
e 101
32
c 99
a 97
t 116
10 <= culprit
i 105
n 110
32 …Run Code Online (Sandbox Code Playgroud) sql-server determinism t-sql set-returning-functions non-deterministic
今天早些时候,我意识到我犯了一个非常愚蠢的错误。我没有编写视图,而是编写了无参数内联表值函数。这让我思考:除了界面之外,两者之间有什么区别吗?据我所知,它们在逻辑上是相同的并且执行相同。
那么,换句话来说,视图提供了哪些无参数内联表值函数所没有的功能呢?我想到的只是索引视图,但我从未见过有人真正使用它们。
我应该将过滤器放在 TSQL 查询的什么位置?
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID AND B.STATUS = 1
Run Code Online (Sandbox Code Playgroud)
或者
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID
WHERE B.STATUS = 1
Run Code Online (Sandbox Code Playgroud)
我正在寻找性能问题或良好做法。
我们正在将数据从旧表(所有 varchar 字段)移动到强类型的对应提示中
作为这项工作的一部分,如果所有数据都可以正确转换为适当的类型,我们将从基础实体表中获取数据并将其转储到 Entity_New 中。否则,它将进入名为 Entity_Bad 的现有表的副本。
我们有一个规则引擎,可以在理论上验证数据和类型,因此即使数据存储在字符字段中,数据也应该是干净的。现实是我在这里发帖是因为有些事情已经过去了,我找不到了。Entity 中的 CompletionDate 字段是 varchar(46) NULL
环境是
productversion productlevel edition
10.0.4064.0 SP2 Enterprise Edition (64-bit)
Run Code Online (Sandbox Code Playgroud)
我的脚本展示了我在做什么以及什么在起作用但没有起作用
SET NOCOUNT ON
DECLARE
@startid int = 0
, @stopid int = 796833
-------------------------------------------------------------------------------
-- Check doesn't find anything wrong with CompletionDate
-------------------------------------------------------------------------------
SELECT
1
FROM
[dbo].[Entity] E
INNER JOIN
dbo.EntityBatch_New PB
ON E.FiscalYear = PB.FiscalYear
AND E.HashCode = PB.HashCode
AND E.AAKey = PB.AAKey
AND PB.ProcessResultCode IN ('A','W','M')
WHERE
PB.EntityBatchId BETWEEN @StartId AND @StopId
AND …Run Code Online (Sandbox Code Playgroud) 除了COUNT(*)使用WHERE子句调用之外,有什么方法可以使这项工作在服务器上更有效?我想对复杂的连接进行计数,只是想知道这样做的最佳方法。使用SET NOCOUNT OFF? 因为SET NOCOUNT ON在新的存储过程中默认启用,我猜是微软建议的。谢谢你。
performance sql-server-2008 sql-server t-sql query-performance
是否可以强制SQL Server 2008 R2自动FULLSCAN更新统计信息?
如果没有,计划UPDATE STATISTICS WITH FULLSCAN是保持最新统计数据的最佳方式吗?
注意:FULLSCAN当使用非FULLSCAN统计时,需要通过证明次优计划生成来实现。
我正在尝试在可变长度字符串中找到所有可能的字符组合。
例如:“--”将有 2^n = 2^2 = 4 种可能性,“x-”、“-x”、“xx”、“--”
我认为基本上我需要循环 c(2,2) + c(2,1) + c(2,0) 其中 c(n,r) = n!/ (r! * (nr)!) 但是我在使用 cte 处理事情时遇到了麻烦。到目前为止,随着您向字符串添加字符,一切都开始崩溃了。
使用数字表 -
declare @s varchar(15)
set @s = '--'
;with subset as (
select cast(stuff(@s,number,1,'x') as varchar(15)) as token,
cast('.' + cast(number as char(1)) + '.' as varchar(11)) as permutation,
cast(1 as int) as iteration ,
number
from numbers where number between 1 and len(@s)
union
select @s, '.0.', 1, 0
) ,
combination as ( …Run Code Online (Sandbox Code Playgroud) t-sql ×10
sql-server ×9
azure ×1
datetime ×1
determinism ×1
functions ×1
performance ×1
syntax ×1
update ×1
view ×1