A
ApplyID DeviceID DeviceName DeviceNum DeviceNO
---------- ----------- ----------------------------------------
5443 6 高端配置 2 AA0001,BB0001
5444 7 高端配置 3 BB0002,CC0001,CC0002B
DeviceNO DeviceName
-------------------------------------------------- ---------------------
AA0001 高配置笔记本
AA0002 低配置笔记本
BB0001 高配置台式机
BB0002 低配置台式机
CC0001 彩色打印机
CC0002 一般打印机C
DeviceNO DeviceID ApplyUseID ApplyReturnID
------------ ----------- ----------- -------------
AA0001 6 5443 null
BB0001 6 5443 nullBB0002 7 5444 null
CC0001 7 5444 null
CC0002 7 5444 null
将A表与B表有关联的数复制到C表中 结果如C表所示(注A表中DeviceNO字段不固定)
有人这样写了,但我测试了下不对的,
我说了DeviceNO的字段是不固定的,没有一定的规则的
Select
B.DeviceNO,
A.DeviceID,
A.ApplyID,
null As ApplyReturnID
From
A
Inner Join
B
On CharIndex(B.DeviceNO, A.DeviceNO) > 0--插入
Insert C
Select
B.DeviceNO,
A.DeviceID,
A.ApplyID,
null As ApplyReturnID
From
A
Inner Join
B
On CharIndex(B.DeviceNO, A.DeviceNO) > 0
因为你的那种方法在DeviceNO有不固定的,如1CC0001 就不对了
from a join b on charindex(','+b.DeviceNO+',',','+a.DeviceNO+',')>0ApplyReturnID为什么是null
(ApplyID Char(4),
DeviceID Int,
DeviceName Nvarchar(20),
DeviceNum Int,
DeviceNO Varchar(100))
Insert A Select '5443', 6, N'高端配置', 2, 'AA0001,BB0001'
Union All Select '5444', 7, N'高端配置', 3, 'BB0002,CC0001,CC0002'Create Table B
(DeviceNO Varchar(20),
DeviceName Nvarchar(50))
Insert B Select 'AA0001', N'高配置笔记本'
Union All Select 'AA0002', N'低配置笔记本'
Union All Select 'BB0001', N'高配置台式机'
Union All Select 'BB0002', N'低配置台式机'
Union All Select 'CC0001', N'彩色打印机'
Union All Select 'CC0002', N'一般打印机'Create Table C
(DeviceNO Varchar(20),
DeviceID Int,
ApplyUseID Char(4),
ApplyReturnID Varchar(10))
GO
--插入
Insert C
Select
B.DeviceNO,
A.DeviceID,
A.ApplyID,
null As ApplyReturnID
From
A
Inner Join
B
On CharIndex(B.DeviceNO, A.DeviceNO) > 0Select * From C
GO
Drop Table A, B, C
--Result
/*
DeviceNO DeviceID ApplyUseID ApplyReturnID
AA0001 6 5443 NULL
BB0001 6 5443 NULL
BB0002 7 5444 NULL
CC0001 7 5444 NULL
CC0002 7 5444 NULL
*/
这是我同事做的分三种情况,但还是不简单declare @values varchar(100);
declare @index int;
set @values='';
分三种情况
select @values = @values+','+ DeviceNO from Asset_Apply_Use_Details where ApplyID= 5417 --一种
SET @values = 'AB0004'; --二种
SET @values = ',AA0002,CC0001,CC0002,BB0001,BB0002'; --三种while(len(@values)>0)
begin
set @index = patindex('%,%',@values)
--此处执行插入操作
--如果没有逗号,直接插入数据库
if(@index=0)
print @values;
else
print left(@values,@index-1);
if(@index=0)
set @values='';
else
begin
set @values=right(@values,len(@values)-@index);
end
end
测试不正确
因为你的那种方法在DeviceNO有不固定的,如1CC0001 就不对了
----------
明白了,這麼修改下
--查詢
Select
B.DeviceNO,
A.DeviceID,
A.ApplyID,
null As ApplyReturnID
From
A
Inner Join
B
On CharIndex(',' + B.DeviceNO + ',', ',' + A.DeviceNO + ',') > 0--插入
Insert C
Select
B.DeviceNO,
A.DeviceID,
A.ApplyID,
null As ApplyReturnID
From
A
Inner Join
B
On CharIndex(',' + B.DeviceNO + ',', ',' + A.DeviceNO + ',') > 0
我没有这么说哦
因为你的那种方法在DeviceNO有不固定的,如1CC0001 就不对了
-------------------------
1CC0001如果在b.DeviceNO~~没有~~是不会出来的。~~~所以你之前要在b表里有这样一条
~~~主要LZ是我同学~所以我会把他住笨的地方想
汗!~~鱼~~~你太不了心了.... T_T
~~~主要LZ是我同学~所以我会把他住笨的地方想
------------我看到他的編碼是“AA0001,BB0001”,以為他的編碼是有規則的,那就可以不用加“,”的,沒想到他的編碼是沒有規則的。
我靠~~一分都不给我~~~~回去灭了你NND