2009-11-26 96 views
0

下面的語句中行爲的名稱是什麼?奇怪的SQL Server行爲

Create table dbo.Foo(name varchar(10)) 

insert dbo.Foo (name) 
select 'Weird' 
union 
select 'SQL' 
union 
select 'Server' 
union 
select 'behavior' 

declare @title varchar(max) 
set @title = '' 
select @title = name + ' ' + @title from dbo.Foo 

select @title 

--returns 'Weird SQL Server behavior' 

這也可以用整數來完成。我想知道這個行爲的名稱,混合標量和集合操作。

+0

你爲什麼覺得這很奇怪? – Cruachan 2009-11-26 21:07:50

回答

2

究竟是什麼奇怪呢?你選擇4行,SQL Server運行:

@title = name + ' ' + @title 

四次,你最後得到你提到的字符串。

有點太幸運了,因爲排序真的是隨機的。

2

字符串串聯?

1

以下聲明中行爲的名稱是什麼?

我會稱之爲副作用從評估查詢的每一行的表達式。

0

沒有人提到SELECT @title = name FROM dbo.Foo更容易方式從表中選擇一個值並將其放入SQL BATCH中的變量中。

因此,select @title = name + ' ' + @title from dbo.Foo選擇dbo.Foo中每行的值並將其添加到@title的末尾。