У меня есть следующий код в одном из моих сохраненных Proq Sql (2008), который прекрасно работает:
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 !!!
Любые предложения о том, как добиться чего-то в этом направлении без нескольких запросов к одной и той же таблице?
sql
sql-server
tsql
sql-server-2008
bleepzter
источник
источник
declare @t table
один раз, и если вам нужно использовать его повторно, выстрелитеDELETE @TempCustomer
перед тем, как вставлять в него сноваОтветы:
Вы не можете выбрать .. В ... переменную таблицы. Лучшее, что вы можете сделать, это сначала создать его, а затем вставить в него. Ваш второй фрагмент должен быть
источник
Если вы хотите просто назначить некоторые переменные для последующего использования, вы можете сделать их за один раз с чем-то вроде этого:
Если это то, что вы ищете
источник
ты можешь сделать это:
тогда позже
вам не нужно объявлять структуру #tempCustomer
источник
DROP TABLE #tempCustomer
когда#tempCustomer
больше не нужно, иначе следующий выбор вызовет#tempCustomer already exists
ошибкуПохоже, ваш синтаксис немного отсутствует. Это имеет несколько хороших примеров
Тогда позже
источник
Похоже, вы хотите временные таблицы. http://www.sqlteam.com/article/temporary-tables
Обратите внимание, что #TempTable доступен для всего вашего SP.
Обратите внимание, что ## TempTable доступен для всех.
источник
Я нашел ваш вопрос в поисках решения той же проблемы; и что другие ответы не указывают, это способ использовать переменную для изменения имени таблицы при каждом выполнении вашей процедуры в постоянной форме, а не во временной.
Пока что я объединяю весь код SQL с используемыми переменными. Как это:
Я надеюсь, что это поможет, но это может быть громоздко, если код слишком велик, поэтому, если вы нашли лучший способ, пожалуйста, поделитесь!
источник
Что означает создание новой
@tempCustomer
переменной таблицы и вставку данных из клиента. Вы уже заявили об этом выше, так что нет необходимости снова объявлять. Лучше пойти систочник