相关疑难解决方法(0)

SQL Server:查找丢失 ID 的有效方法

我正在使用 SQL Server 来存储数千万条记录。我需要能够查询其表以查找 Id 列中存在间隙的缺失行,因为应该没有间隙。

我目前正在使用我在 StackOverflow 上找到的解决方案:

CREATE PROCEDURE [dbo].[find_missing_ids]
    @Table NVARCHAR(128)
AS
BEGIN
    DECLARE @query NVARCHAR(MAX)
    SET @query = 'WITH Missing (missnum, maxid) '
+ N'AS '
+ N'('
+ N' SELECT 1 AS missnum, (select max(Id) from ' + @Table + ') '
+ N'    UNION ALL '
+ N'    SELECT missnum + 1, maxid FROM Missing '
+ N'    WHERE missnum < maxid '
+ N') '
+ N'SELECT missnum '
+ N'FROM Missing ' …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

1
推荐指数
1
解决办法
1486
查看次数

生成两个数字之间的数字范围

我可以使用查询的一些帮助来扩展我正在使用的CSV,但我不知道处理查询的最佳方法.我的数据如下:

ID-Begin | ID-End | Color | Dwelling
-------------------------------------
79000    | 79999  | Red   | Condo
82100    | 82600  | Blue  | House
etc
Run Code Online (Sandbox Code Playgroud)

我需要在起始ID和结束ID之间生成一个范围,然后复制该范围的颜色和居住条目.这是我希望实现的目标:

 ID   |  Color  | Dwelling
------------------------
79000 |  Red    | Condo
79001 |  Red    | Condo
79002 |  Red    | Condo
.....
79999 |  Red    | Condo
82100 |  Blue   | House
82101 |  Blue   | House
.....
82600 |  Blue   | House
Run Code Online (Sandbox Code Playgroud)

我已经看到其他方法允许我生成单个数字范围,但没有任何方法可以从表中的列中提取开始和结束数字.

无论如何帮助非常感谢!!

风暴

sql t-sql sql-server

0
推荐指数
2
解决办法
2750
查看次数

返回接下来的 10 天,包括工作日名称

寻找一个查询或函数,对于给定的日期,它将返回接下来的 10 天(包括给定的日期作为参数)作为两列: - 日期 - 工作日名称

我正在使用 SQL Server 2019。

更新(@Dale K):我已经计算了日期和工作日,但这些是作为两个单独的查询和新行而不是多行

declare @mydate datetime
set @mydate = '2020-1-1'

select @mydate + 0, @mydate + 1, @mydate + 2, @mydate + 3, @mydate + 4, @mydate + 5, @mydate + 6

select
datename(dw, @mydate + 0),
datename(dw, @mydate + 1),
datename(dw, @mydate + 2),
datename(dw, @mydate + 3),
datename(dw, @mydate + 4),
datename(dw, @mydate + 5),
datename(dw, @mydate + 6)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

0
推荐指数
1
解决办法
655
查看次数

需要帮助来修改我的SQL代码

我想datetime在SQL Server 2000中生成范围.我想要与2000,2005和2008兼容的东西.如果它与2012兼容,那也会很棒.

所以,我在这里找到了答案 - 在日期范围之间生成日期.但是,我想要两列而不是1.我想要一个开始日期列和一个结束日期列.如何修改下面的查询才能获得它?

-- Declarations

DECLARE @dates TABLE(dt datetime)    
DECLARE @dateFrom datetime
DECLARE @dateTo datetime

SET @dateFrom = '2001/01/01'
SET @dateTo = '2001/01/12'

-- Query:

WHILE(@dateFrom < @dateTo)
BEGIN
   SELECT @dateFrom = DATEADD(day, 1,@dateFrom)
   INSERT INTO @dates 
   SELECT @dateFrom
END

-- Output

SELECT * FROM @dates
Run Code Online (Sandbox Code Playgroud)

我的代码 -

DECLARE @dates TABLE(StartDate datetime, EndDate datetime)    
DECLARE @dateFrom datetime
DECLARE @dateTo datetime
DECLARE @StartDate datetime
DECLARE @EndDate datetime

SET @dateFrom = '2001/01/01'
SET @dateTo = '2001/01/12' …
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2005

-3
推荐指数
1
解决办法
143
查看次数

标签 统计

sql-server ×3

t-sql ×3

sql ×2

sql-server-2005 ×1