我想用另一个表中的值更新一个表。第一个表Tbl_test_details
具有customer_id
,pr_no
和tests
以及更多的列,第二个表tbl_tests
具有tests
。对于pr_no
中的每个tbl_test_details
,我想添加tests
中tbl_tests
中的所有值。
我试图用游标做到这一点,但它不起作用。它仅插入第一个pr_no
的记录并退出。需要帮助
更新:还有一个问题,重复pr_no
tbl_test_deatils
并且已经存在一些test
值,因此某些插入可能由于主键而失败(pr_no + {{ 1}})
tests
答案 0 :(得分:0)
请遵循以下网址:Using Spring Boot 2.0 with Tomcat 7.0.82
我认为这对您有帮助。
答案 1 :(得分:0)
您可以使用cursors
编写查询以获取Cross Join
,然后使用for each pr_no in tbl_test_details all the values in tests from tbl_tests
在Except
中插入新的不存在的记录,而不是使用tbl_test_details
: / p>
insert into @Tbl_Test_details (pr_no,c_id,Tests)
select TD.pr_no,
TD.c_id,
TS.Tests
from @Tbl_Test_details TD
cross Join @Tbl_Tests TS
except
select TD.pr_no,
TD.c_id,
TD.Tests
from @Tbl_Test_details TD
答案 2 :(得分:0)
这不是一个完美的答案,它仍然存在性能问题,我仍然能够成功执行该操作。
DECLARE @cid int
DECLARE @tn int
DECLARE @prno nvarchar(50)
DECLARE @dte date
DECLARE @trn int
DECLARE @tst nvarchar(180)
DECLARE cr_testd CURSOR FOR
SELECT cust_id,pr_no,date
FROM tbl_Test_Details;
DECLARE cr_tests CURSOR FOR
SELECT test_name
FROM tbl_tests
DECLARE @trn=(select count(test_name) from tbl_tests)
OPEN cr_testd
FETCH NEXT FROM cr_testd into @cid,@prno,@dte
WHILE @@FETCH_STATUS = 0
BEGIN
OPEN cr_tests
FETCH NEXT FROM cr_tests into @tst
WHILE @@FETCH_STATUS=0
BEGIN
BEGIN TRY
SET @tn=(select count(*) from tbl_Test_Details where pr_no=@prno)
IF(@tn = @trn)
BEGIN
BREAK;
END
Insert into tbl_Test_Details values(@cid,@tst,0,0,@prno,@dte)
END TRY
BEGIN CATCH
END CATCH
FETCH NEXT FROM cr_tests into @tst
END
CLOSE cr_tests
FETCH NEXT FROM cr_testd into @cid,@prno,@dte
END
CLOSE cr_testd
DEALLOCATE cr_testd
DEALLOCATE cr_tests