#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. В основном это позволяет хранить разные типы в одном столбце. После сохранения вы можете привести их к целевому типу и выполнить соответствующие операции в зависимости от него.