【问题标题】:Populating table with cte using sequence (NEXT VALUE FOR) SQL Server Managment Studio使用序列 (NEXT VALUE FOR) SQL Server Management Studio 使用 cte 填充表
【发布时间】:2021-12-07 19:49:08
【问题描述】:

我正在尝试填充表格。

这是代码

WITH cte_Filters AS
(
    SELECT *
    FROM (
        VALUES (NEXT VALUE FOR dbo.AutoIncrementNumberSequence, 1, 5),
               (NEXT VALUE FOR dbo.AutoIncrementNumberSequence, 8, 2),
               (NEXT VALUE FOR dbo.AutoIncrementNumberSequence, 3, 1),
               (NEXT VALUE FOR dbo.AutoIncrementNumberSequence, 5, 7),
               (NEXT VALUE FOR dbo.AutoIncrementNumberSequence, 6, 5)
    ) q1 (ID, ProductID, TagID)
)
--insert into dbo.Filters(FilterID, ProductID, TagID)
SELECT s.* 
FROM cte_Filters AS s
LEFT JOIN dbo.Filters AS d ON s.ID = d.FilterID
WHERE d.FilterId IS NULL;

我收到此错误:

第 22 行:NEXT VALUE FOR 函数不允许在检查约束、默认对象、计算列、视图、用户定义函数、用户定义聚合、用户定义表类型、子查询、公用表表达式、派生表或返回语句。

我知道这是因为我在子查询中使用了 NEXT VALUE FOR 但我不知道如何以超出子查询的方式重建它。任何帮助将不胜感激!

【问题讨论】:

  • 您想通过查询实现什么目标?假设你没有重置你的序列,这个条件 (LEFT JOIN dbo.Filters AS d ON s.ID = d.FilterID) 怎么可能匹配?

标签: sql-server sequence populate


【解决方案1】:

根据我的评论,我完全不确定您要达到什么目标,但您可以尝试以下方法:

DECLARE @Blah AS TABLE( ID INT, ProductID INT, TagID INT )
INSERT INTO @Blah( ProductID, TagID ) VALUES( 1, 5 ), ( 8, 2 ) etc..
INSERT INTO Filters( .... )
SELECT NEXT VALUE FOR dbo.AutoIncrementNumberSequence , ProductID, TagID
FROM @Blah AS s

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多