象单行一样,解决多行的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