象單行一樣,解決多行的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