Можно ли использовать переменную int для установки размера другой переменной в SQL

#sql #sql-server #tsql #variables

#sql #sql-server #tsql #переменные

Вопрос:

Я довольно новичок в SQL, поэтому прошу прощения, если это глупый вопрос. Все, к чему я стремлюсь, это использовать целочисленную переменную для установки размера переменной nvarchar.

 DECLARE @asdf int
SET @asdf = 255
DECLARE @qwer nvarchar(@asdf)
  

Я что-то упускаю или это просто невозможно? Я действительно ничего не могу найти об этом конкретном случае в Интернете, поэтому я спрашиваю здесь.

Комментарии:

1. На самом деле это невозможно.

2. Всегда есть динамический SQL, но я подозреваю, что это, вероятно, не очень хороший вариант его использования. Если вы сомневаетесь, вы можете использовать nvarchar(4000) , поскольку он займет столько длины, сколько ему нужно.

3. Вы действительно пытаетесь реализовать какой-то массив?

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

Ответ №1:

Нет необходимости беспокоиться о производительности. Она NVARCHAR(x) будет использовать только пространство, необходимое для хранения значения.

Вы можете использовать динамический оператор T-SQL, подобный этому (но в этом нет смысла):

 DECLARE @asdf int
SET @asdf = 5

DECLARE @DynamicTSQL NVARCHAR(MAX) = N'
DECLARE @qwer nvarchar(' CAST(@asdf AS VARCHAR(12)) ')
SET @qwer = ''1234567890'';
SELECT @qwer
';

EXEC sp_executesql @DynamicTSQL
  

Вы можете сохранить значение в столбце sql_variant. В основном это позволяет хранить разные типы в одном столбце. После сохранения вы можете привести их к целевому типу и выполнить соответствующие операции в зависимости от него.