먼저 질문을 잊어 버리십시오.
내 질문에 대한 내 명확한 내용을 내 저장된 제품 내에서 제공하는 것이 좋습니다.
내가 목적지 테이블을 가지고 있다고 가정하자.TBLA
및 원본 테이블TBLB
.
1 단계 : 예를 들어 데이터베이스의 테이블에서 SQL을 가져옵니다.
--I Ran this process in a cursor that @Sql is actually a pass in selected coloum value
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = 'SELECT TBLB.coloumA, TBLB.coloumB... into ##TempTable
FROM TBLB
WHERE CONVERT(VARCHAR(10),Date,120)='2011-04-05'';
EXEC sp_ExecuteSql @sql
2 단계 : 다른 sp_ExecuteSql을 호출하여 대상 테이블 데이터를 삭제합니다.
DECLARE @CheckClear NVARCHAR(MAX);
SET @CheckClear = 'DELETE FROM TBLA WHERE EXISTS(SELECT * FROM ##TempTable)';
EXEC sp_ExecuteSql @CheckClear ;
--This section is my problem describe below.
3 단계 : 임시 테이블에서 select *로 TBLA에 삽입
DECLARE @DumpSql NVARCHAR(MAX);
SET @DumpSql = 'INSERT INTO TBLA
SELECT * FROM ##TempTable';
EXEC sp_ExecuteSql @DumpSql ;
2 단계에서 문제가 더 자세히 설명됩니다.
기본적으로, 내가 performe 삭제 statment, 난 내 데이터의 모든 누락 된 것으로 나타났습니다 그냥 첫 번째 행을 수행하는 것만DELETE FROM TBLA
...
예를 들어 senario
delete 문을 작성하기 전에 선택하기 만하려고합니다.##TempTable
가치, 그것은 정확합니다. 오 그래, 2011-11-04 데이터 만 있습니다.
사실 내TBLA
현재 2011-11-03 및 2011-11-02 데이터가 이미 있습니다.
추신 : 실제로 데이터를 날짜 값으로 선택합니다.
이것은 위의 SQL, 성공을 실행 ...
그리고 계속해서, 나는 내TBLA
그 결과를 봅니다. 세상에! 그것만이 가지고있다.2011-11-04
데이터 ... 나머지는 어디입니까 ??
점에 유의하시기 바랍니다:
이 SQL 위의 spyexecutesql 사용되는 내 dyamic 저장된 찌르다 그냥 일부입니다.
내 실제 데이터는 내가 300 테이블의 처리가 필요하고 제대로 총 300 테이블이 다른 독특한있다indentity
그래서 나는 그것을 만들지 않았다.Select * From ##Temptable Where id=something
희망이 훨씬 명확하게 질문
고마워, 도움이된다.
문안 인사:
리앙크
이것을 확인하십시오 : where 조건에서 하위 쿼리를 사용하여 mytable에서 행을 삭제합니다.
DELETE FROM mytable WHERE id IN (SELECT id FROM mytable2)
날짜에 따라 삭제할 고유 한 값을 찾고 있다면 임시 테이블에 고유 한 값을 작성한 다음 삭제 작업을 수행하십시오.
두 번째로 조인 작업을 기반으로 삭제 작업을 찾고 있다면 :
다음 링크를 클릭하십시오 :
SQL Server에서 INNER JOIN을 사용하여 여러 테이블에서 삭제하는 방법
SP_Execute를 사용하여 임시 테이블에 행을 삽입하는 방법을 알아 보려면 다음 링크를 확인하십시오.
SQL 서버 - 임시 테이블에 단일 행을 삽입하는 방법?
SQL2005에 하나의 명령으로 여러 행을 임시 테이블에 삽입하십시오.
이게 너를 거의 도와주지 않기를 바란다 ..
우선 TBLA의 기본 키 필드를 식별해야합니다. 나는 PK가 FLDA라고 가정한다.
임시 테이블에있는 TBLA 행에서 삭제하면 오른쪽 sintax는 다음과 같습니다.
DELETE FROM TBLA
WHERE FLDA IN
(SELECT ##TempTable.FLDA
FROM ##TempTable)
더 우아한 방법은 SQL 서버와 함께이 문제를 해결할 수 있습니다MERGE성명서:
MERGE
INTO TBLA AS target
USING (Select * from ##TempTable)
ON TBLA.FLDA = ##TempTable.FLDA
[ WHEN MATCHED [ AND <clause_search_condition> ]
THEN <merge_matched> ] [ ...n ]
[ WHEN NOT MATCHED [ BY TARGET ] [ AND <clause_search_condition> ]
THEN <merge_not_matched> ]
[ WHEN NOT MATCHED BY SOURCE [ AND <clause_search_condition> ]
THEN <merge_matched> ] [ ...n ]
[ <output_clause> ]
[ OPTION ( <query_hint> [ ,...n ] ) ]
수정 됨나는 너의 더 상세한 질문을 보았다.
실행할 때 :
DELETE FROM TBLA WHERE EXISTS(SELECT * FROM ##TempTable)
모든 데이터가 삭제됩니다. 왜냐하면 조건 allways가 True를 반환하기 때문입니다.
해결 방법은 TBLA의 모든 테이블 필드를 연결하여 ## TempTable의 모든 테이블 필드를 연결하는 것과 비교할 수 있습니다.