sql 存储过程中关于创建一个临时表

qq_38155668 2017-07-26 02:47:47
CREATE Table #tmp
(
id int identity(1,1) primary KEY,--这是自增id

)
INSERT INTO #tmp

SELECT
很多列
from 表a

SELECT TOP (@PageSize) * FROM #tmp
WHERE (id NOT IN (SELECT TOP (@PageSize*@PageIndex) id FROM #tmp ))
where这一句会报错
...全文
1624 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-07-27
  • 打赏
  • 举报
回复
水果兄,说的不错,主要是你insert的时候要把对应的列名加上就可以。楼主试试吧
吉普赛的歌 2017-07-26
  • 打赏
  • 举报
回复
怎么不行? 你把 demo 脚本完完整整地贴出来, 然后描述清楚你想要的结果, 再说下row_number哪里有问题
卖水果的net 2017-07-26
  • 打赏
  • 举报
回复
使用 insert_ident 这个选项后,必须把列名写出来: insert into t select c from temp 要改成 insert into t(col) select c from temp
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 21 楼 yenange 的回复:
那就按 row_number 写法吧。
楼上那种我一开始就是用然后也是不行。
吉普赛的歌 2017-07-26
  • 打赏
  • 举报
回复
那就按 row_number 写法吧。
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 19 楼 yenange 的回复:
[quote=引用 3 楼 qq_38155668 的回复:] [quote=引用 1 楼 yenange 的回复:]
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL    DROP TABLE #tmp
CREATE Table #tmp(
	id int identity(1,1) primary KEY,--这是自增id
)
SET IDENTITY_INSERT #tmp ON	--加上这句
INSERT INTO #tmp(id)
SELECT 1

SELECT * FROM #tmp
/*
id
1
*/
我有添加啊还是一样没有用还是提示需要on[/quote] 我说的是让你去掉 identity(1,1), 不是加上。
--下面是将库中的表,按名称排序,取 10-20 的分页, 你参照着写你自己的分页吧
--sqlserver2012 有 offset 分页写法更简洁, 你也可以搜索一下
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY t.name) AS rid 
, t.[name] 
FROM sys.tables AS t
) AS t2
WHERE t2.rid BETWEEN 10 AND 20
[/quote] 删除1,1也是一样的。。。
吉普赛的歌 2017-07-26
  • 打赏
  • 举报
回复
引用 3 楼 qq_38155668 的回复:
[quote=引用 1 楼 yenange 的回复:]
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL    DROP TABLE #tmp
CREATE Table #tmp(
	id int identity(1,1) primary KEY,--这是自增id
)
SET IDENTITY_INSERT #tmp ON	--加上这句
INSERT INTO #tmp(id)
SELECT 1

SELECT * FROM #tmp
/*
id
1
*/
我有添加啊还是一样没有用还是提示需要on[/quote] 我说的是让你去掉 identity(1,1), 不是加上。
--下面是将库中的表,按名称排序,取 10-20 的分页, 你参照着写你自己的分页吧
--sqlserver2012 有 offset 分页写法更简洁, 你也可以搜索一下
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY t.name) AS rid 
, t.[name] 
FROM sys.tables AS t
) AS t2
WHERE t2.rid BETWEEN 10 AND 20
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 14 楼 qq_38155668 的回复:
[quote=引用 12 楼 qq_38155668 的回复:]
[quote=引用 11 楼 sinat_28984567 的回复:]
[quote=引用 10 楼 qq_38155668 的回复:]
[quote=引用 9 楼 sinat_28984567 的回复:]
想分页的话用rownum 就可以了,不用定义一个自增主键



