首页 > 解决方案 > TSQL根据select语句的整数结果插入值

问题描述

我正在运行以下查询:

select
    max(count) Max
from
    (select 
         count(iStockID) Count
     from   
         _etblInvJrBatchLines
     group by 
         iStockID) X

如您所知,结果是一个整数;在这种情况下,结果是 5。

基于上述结果,我需要将通用值插入另一个表,如下所示:

INSERT INTO _etblInvJrBatches 
(
    cInvJrNumber            --  IJ0001      Plus 1
,   cInvJrDescription       --  Inventory Journal Batch
,   cInvJrReference         --  IJR10001    Plus 1
,   iCreateAgentID          --  1
,   bClearAfterPost         --  1
,   bAllowDupRef            --  1
,   bAllowEditGLContra      --  0
,   iNewLineDateOpt         --  0
,   iNewLineRefOpt          --  0
,   cNewLineRefDef          --  ''
,   bNewLineRefInc          --  0
,   iNewLineDescOpt         --  0
,   cNewLineDescDef         --  ''
,   bNewLineDescInc         --  0
,   iNewLineProjectOpt      --  0
,   iNewLineProjectDefID    --  0
,   iNewLineWarehouseOpt    --  0
,   iNewLineWarehouseDefID  --  0
,   bJustCleared            --  0
,   iTransactionCode        --  31 (select TrCodeID where TrCode = 'ADJ')
)
SELECT 
    'IJ000'             --  Plus 1
,   'Inventory Journal Batch'
,   'IJR1000'               --  Plus 1
,   1
,   1
,   1
,   0
,   0
,   0
,   ''
,   0
,   0
,   ''
,   0
,   0
,   0
,   0
,   0
,   0
,   (select idTrCodes from TrCodes where Code = 'ADJ')

唯一的问题是,它只插入一次。

如何根据从第一个 select 语句中获得的结果插入 5 次?

也就是说,如果整数结果为24,则需要导入/插入上面的24次。

谢谢你的帮助。

阿蒂。

标签: sqlsql-server

解决方案


有很多方法可以做到这一点。INSERT 只在目标表中插入一行。最终,您将不得不循环插入。

可能的解决方案...

在数据库中循环...

declare @count int = (select
    max(count) Max
from
    (select 
         count(iStockID) Count
     from   
         _etblInvJrBatchLines
     group by 
         iStockID) X)
    declare @increment int =1
while @increment <= @count 
{
-- do your insert here...
@increment = @increment +1
}

在您的客户端代码中执行循环。从初始查询中检索计数值

For increment = 1 to @count
'execute SQL to do insert here...
Next increment

或者更好(正如@scsimon 暗示的那样)......

For increment = 1 to @count
'build the VALUES () clauses for your insert statement...
Next
'execute your insert statement

我没有意识到 T-SQL 在 INSERT 中允许多个 VALUES 子句。谢谢@scsimon!

如果是我,我会在客户端使用代码而不是在数据库中执行所有这些操作。我是老派,我不认为像我的第一个示例那样在数据库中构建这样的解决方案时可以很好地扩展。


推荐阅读