gpt4 book ai didi

sql-server - 在一个查询中填充两个变量

转载 作者:行者123 更新时间:2023-12-01 09:43:24 25 4
gpt4 key购买 nike

我正在编写一个带有枢轴的存储过程。数据透视字段名称可以根据表中的数据而改变。

所以我有下面的两个变量。但是这似乎效率很低,因为我在同一张表上运行了两个查询,这可能是由于我缺乏知识。

declare @code nvarchar(max) = ''
select @code = @code + '[' + Code + '],' from (select Code from myTbl) as c
set @code = substring(@code , 1, len(@code ) - 1)

declare @Name nvarchar(max) = ''
select @Name = @Name + '[' + Name + '],' from (select Name from myTbl) as c
set @Name = substring(@Name , 1, len(@Name ) - 1)

是否可以填充两个变量并且只查询一次表?

最佳答案

可以,这是一个简单的示例

CREATE TABLE T(
Code VARCHAR(45),
Name VARCHAR(45)
);

INSERT INTO T VALUES
('Code1', 'Name1'),
('Code2', 'Name2');

DECLARE @Code VARCHAR(MAX) = '',
@Name VARCHAR(MAX) = '';

SELECT @Code = @Code + QUOTENAME(Code) + ',',
@Name = @Name + QUOTENAME(Name) + ','
FROM T;

SELECT @Code, @Name;

返回:

+------------------+------------------+
| No column name) | (No column name) |
+------------------+------------------+
| [Code1],[Code2], | [Name1],[Name2], |
+------------------+------------------+

如果你有 SQL Server 2017,那么不需要使用子字符串,你可以使用 STRING_AGG() as

SELECT STRING_AGG(QUOTENAME(Code), ','),
STRING_AGG(QUOTENAME(Name), ',')
FROM T;

返回:

+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| [Code1],[Code2] | [Name1],[Name2] |
+------------------+------------------+

关于sql-server - 在一个查询中填充两个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com