以下声明中的行为名称是什么?
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 :(得分:2)
字符串连接?
答案 1 :(得分:2)
这到底有什么奇怪的?您选择4行,SQL Server运行:
@title = name + ' ' + @title
四次,你最终得到了你提到的字符串。
有点幸运,因为订购非常随意。
答案 2 :(得分:1)
以下声明中的行为名称是什么?
我会在评估查询的每一行的表达式时称之为副作用。
答案 3 :(得分:1)
这是有时用于在SQL中聚合字符串的方法之一,请参阅Concatenating Row Values in Transact-SQL。不推荐,因为它依赖于执行顺序。在一个真实的表上,你可以获得'奇怪的SQL行为',但也可以'行为奇怪的服务器SQL'。问题记录在PRB: Execution Plan and Results of Aggregate Concatenation Queries Depend Upon Expression Location。
中答案 4 :(得分:0)
没有人提到SELECT @title = name FROM dbo.Foo
是更容易的方法从表中选择一个值并将其放在SQL BATCH中的变量中。
因此,select @title = name + ' ' + @title from dbo.Foo
选择dbo.Foo中每一行的值,并将其添加到@title
的末尾。