Получить результат выбора в качестве параметра хранимой процедуры

У меня есть хранимая процедура со следующими параметрами

CREATE PROCEDURE [dbo].[SaveData]
-- Add the parameters for the stored procedure here

@UserID varchar(50),
@ServiceID varchar(50),
@param1 varchar(50),
@param2 varchar(50),
@endDate datetime
    . 
    .
    -- my code --

Я хочу знать, можно ли передать в качестве параметра результат выбора:

    exec SaveDate (SELECT player.UserID,player.ServiceID, 'no','no',GETDATE()
           FROM player)

Я пробовал что-то вроде этого, но не работает.

Ответ 1

Запрос SELECT, который вы написали в вашем примере, вероятно, приведет к возврату нескольких строк (ваш SELECT не имеет предложения WHERE или TOP (n)). Если вы хотите, чтобы ваша процедура включала "табличный" набор параметров, из SQL Server 2008 вы можете использовать параметры таблицы.

Это связано с созданием пользовательской таблицы таблиц и, несомненно, будет означать корректировку логики внутри хранимой процедуры.

Надеюсь, что это поможет:)

См. http://msdn.microsoft.com/en-us/library/bb510489(SQL.100).aspx для получения дополнительной информации.

Ответ 2

1. Один способ:
a) Объявите свои переменные
b) Присвоить значения им с помощью одного оператора select
c) Выполните процедуру, передающую локальные переменные

DECLARE @param1 <DATATYPE>, @param2 <DATATYPE>, ...

SELECT @param1 = col1,  @param2 = col2, ...
FROM TABLE1
WHERE <where_clause>

EXEC SaveDate @param1, @param2, ...

2. Другим способом является определение собственного типа таблицы, его заполнение и передача его в процедуру. Однако это требует небольшого изменения вашей хранимой процедуры (в списке параметров ваш пользовательский тип должен следовать за READONLY):

CREATE TYPE [dbo].[TYPENAME] AS TABLE(
    [ID] [int] NOT NULL,
    ...
)
GO

DECLARE @myTypeVar TYPENAME;

INSERT @myTypeVar
SELECT col1, col2, ...
FROM TABLE1

EXEC SaveData @myTypeVar