Ну, если вам нужно передать эти наборы в виде строк, один путь был бы динамический SQL:
DECLARE @ids VARCHAR(32) = '1,2,3';
DECLARE @countries VARCHAR(2000) = 'France,Italy,Spain';
DECLARE @sql NVARCHAR(MAX) = N'SELECT ... FROM ...
WHERE id IN (' + @ids + ') AND country IN ('''
+ REPLACE(@countries, ',',''',''') + ''');';
PRINT @sql;
-- EXEC sp_executesql @sql;
Другой способ table- оцененных параметров. Сначала нужно создать эти типы в базе данных:
CREATE TYPE dbo.TVPids AS TABLE(ID INT);
CREATE TYPE dbo.TVPcountries AS TABLE(Country VARCHAR(255));
Теперь хранимая процедура может принимать эти типы в качестве входных данных:
CREATE PROCEDURE dbo.whatever
@i dbo.TVPids READONLY,
@c dbo.TVPcountries READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT ... FROM dbo.yourtable AS t
INNER JOIN @i AS i ON i.ID = t.ID
INNER JOIN @c AS c ON c.country = t.country;
END
GO
Теперь ваше приложение может передать эти два параметра в виде наборов (например, из DataTable
) вместо создания разделенной запятыми строки или обработки нескольких параметров.
Как добавить переменную таблицы temp и присвоить? – TechDo
@techdo это спасибо! – user1590636