Добавление столбца nvarchar с переменным размером - PullRequest
0 голосов
/ 10 июня 2019

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

DECLARE @size int
SET @size = 200
GO

ALTER TABLE Testbench.dbo.Certificate 
    ADD E35 NVARCHAR(@size)

Это дает:

Неправильный синтаксис около @size

Контекст

DECLARE @size int
SET @size = 200
GO

ALTER TABLE Testbench.dbo.Certificate 
    ADD E35 NVARCHAR(@size)
GO

UPDATE Testbench.dbo.Certificate 
SET E35 = ''

ALTER TABLE Testbench.dbo.Certificate 
    ALTER COLUMN E35 NVARCHAR(@size) NOT NULL

Это приводит к получению дважды:

Неправильный синтаксис рядом с @size

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Здесь есть две проблемы:

  1. Первым является GO сепаратор партии.GO не является частью языка SQL .Это пакетный разделитель, используемый несколькими известными инструментами, но он не является частью языка.Вы видите, что ваш инструмент отправляет дополнительные операторы после каждого GO как часть отдельных сеансов, где переменная @size больше не существует.
  2. Вы не можете использовать параметры в ALTERзаявление в любом случае.
2 голосов
/ 10 июня 2019

Почему следующее не работает?

Поскольку вы не можете параметризовать операторы языка определения данных (DDL) в SQL Server.Вместо этого вы можете использовать динамический SQL.EG:

DECLARE @size int
SET @size = 200
DECLARE @sql nvarchar(max)
set @sql = concat('ALTER TABLE Testbench.dbo.Certificate ADD E35 NVARCHAR(',@size,')')
exec (@sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...