Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中插入填充有父代码的表_Sql_Sql Server - Fatal编程技术网

如何在SQL Server中插入填充有父代码的表

如何在SQL Server中插入填充有父代码的表,sql,sql-server,Sql,Sql Server,我有很多代码,这个代码在另一个表中有很多子项 DECLARE @value VARCHAR(150); SET @value = '4105'; SELECT VALUE Parent INTO ##k FROM dbo.Split (',',@value) SELECT DISTINCT lastlevel INTO ##tmp_getAllLastLevel FROM [DWH-INF].[center].[dbo].[IFIRView_NeginTitleTotal]

我有很多代码,这个代码在另一个表中有很多子项

DECLARE @value VARCHAR(150);

SET @value = '4105';

SELECT VALUE Parent 
INTO ##k 
FROM dbo.Split  (',',@value)

SELECT DISTINCT lastlevel 
INTO ##tmp_getAllLastLevel  
FROM [DWH-INF].[center].[dbo].[IFIRView_NeginTitleTotal] 
WHERE lastlevel IN (SELECT parent FROM ##k) 
   OR level1 IN (SELECT parent FROM ##k) 
   OR level2 IN (SELECT parent FROM ##k) 
   OR level3 IN (SELECT parent FROM ##k) 
   OR level4 IN (SELECT parent FROM ##k) 
   OR level5 IN (SELECT parent FROM ##k) 
   OR level6 IN (SELECT parent FROM ##k) 
   OR level7 IN (SELECT parent FROM ##k) 
   OR level8 IN (SELECT parent FROM ##k) 
此代码正常,并获取父id=4105的所有子项

但是我有很多父母喜欢我

SET @value = '4105,4106,2034,2055';
如何将所有lastlevel和父级插入到类似此表的一个表中

    parent      lastlevel
------------------------------
    4105          1273
    4105          1275
    4105          1279
    4106          1288
    4106          1292
    2055          1073

感谢您阅读我的问题

您可以像下面这样使用内部连接代码

select tb1.Parent,tb2.lastlevel into ##tmp_getAllLastLevel  from ##k 
tb1 inner join  [DWH-INF].[center].[dbo].[IFIRView_NeginTitleTotal]  tb2 on 
tb1.Parent=tb2.lastlevel or tb1.Parent=tb2.level1 or
tb1.Parent=tb2.level2 or tb1.Parent=tb2.level3 or tb1.Parent=tb2.level4 or 
tb1.Parent=tb2.level5 or tb1.Parent=tb2.level6 or tb1.Parent=tb2.level7
or tb1.Parent=tb2.level8

并获取所有父级和lastlevel

您不需要临时表来实现此目的:

select s.value as Parent, tb2.lastlevel
into ##tmp_getAllLastLevel 
from [DWH-INF].[center].[dbo].[IFIRView_NeginTitleTotal] tb2 join
     dbo.Split(',', @value) s
     on s.value in (tb2.lastlevel, tb2.level1, tb2.level2, tb2.level3, tb2.level4, tb2.level5, tb2.level6, tb2.level7, tb2.level8);
还要注意的是,像这样跨列存储层次结构可能会使查询变得更加复杂。您正在尝试将值数组存储为单独的列。在SQL中,最好将它们存储在单独的行中