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 문을 통해 각 변수를 초기화하고 싶지는 않습니다 … UGH !!!
같은 테이블에 대해 여러 번 쿼리하지 않고도 행을 따라 무언가를 달성하는 방법에 대한 제안 사항이 있습니까?
답변
.. INTO .. 테이블 변수를 선택할 수 없습니다. 가장 좋은 방법은 먼저 만든 다음 삽입하는 것입니다. 두 번째 스 니펫은
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
답변
나중에 사용하기 위해 일부 변수를 간단히 지정하려면 다음 행을 따라 한 번에 변수를 지정할 수 있습니다.
declare @var1 int,@var2 int,@var3 int;
select
@var1 = field1,
@var2 = field2,
@var3 = field3
from
table
where
condition
그것이 당신이 따르는 것의 유형이라면
답변
당신은 이것을 할 수 있습니다 :
SELECT
CustomerId,
FirstName,
LastName,
Email
INTO #tempCustomer
FROM
Customer
WHERE
CustomerId = @CustomerId
나중에
SELECT CustomerId FROM #tempCustomer
#tempCustomer의 구조를 선언 할 필요는 없습니다.
답변
구문이 약간 벗어난 것 같습니다. 이것은 좋은 예가 있습니다
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