【发布时间】:2019-10-24 09:16:12
【问题描述】:
我是 SQL 新手,我正在学习网络教程。我遇到了一段代码,其中 SELECT 语句为变量赋值。我怀疑这样的 SELECT 语句不会因此生成表。例如。当我想将分配与列名混合时:
DECLARE
@columns NVARCHAR(MAX) = '';
SELECT
@columns += QUOTENAME(category_name) + ',',
category_name
FROM
production.categories
ORDER BY
category_name;
SET @columns = LEFT(@columns, LEN(@columns) - 1);
PRINT @columns;
我收到以下错误:
消息 141,第 15 级,状态 1,第 4 行
为变量赋值的 SELECT 语句不得与数据检索操作结合使用。
我的问题是,是否存在另一种形式的数据操作(作为赋值)在 SELECT 语句中不会生成表(如果我的假设是正确的)。
【问题讨论】:
-
错误告诉你问题所在。您正在尝试分配
@columns的值并返回category_name的值。恐怕这个错误再清楚不过了。SELECT只能做一个或另一个,但不能同时做。 -
我不明白你的问题:如果存在另一种形式的数据操作(作为赋值),在 SELECT 语句中不会生成表(如果我的假设是正确的) ..如果您从该语句中取出
category_name,它将是一个 SELECT 执行分配而不产生结果 -
是的,你是对的。但我的问题是:“是否存在另一种形式的数据操作(作为赋值),在 SELECT 语句中不会生成表(如果我的假设是正确的)。”
-
如果你想把所有的值赋值给变量,下面的代码会帮助你; @columns = STRING_AGG(category_name,';') WITHIN GROUP (ORDER BY category_name)
标签: sql-server tsql select variable-assignment