我能够用序列创建一个表,但是当我试图将序列用于临时表时,我得到了一个错误。
无效的对象名称'[sequence]'
我是不是不能使用序列向临时表添加主键?如果我简单地改变 @tist
到 tist
使它成为一个标准表,这一切都正常......问题是我需要使用一个临时表......由于权限的原因,不是一个实际的表。
drop table if exists #tist
drop table if exists #t_stg
drop sequence if exists i_seq
go
create sequence i_seq start with 1 increment by 1
/* Error is this Line */
create table #tist(id int primary key default (next value for dbo.i_seq), a int, b int)
create table #t_stg(id int, a int, b int)
insert into #t_stg(a,b) values (1,2),(3,3),(4,5)
update #t_stg set id = next value for i_seq
--select * from #t_stg
insert into #tist(id,a,b)
select * from #t_stg
SELECT * FROM #tist
似乎为了得到我想要的东西,我只需要用我的序列更新STAGING表,而不是尝试使用SEQUENCE来创建我的TEMP表。
DROP TABLE IF exists #t
DROP TABLE IF exists #t_stg
DROP SEQUENCE IF exists dbo.t_seq
GO
DECLARE @sql NVARCHAR(max);
DECLARE @Count INT = 981518;
CREATE SEQUENCE dbo.t_seq START WITH 1 increment BY 1
SET @sql = N'ALTER SEQUENCE dbo.t_seq RESTART WITH ' + CAST(@Count AS NVARCHAR(20)) + ';';
EXEC SP_EXECUTESQL @sql;
GO
CREATE TABLE #t(id INT, a INT, b INT)
CREATE TABLE #t_stg(id INT, a INT, b INT)
INSERT INTO #t_stg(a,b) VALUES (1,2),(3,3),(4,5)
--SELECT * FROM #t_stg
UPDATE #t_stg SET id = NEXT VALUE FOR t_seq
SELECT * FROM #t_stg
--INSERT INTO #t(id,a,b)
--SELECT * FROM #t_stg
--SELECT * FROM #t
GO