sql-server - populate two variables in one query
问题描述
I am writing a stored procedure with a pivot in it. The pivot field names can change depending on the data in the table.
So I have the two variables below. However this seems quite inefficient because I run two queries on the same table, this is probably due to my lack of knowledge.
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)
Is it possible to populate both variables and only query the table once?
解决方案
是的,您可以,这是一个简单的示例
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] |
+------------------+------------------+
推荐阅读
- kubernetes - kubectl top 是当前内存/CPU 值吗?
- c++ - Crypto++ pbkdf2::DeriveKey() 的罕见崩溃
- laravel - Laravel 5:诊断密码重置令牌无效错误
- typescript - SyntaxError:使用 ES2015 模块导入和 jest 测试打字稿代码时出现意外的令牌导出
- python - 确定跨行的唯一字典键
- ios - (缩放)UITextView 上的变换动画
- c - 忽略scanf格式的空格
- assembly - MASM 打印未知字符
- javascript - 如何让 Puppeteer / Node 脚本读取按其类别?
- java - 休眠映射异常无法确定类型:java.nio.file.Path