테이블 변수에 모든 행을 삽입하려는 복잡한 SELECT 쿼리가 있지만 T-SQL에서는 허용하지 않습니다.
같은 행을 따라 SELECT INTO 또는 INSERT EXEC 쿼리에 테이블 변수를 사용할 수 없습니다.
http://odetocode.com/Articles/365.aspx
간단한 예 :
declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)
SELECT name, location
INTO @userData
FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30
테이블 변수의 데이터는 나중에 다른 테이블에 다시 삽입 / 업데이트하는 데 사용됩니다 (대부분 작은 업데이트로 동일한 데이터의 사본). 이 작업의 목적은 SELECT INTO
올바른 테이블에 직접 액세스 하는 것보다 스크립트를 좀 더 읽기 쉽고 쉽게 사용자 정의 할 수 있도록하는 것 입니다. 성능은 문제가되지 않습니다. rowcount
상당히 작고 필요할 때만 수동으로 실행되기 때문입니다.
… 또는 내가 잘못하고 있는지 말 해주세요.
답변
다음과 같이 해보십시오 :
DECLARE @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
);
INSERT INTO @userData (name, oldlocation)
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30;
답변
의 목적 SELECT INTO
은 (문서마다, 나의 강조점)
다른 테이블의 값에서 새 테이블 을 만들려면
하지만 당신은 이미 이 목표 테이블을! 그래서 당신이 원하는 것은
INSERT
문은 테이블에 하나 개 이상의 새 행을 추가합니다다음과 같은 방법으로 데이터 값을 지정할 수 있습니다.
…
이용함으로써
SELECT
같은 하나 이상의 행에 대한 데이터 값을 지정하는 서브 쿼리 :INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView
그리고에서 이 구문, 그것은 수있어 MyTable
테이블 변수가 될 수 있습니다.
답변
공통 테이블 표현식을 사용하여 임시 데이터 세트를 저장할 수도 있습니다. 그들은 더 우아하고 친절합니다.
WITH userData (name, oldlocation)
AS
(
SELECT name, location
FROM myTable INNER JOIN
otherTable ON ...
WHERE age>30
)
SELECT *
FROM userData -- you can also reuse the recordset in subqueries and joins
답변
응용 프로그램에서 임시 테이블을 사용하지 않는 경우 임시 테이블을 사용해 볼 수 있습니다. (수동으로 실행해도 괜찮습니다)
SELECT name, location INTO #userData FROM myTable
INNER JOIN otherTable ON ...
WHERE age>30
그런 식으로 테이블을 선언하는 노력을 건너 뜁니다 … 임시 쿼리에 대한 도움말 … 이것은 동일한 세션에 있지 않으면 다른 세션에 표시되지 않는 로컬 임시 테이블을 만듭니다. 앱에서 쿼리를 실행하는 경우 문제가 될 수 있습니다.
앱에서 실행 해야하는 경우 다음과 같이 선언 된 변수를 사용하십시오.
DECLARE @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
);
INSERT INTO @userData
SELECT name, location FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30;
편집 : 많은 사람들이 연결에서 세션에 대한 가시성을 업데이트했다고 언급했습니다. 세션을 재사용 할 수 있으므로 임시 테이블을 작성하는 것은 웹 애플리케이션의 옵션이 아닙니다.
답변
INSERT
대신에 사용하십시오 SELECT INTO
:
INSERT @UserData
SELECT name, location etc.
답변
먼저 임시 테이블을 만듭니다.
1 단계:
create table #tblOm_Temp (
Name varchar(100),
Age Int ,
RollNumber bigint
)
** 2 단계 : ** 임시 테이블에 일부 값 삽입.
insert into #tblom_temp values('Om Pandey',102,1347)
3 단계 : 임시 테이블 데이터를 보유 할 테이블 변수 선언
declare @tblOm_Variable table(
Name Varchar(100),
Age int,
RollNumber bigint
)
4 단계 : 임시 테이블에서 값을 선택하고 테이블 변수에 삽입하십시오.
insert into @tblOm_Variable select * from #tblom_temp
마지막으로 임시 테이블에서 테이블 변수로 값이 삽입됩니다.
5 단계 : 테이블 변수에 삽입 된 값을 확인할 수 있습니다.
select * from @tblOm_Variable
답변
OK, 이제 충분한 노력으로 아래를 사용하여 @table에 삽입 할 수 있습니다.
INSERT @TempWithheldTable SELECT
a.SuspendedReason, a.SuspendedNotes, a.SuspendedBy, a.ReasonCode FROM OPENROWSET (BULK ‘C : \ DataBases \ WithHeld.csv’, FORMATFILE = N’C : \ DataBases \ Format.txt ‘,
ERRORFILE = N’C : \ Temp \ MovieLensRatings.txt ‘) AS a;
여기서 중요한 것은 삽입 할 열을 선택하는 것입니다.