programing

SQL Server를 기존 테이블로 선택

yoursource 2023. 4. 7. 22:38
반응형

SQL Server를 기존 테이블로 선택

하나의 테이블에서 몇 개의 필드를 선택하여 저장 프로시저에서 기존 테이블에 삽입하려고 합니다.제가 하려는 일은 다음과 같습니다.

SELECT col1, col2
INTO dbo.TableTwo 
FROM dbo.TableOne 
WHERE col3 LIKE @search_key

생각합니다SELECT ... INTO ...임시 테이블용이기 때문에 다음과 같은 오류가 발생합니다.dbo.TableTwo는 이미 존재합니다.

에서 여러 행을 삽입하려면 어떻게 해야 합니까?dbo.TableOne안으로dbo.TableTwo?

SELECT ... INTO ...는 INTO 절에 지정된 테이블이 존재하지 않는 경우에만 기능합니다.그렇지 않은 경우 다음 명령을 사용해야 합니다.

INSERT INTO dbo.TABLETWO
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

이것은 dbo에 열이 두 개밖에 없다고 가정합니다.TABLETWO - 열을 지정해야 합니다.

INSERT INTO dbo.TABLETWO
  (col1, col2)
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

한 테이블에서 다른 테이블로의 데이터 삽입을 구현하는 방법은 두 가지가 있습니다.

기존 테이블의 경우 - 선택 항목에 삽입

이 메서드는 테이블이 이미 데이터베이스에 작성되어 있고 다른 테이블에서 이 테이블에 데이터를 삽입해야 할 때 사용합니다.insert 절과 select 절에 나열된 열이 동일한 경우 나열할 필요가 없습니다.가독성과 scalability를 위해 항상 목록을 작성하는 것이 좋습니다.

----Create testable
CREATE TABLE TestTable (FirstName VARCHAR(100), LastName VARCHAR(100))
----INSERT INTO TestTable using SELECT
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

존재하지 않는 테이블의 경우 - SELECT INTO

이 메서드는 테이블을 빨리 생성하지 않고 한 테이블의 데이터를 다른 테이블에서 새로 생성된 테이블에 삽입해야 할 때 사용합니다.선택한 열과 동일한 데이터 유형을 사용하여 새 테이블이 생성됩니다.

----Create a new table and insert into table using SELECT INSERT
SELECT FirstName, LastName
INTO TestTable
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

참조 1 2

다음과 같이 동작합니다.

insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration 
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""

대상 테이블이 존재하지만 열 이름을 지정하지 않을 경우:

DECLARE @COLUMN_LIST NVARCHAR(MAX);
DECLARE @SQL_INSERT NVARCHAR(MAX);

SET @COLUMN_LIST = (SELECT DISTINCT
    SUBSTRING(
        (
            SELECT ', table1.' + SYSCOL1.name  AS [text()]
            FROM sys.columns SYSCOL1
            WHERE SYSCOL1.object_id = SYSCOL2.object_id and SYSCOL1.is_identity <> 1
            ORDER BY SYSCOL1.object_id
            FOR XML PATH ('')
        ), 2, 1000)
FROM
    sys.columns SYSCOL2
WHERE
    SYSCOL2.object_id = object_id('dbo.TableOne') )

SET @SQL_INSERT =  'INSERT INTO dbo.TableTwo SELECT ' + @COLUMN_LIST + ' FROM dbo.TableOne table1 WHERE col3 LIKE ' + @search_key
EXEC sp_executesql @SQL_INSERT

select to를 사용하여 새 테이블의 ID 열을 작성하는 경우 다음과 같이 수행할 수 있습니다.

SELECT 
 ID = IDENTITY(INT, 1, 1),
        name
INTO    table2
FROM table1    
select *
into existing table database..existingtable
from database..othertables....

를 사용한 적이 있는 경우select * into tablename from other tablenames이미, 다음에, 덧붙이자면, 당신은 말한다select * into existing table tablename from other tablenames

Table_B에서 Table_A에 삽입하려면 열이 Table_A에 없는 경우에만 다음을 사용하십시오.

BEGIN TRANSACTION

INSERT INTO dbo.Table_A (Column_1)
SELECT DISTINCT Some_Column AS Column_1
FROM dbo.Table_B 
WHERE Some_Column 
    NOT IN (SELECT DISTINCT GroupId 
            FROM dbo.Table_A)

COMMIT

언급URL : https://stackoverflow.com/questions/4101739/sql-server-select-into-existing-table

반응형