VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1205|回复: 12

表变量,IDENTITY_INSERT,order by 的问题?

[复制链接]

3

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-1-2 22:10:01 | 显示全部楼层 |阅读模式
declare @tt table (sid tinyint identity(1,1),v decimal(18,2),st tinyint)

insert into @tt
select #1.vs,
case
when ... then 0
when ... then 1
when ... then 2
end si
from fd()#1
inner join
fs('')#3
on #1.id=#3.id
order by  vs,si

就会出错:
服务器: 消息 8101,级别 16,状态 1,行 3
仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 '@tt' 中为标识列指定显式值。

如果去掉order by  vs,si,就不会出错!

vs是decimal数据。
回复

使用道具 举报

0

主题

7

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-2 22:51:01 | 显示全部楼层
自动增量的列是不是插入值的 ,你去掉自动增量就OK了
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-2 22:57:01 | 显示全部楼层
用表变量,貌似#1临时表的问题。换了其它表名不用#上头的就行
如果是插入表有
set IDENTITY_INSERT on --要定义一下才能插入
set IDENTITY_INSERT off
回复

使用道具 举报

3

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-2 23:00:01 | 显示全部楼层
必须要自动增量的。
为什么去掉order by 就不出错,但是不是我想要的结果。
回复

使用道具 举报

3

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-2 23:03:01 | 显示全部楼层
我是在一个自定义函数中使用以上代码的。
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-2 23:06:01 | 显示全部楼层
insert into @tt
select #1.vs,
case
when ... then 0
when ... then 1
when ... then 2
end si
from fd()#1
inner join
fs('')#3
on #1.id=#3.id
order by  vs,
case when ... then 0 when ... then 1 when ... then 2 end --这样就不会出错了
回复

使用道具 举报

3

主题

10

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-1-2 23:18:01 | 显示全部楼层
为什么呢?还是有错,
服务器: 消息 8101,级别 16,状态 1,行 3
仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 '@tt' 中为标识列指定显式值。
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-2 23:30:01 | 显示全部楼层
set IDENTITY_INSERT on --要定义一下才能插入
--插入数据
set IDENTITY_INSERT off
回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-2 23:33:01 | 显示全部楼层
set IDENTITY_INSERT off--1步 关闭唯一标识
插入的语句
set IDENTITY_INSERT on --打开唯一标识

回复

使用道具 举报

0

主题

93

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-1-2 23:39:01 | 显示全部楼层
语法为:
SET IDENTITY_INSERT 表名 off


SET IDENTITY_INSERT 表名 ON

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表