sql - SQL Server 循环到表
问题描述
所以我收到了以下代码,并被要求将其重写为表格:
USE [Database_name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[DumLoop]
AS
SET nocount ON
IF OBJECT_ID('dbo.DummyLoopy','U') IS NOT NULL DROP TABLE dbo.DummyLoopy
create table dbo.DummyLoopy
(value VARCHAR(1000))
DECLARE
@Counter INT = 1
,@MaxInteger INT = ((select count(*) from dbo.OUTPUT_DEF))
,@MaxInteger_2 INT = ((select count(*) from dbo.OUTPUT_DEF))
,@MaxInteger_3 INT = ((select count(*) from dbo.OUTPUT_DEF))
,@MaxInteger_4 INT = (select count(*) from dbo.OUTPUT_TABLE)
,@MyNumber NVARCHAR(100)
,@JustAChar NVARCHAR (100)
,@SecondRow NVARCHAR(500)
,@1 NVARCHAR(100)
,@2 NVARCHAR(100)
,@3 NVARCHAR(100)
WHILE(@Counter <= @MaxInteger)
BEGIN
SELECT
@MyNumber = convert(varchar(100))
,@JustAChar = '&'
,@SecondRow = '{8181:ABC12345' + convert(varchar(100), [ID]) + '}{123:45678}{LALA:'
,@1 = ':2020:' + '123456789' + convert(varchar(100), [ID])
,@2 = ':2323:ZUP'
,@3 = ':3333:1111' + convert(varchar(100), [ID]) + ',123'
FROM dbo.OUTPUT_TABLE
WHERE main.[ID] = @Counter
insert into dbo.DummyLoopy Values('')
insert into dbo.DummyLoopy Values(@JustAChar)
insert into dbo.DummyLoopy Values(@SecondRow)
insert into dbo.DummyLoopy Values(@1)
insert into dbo.DummyLoopy Values(@2)
insert into dbo.DummyLoopy Values(@3)
SET @Counter = @Counter
END
所以这只是将每个值写入换行符并创建一个只有一列的表 - 列值。我也希望它把每个值都写成一个新列。我什至不知道该怎么做。
输出将类似于:
&
:2020:1234567891
:2323:ZUP
:3333:11111,123
&
:2020:1234567892
:2323:ZUP
:3333:11112,123
&
:2020:1234567893
:2323:ZUP
:3333:11113,123
etc.
解决方案
您可以使用 pivot 在最终输出中将行转换为列,而不是为每个值物理创建新列。以下链接可以帮助您。
如果必须要求在 while 循环中为每个新值物理创建新列,那么实现此目的的一种方法是使用动态 SQL 命令。
推荐阅读
- reactjs - 将 babel-loader 与 npm package.json 模块字段一起使用时出错
- r - 如何修复“错误:matrix/data.frame 标准应该是合乎逻辑的。”
- ios - 通过关闭 Present ViewController 将数据传递给 Previous ViewController
- excel - 如何比较两列之间的字符并使用宏突出显示相同的特定单元格
- javascript - 从异步或普通函数返回承诺之间有区别吗
- php - Sendgrid 解析不起作用,json 始终为空
- tensorflow - 如何选择训练数据以在更大的图像上找到对象的许多小实例 - Mask RCNN?
- php - 在 PHP 中处理大文件
- ios - 从 xcode 10.1 上传构建到 iTunes 错误
- c# - 找不到 SQLite.Interop.dll