SQL Server SELECT IN @variable?
SQL (2008) Stored Procs 중 하나에 다음 코드가 있으며 완벽하게 정상적으로 실행됩니다.
CREATE PROCEDURE [dbo].[Item_AddItem]
@CustomerId uniqueidentifier,
@Description nvarchar(100),
@Type int,
@Username nvarchar(100),
AS
BEGIN
DECLARE @TopRelatedItemId uniqueidentifier;
SET @TopRelatedItemId =
(
SELECT top(1) RelatedItemId
FROM RelatedItems
WHERE CustomerId = @CustomerId
)
DECLARE @TempItem TABLE
(
ItemId uniqueidentifier,
CustomerId uniqueidentifier,
Description nvarchar(100),
Type int,
Username nvarchar(100),
TimeStamp datetime
);
INSERT INTO Item
OUTPUT INSERTED.* INTO @TempItem
SELECT NEWID(), @CustomerId, @Description, @Type, @Username, GETDATE()
SELECT
ItemId,
CustomerId,
@TopRelatedItemId,
Description,
Type,
Username,
TimeStamp
FROM
@TempItem
END
GO
그래서 여러분들에게 묻고 싶은 것은 다음과 같은 일을 할 수 있는 가능성이 있느냐는 것입니다.
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
메모리의 이 데이터를 다음 문장에서 재사용할 수 있도록 하기 위해?SQL Server는 위의 문장에 짜증을 내지만, 동일한 테이블에 대해 별도의 SELECT 문을 사용하여 변수를 만들고 각 변수를 초기화할 필요는 없습니다. 으으!!
동일한 테이블에 대해 여러 개의 쿼리를 수행하지 않고 동일한 방법으로 무언가를 달성하는 방법에 대한 제안이 있습니까?
나중에 사용하기 위해 일부 변수를 할당하는 경우 다음 행에 따라 한 번에 수행할 수 있습니다.
declare @var1 int,@var2 int,@var3 int;
select
@var1 = field1,
@var2 = field2,
@var3 = field3
from
table
where
condition
그게 네가 원하는 거라면
선택할 수 없습니다.테이블 변수로 변환합니다.먼저 작성한 후 삽입하는 것이 최선입니다.두 번째 스니펫은
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
INSERT INTO
@TempCustomer
SELECT
CustomerId,
FirstName,
LastName,
Email
FROM
Customer
WHERE
CustomerId = @CustomerId
다음과 같이 할 수 있습니다.
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO #tempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
그럼 나중에
SELECT CustomerId FROM #tempCustomer
#temp Customer의 구조를 선언할 필요는 없습니다.
구문이 약간 어긋난 것 같습니다.이것은 몇 가지 좋은 예가 있다.
DECLARE @TempCustomer TABLE
(
CustomerId uniqueidentifier,
FirstName nvarchar(100),
LastName nvarchar(100),
Email nvarchar(100)
);
INSERT @TempCustomer
SELECT
CustomerId,
FirstName,
LastName,
Email
FROM
Customer
WHERE
CustomerId = @CustomerId
그럼 나중에
SELECT CustomerId FROM @TempCustomer
임시직 테이블을 원하는 것 같군요.http://www.sqlteam.com/article/temporary-tables
#TempTable은 SP 전체에서 사용할 수 있습니다.
##TempTable은 누구나 사용할 수 있습니다.
같은 문제에 대한 해결책을 찾고 있는 당신의 질문을 발견했습니다.다른 답변에서 지적할 수 없는 것은 임시가 아닌 영구적인 형식으로 모든 프로시저를 실행할 때마다 테이블 이름을 변경하는 방법입니다.
지금까지 제가 하고 있는 일은 SQL 코드 전체를 사용할 변수와 연결하는 것입니다.다음과 같이 합니다.
declare @table_name as varchar(30)
select @table_name = CONVERT(varchar(30), getdate(), 112)
set @table_name = 'DAILY_SNAPSHOT_' + @table_name
EXEC('
SELECT var1, var2, var3
INTO '+@table_name+'
FROM my_view
WHERE string = ''Strings must use double apostrophe''
');
도움이 되었으면 좋겠는데, 코드가 너무 크면 번거로울 수 있으니 더 좋은 방법이 있으면 공유해주세요!
"SELECT *
INTO
@TempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId"
그 말은 즉, 새로운 것을@tempCustomer
테이블 변수 및 고객으로부터의 데이터 삽입.이미 위에서 선언했으므로 다시 선언할 필요는 없습니다.함께 가는 것이 좋다
INSERT INTO @tempCustomer SELECT * FROM Customer
언급URL : https://stackoverflow.com/questions/4823880/sql-server-select-into-variable
'programing' 카테고리의 다른 글
문의 "INSERT IN..." 부분을 반복하지 않고 여러 행을 삽입하시겠습니까? (0) | 2023.04.08 |
---|---|
SQL 기본 제약 조건을 이름을 모르면서 삭제하는 방법 (0) | 2023.04.08 |
react.default.createContext는 react-redux를 사용할 때 함수가 아닙니다. (0) | 2023.04.03 |
Jest가 모든 비동기 코드의 실행이 완료될 때까지 기다렸다가 어설션을 기대하는 방법 (0) | 2023.04.03 |
react.js와 Ajax의 차이점 (0) | 2023.04.03 |