我是编码方面的新手。
这是我所做的:
DECALRE @v VARCHAR(100)
SET @v = (SELECT TOP 100 NAMES FROM TestTable WITH(NOLOCK))
SELECT @v AS SampleData
但是它返回了一个错误:
子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
在SQL Server 2008中,是否可以在一个变量中设置多个值?
谢谢。
答案 0 :(得分:2)
有一种类型的变量 designed 用于保存多个值。它称为表变量:
declare @v table (Name varchar(100) not null)
insert into @v(Name )
select top 100 name from TestTable /* no ORDER BY means this is ill-defined */
您可以在此表变量中插入/更新/删除,并通过select
对其进行查询,其方式与任何其他表完全相同。
请注意,尽管这看起来像是将您分解为“过程”步骤-首先,我将获得前100个名称,然后将执行X,然后将执行Y。在SQL中,您应该尝试将尽可能多的查询放入单个查询中,然后将其留给 optimizer 确定执行操作的顺序,应该存储哪些子结果等。