1つのテーブルからいくつかのフィールドを選択し、それらをストアドプロシージャから既存のテーブルに挿入しようとしています。これが私が試みているものです:
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には2つの列しかないと仮定しています。それ以外の場合は、列を指定する必要があります。
INSERT INTO dbo.TABLETWO
(col1, col2)
SELECT col1, col2
FROM dbo.TABLEONE
WHERE col3 LIKE @search_key
あるテーブルから別のテーブルへのデータ挿入を実装する方法は2つあります。
このメソッドは、テーブルがすでにデータベースに作成されていて、データが別のテーブルからこのテーブルに挿入される場合に使用されます。 insert句とselect句にリストされているカラムが同じ場合、それらをリストする必要はありません。読みやすさとスケーラビリティの目的でそれらを常にリストするのは良い習慣です。
----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
このメソッドは、テーブルが以前に作成されていない場合に使用され、あるテーブルのデータを別のテーブルから新しく作成したテーブルに挿入するときに作成する必要がある場合に使用されます。新しいテーブルは、選択した列と同じデータ型で作成されます。
----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
それは以下に与えられるように働くでしょう:
insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""
select *
into existing table database..existingtable
from database..othertables....
select * into tablename from other tablenames
を追加して使用したことがある場合は、select * into existing table tablename from other tablenames
と言います。
宛先テーブル が存在する場合 しかし、列名を指定したくない場合は、
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