#tsql #set #declare
Вопрос:
Я все еще изучаю SQL и мне интересно, есть ли какой-либо способ установить переменную на все вместо какого-либо определенного значения. Я бы хотел что-то подобное, что было бы полезно для меня в целях тестирования. Я знаю, что так оно и работает.
DECLARE @sku AS VARCHAR(30)
SET @sku = 'ProductA'
Есть ли в любом случае, что я могу сохранить значение внутри открытой переменной. В основном что-то вроде этого.
DECLARE @sku AS VARCHAR(30)
SET @sku = '%'
или
DECLARE @sku AS VARCHAR(30)
SET @sku LIKE '%'
Я не совсем уверен, как это работает в переменных. Я пытался найти его, но не смог найти ничего, что соответствовало бы моей цели. В основном я продолжаю изменять значения переменных между конкретными значениями на %. Любые предложения будут оценены по достоинству.
Добавлен:
DECLARE @sku AS VARCHAR(30) = '%'
DECLARE @name AS VARCHAR(40) = '%'
select * from table1
where sku = @sku
select * from table2
where sku = @sku
select * from table3
where name = @name
В основном в приведенном выше примере запроса я должен комментировать и раскомментировать предложение where в 3 разных таблицах. Есть ситуация, когда я помещаю значение в @sku сверху, и я могу использовать предложение where в операторах select. Для целей тестирования я должен прокомментировать операторы where, но для этого мне нужно сделать это в 3 разных запросах. Есть ли в любом случае, если бы я мог просто поместить фильтр сверху, вместо того чтобы комментировать все 3 предложения where. Имеет ли это смысл?
Комментарии:
1. Как бы вы хотели это использовать ?
2. Какова ваша конечная цель? Вы пытаетесь сделать что-то вроде совпадения, начинающегося с или заканчивающегося на основе значения переменной?
3. В основном моя цель состоит в том, чтобы установить переменную в%, где она показывает все переменные. То, как это работает в предложении where. Например, где артикул типа»%». Могу ли я сделать что-то подобное в переменной?
4. Что вы имеете в виду под «показать все переменные»? Как a возвращает все переменные, которые вы определили?
SELECT
DECLARE
Ответ №1:
Если ваша цель-использовать необязательное значение «все»для параметра, вы можете сделать это следующим образом:
DECLARE @sku nvarchar(100) = '%'; -- or any other token
...
WHERE @sku IN (field, '%')
Это вычисляется следующим образом: если @артикул %
, условие всегда верно и возвращает все строки.
Для любого другого значения он фильтрует только строки, в которых field
значение равно параметру.
Комментарии:
1. Идеальный. Это сработало как заклинание. В любом случае, мы можем что-то сделать с целым числом? Должен ли я сначала преобразовать @sku и поле в целое число ?
2. На самом деле я все понял. Все, что мне нужно было сделать, это преобразовать оба в NVARCHAR. Еще раз спасибо @KekuSemau за ваше время и помощь. Ценю это.