象单行一样,解决多行的t-sql返回的结果是一个好习惯。在t-sql里使用局部变量得到返回的结果记录集,如果用select子句就会掩饰潜在的问题。
如果代码只希望得到一个值,select子句只会分配一个值,尽管实际上可能返回多个值。如果这种分配用set 命令会发生错误。但是,当你希望得到单个值的记录时,用set命令会使t-sql代码更加鲁棒。
下面的脚本演示了这种情况:
create table settest
(pkey int not null
constraint pk_settest primary key,
name varchar(30) not null
constraint df_col1 default 1
)
go
insert settest values (1,'mary johnson')
insert settest values (2,'john highland')
insert settest values (3,'ashly robertson')
insert settest values (4,'mary johnson')
go
declare @myvar int
select @myvar = pkey from settest where name = 'mary johnson'
go
declare @myvar int -- error will be generated
set @myvar = ( select pkey from settest where name = 'mary johnson' )
go
drop table settest
go
新闻热点
疑难解答