小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote]
看看是这个意思不?
CREATE Table #tmp
(
id int, --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT ROW_NUMBER() OVER ( ORDER BY A1 ) , --这里用rownumber实现自增
A1
FROM A

SELECT * FROM #tmp

DROP TABLE #tmp


查询结果id是自增列,name为select的值
[/quote]


a1是什么啊然后分页不需要添加页面大小和页面的张数吗[/quote]

还有一个问题就是我创建的表 包含了id自增列,那我后面在添加的意思是说加在了id的后面还是说把id列覆盖了[/quote]
我加了这个 上面是这个


然后报错消息 207,级别 16,状态 1,过程 PersonalGetReport,第 98 行
列名 'id' 无效。
消息 213,级别 16,状态 1,过程 PersonalGetReport,第 98 行
列名或所提供值的数目与表定义不匹配。
二月十六 2017-07-26
  • 打赏
  • 举报
回复
引用 16 楼 qq_38155668 的回复:
那怎么知道哪一个列是自增的啊就是row number()over(), a1 括弧和a1分别填入什么啊
我改的你在帖子最上边写的那个代码,括号里边的什么东西都不用关了,直接用这个rownumber
CREATE Table #tmp
(
id int 

)
INSERT INTO #tmp

SELECT   
ROW_NUMBER()OVER(ORDER BY(SELECT 1)),
很多列
from 表a

SELECT TOP (@PageSize) * FROM #tmp
WHERE (id NOT IN (SELECT TOP (@PageSize*@PageIndex) id FROM #tmp ))
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 15 楼 sinat_28984567 的回复:
[quote=引用 14 楼 qq_38155668 的回复:] [quote=引用 12 楼 qq_38155668 的回复:] [quote=引用 11 楼 sinat_28984567 的回复:] [quote=引用 10 楼 qq_38155668 的回复:] [quote=引用 9 楼 sinat_28984567 的回复:] 想分页的话用rownum 就可以了,不用定义一个自增主键
小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote] 看看是这个意思不?
CREATE Table #tmp
(
id int,   --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT  ROW_NUMBER() OVER ( ORDER BY A1 ) ,  --这里用rownumber实现自增
        A1
FROM    A

SELECT * FROM #tmp

DROP TABLE #tmp
查询结果id是自增列,name为select的值 [/quote] a1是什么啊然后分页不需要添加页面大小和页面的张数吗[/quote] 还有一个问题就是我创建的表 包含了id自增列,那我后面在添加的意思是说加在了id的后面还是说把id列覆盖了[/quote] 不要自增列,用rownumber实现了自增列的需要[/quote] 那怎么知道哪一个列是自增的啊就是row number()over(), a1 括弧和a1分别填入什么啊
二月十六 2017-07-26
  • 打赏
  • 举报
回复
引用 14 楼 qq_38155668 的回复:
[quote=引用 12 楼 qq_38155668 的回复:] [quote=引用 11 楼 sinat_28984567 的回复:] [quote=引用 10 楼 qq_38155668 的回复:] [quote=引用 9 楼 sinat_28984567 的回复:] 想分页的话用rownum 就可以了,不用定义一个自增主键
小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote] 看看是这个意思不?
CREATE Table #tmp
(
id int,   --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT  ROW_NUMBER() OVER ( ORDER BY A1 ) ,  --这里用rownumber实现自增
        A1
FROM    A

SELECT * FROM #tmp

DROP TABLE #tmp
查询结果id是自增列,name为select的值 [/quote] a1是什么啊然后分页不需要添加页面大小和页面的张数吗[/quote] 还有一个问题就是我创建的表 包含了id自增列,那我后面在添加的意思是说加在了id的后面还是说把id列覆盖了[/quote] 不要自增列,用rownumber实现了自增列的需要
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 12 楼 qq_38155668 的回复:
[quote=引用 11 楼 sinat_28984567 的回复:] [quote=引用 10 楼 qq_38155668 的回复:] [quote=引用 9 楼 sinat_28984567 的回复:] 想分页的话用rownum 就可以了,不用定义一个自增主键
小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote] 看看是这个意思不?
CREATE Table #tmp
(
id int,   --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT  ROW_NUMBER() OVER ( ORDER BY A1 ) ,  --这里用rownumber实现自增
        A1
FROM    A

SELECT * FROM #tmp

DROP TABLE #tmp
查询结果id是自增列,name为select的值 [/quote] a1是什么啊然后分页不需要添加页面大小和页面的张数吗[/quote] 还有一个问题就是我创建的表 包含了id自增列,那我后面在添加的意思是说加在了id的后面还是说把id列覆盖了
二月十六 2017-07-26
  • 打赏
  • 举报
回复
引用 12 楼 qq_38155668 的回复:
a1是什么啊然后分页不需要添加页面大小和页面的张数吗
我这个是个小例子……主要展示的是怎么用rownumber来做自增列,然后具体怎么写insert into #tp select 还是按照你自己实际的表来写,只不过临时表的id不需要设置自增和主键了,就是id int就可以了,然后insert select 那里加一个rownumber的东西,其他代码和你原来的一样……
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 11 楼 sinat_28984567 的回复:
[quote=引用 10 楼 qq_38155668 的回复:] [quote=引用 9 楼 sinat_28984567 的回复:] 想分页的话用rownum 就可以了,不用定义一个自增主键
小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote] 看看是这个意思不?
CREATE Table #tmp
(
id int,   --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT  ROW_NUMBER() OVER ( ORDER BY A1 ) ,  --这里用rownumber实现自增
        A1
FROM    A

SELECT * FROM #tmp

DROP TABLE #tmp
查询结果id是自增列,name为select的值 [/quote] a1是什么啊然后分页不需要添加页面大小和页面的张数吗
二月十六 2017-07-26
  • 打赏
  • 举报
回复
引用 10 楼 qq_38155668 的回复:
[quote=引用 9 楼 sinat_28984567 的回复:]
想分页的话用rownum 就可以了,不用定义一个自增主键



小白刚开始学,可以把我上面那个改一改借鉴一下吗?[/quote]
看看是这个意思不?
CREATE Table #tmp
(
id int, --不是自增的
name NVARCHAR(100)
)
INSERT INTO #tmp
SELECT ROW_NUMBER() OVER ( ORDER BY A1 ) , --这里用rownumber实现自增
A1
FROM A

SELECT * FROM #tmp

DROP TABLE #tmp


查询结果id是自增列,name为select的值
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 9 楼 sinat_28984567 的回复:
想分页的话用rownum 就可以了,不用定义一个自增主键
小白刚开始学,可以把我上面那个改一改借鉴一下吗?
二月十六 2017-07-26
  • 打赏
  • 举报
回复
想分页的话用rownum 就可以了,不用定义一个自增主键
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 2 楼 yenange 的回复:
不过, 既然你想自己定义这个主键的内容, 就去掉定义表时的: identity(1,1) 避免一些不必要的东西
我只是想创建一个表,,然后在表里面有一个自增列就好了,拿来分页用
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复
引用 5 楼 sinat_28984567 的回复:
楼主贴一下那个insert select 语句看看
qq_38155668 2017-07-26
  • 打赏
  • 举报
回复

中间一段select就不截图了上面是开始后面是结尾
加载更多回复(5)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