Как выбрать столбец в @variable? - PullRequest
0 голосов
/ 21 мая 2019

Я пишу хранимую процедуру, и моя цель для пользователя - ввести одну переменную, несколько или все в зависимости от региона.

Я пытаюсь установить для моей переменной все значения в столбце для региона

DECLARE @REGION TABLE
(
REGION VARCHAR(100)
)
INSERT INTO
@REGION
SELECT * FROM Region_Table

DECLARE @REGION VARCHAR(MAX)
SET @REGION = ''

    IF ( @REGION = '' )
        OR ( @REGION = NULL ) 
        SELECT  @REGION = 'ALL AREAS'  

Select * from #table
    WHERE   Region = @Region
            OR @Region = 'ALL AREAS' 

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

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

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

ВашВходная переменная будет выглядеть следующим образом: -

Declare @Region varchar(100)='A,B,C' --3 regions comma seperated 
--Declare @Region varchar(100)='A' -- or one only  
--Declare @Region varchar(100)=NULL -- or null for all,

И я предполагаю, что у вас есть таблица регионов, в которой есть другие столбцы, которые вы хотели бы вернуть, поэтому я собираюсь принять таблицу и некоторые данные для тестирования.(вы не будете этого шага)

Declare @RegionTable Table (RegionId int,Region varchar(50), otherdata varchar(100))
insert into @RegionTable values 
(1,'A','AAAA'),
(2,'B','BBBB'),
(3,'C','CCCC'),
(4,'D','DDDD'),
(5,'E','EEEE'),
(6,'F','FFFF')

Теперь нам нужно выбрать, который будет обрабатывать одну переменную, несколько или все.это поможет: -

Select * from @RegionTable r where Region in (select cs.[Value] from  STRING_SPLIT (@Region, ',') cs ) or @Region is null

Результаты будут кратны, как показано ниже: -

RegionId    Region  otherdata
1   A   AAAA
2   B   BBBB
3   C   CCCC
0 голосов
/ 21 мая 2019

Чтобы получить все столбцы в строке в переменной, используйте этот подход:

declare @table_variable table(all_columns varchar(max));

insert into @table_variable(all_columns)
select column1 + column2 + column3 from table1;

Обратите внимание, что нельзя использовать SELECT * (выбрать все столбцы) для вставки в один столбец в табличной переменной. SELECT * обычно считается плохой практикой, лучше назвать столбцы.

Если некоторые столбцы не относятся к типу varchar, вам нужно привести их следующим образом:

select cast(column1 as varchar(100)) + cast(column2 as varchar(5)) from table1;

Когда вы проверяете NULL, используйте «IS NULL», а не «= NULL», например

IF(@variable IS NULL) 

Наконец, имена переменных должны быть уникальными, вы не можете объявить две переменные @region в одном пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...