SQL SERVER: я хотел бы перенести свои данные в другой столбец той же таблицы, прежде чем удалить первый - PullRequest
0 голосов
/ 11 мая 2018

У меня проблемы с некоторыми из моих сценариев SQL на SQL SERVER, на самом деле я пытаюсь перенести данные из столбца A в столбец B той же таблицы и затем удалить столбец B,

Однакомоя проблема в том, что мне нужно заранее проверить наличие A, потому что код должен выполняться на сервере, к которому у меня нет доступа (я работаю сторонним разработчиком в профессиональном приложении)

Вот мой код:

-- Export the data from the column name
-- Drop the column name

USE p_mynacellelocation_db_ChecklistWPF
GO


IF COL_LENGTH('model_trolley_part','name') IS NOT NULL
BEGIN
UPDATE model_trolley_part
SET name_en=[name];

ALTER TABLE model_trolley_part
DROP COLUMN [name];
END

В случае, если имя столбца не существует, я бы не хотел ничего делать

Однако при выполнении кода в базе данных, где столбецимя не существует SQL Server возвращает меня:

Сообщение 207, Уровень 16, Состояние 1, Строка 12 Неверное имя столбца «имя».

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Попробуйте это:

IF EXISTS(SELECT *
          FROM   INFORMATION_SCHEMA.COLUMNS
          WHERE  TABLE_NAME = 'myTableName'
                 AND COLUMN_NAME = 'ColumnA') 
BEGIN

// your update and drop code goes here

END

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

0 голосов
/ 11 мая 2018

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

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql?view=sql-server-2017

exec sp_rename 'model_trolley_part.name', 'name_en', 'COLUMN'
0 голосов
/ 11 мая 2018

Для этого вам нужно использовать динамический SQL.Причина в том, что синтаксический анализатор попытается проверить ваш код, даже код, который не будет выполнен, потому что его условие IF не будет выполнено.

Анализатор достаточно умен, чтобы увидеть, что нет таблицы с именем name, но он недостаточно умен, чтобы понять, что код не должен выполняться из-за IF, поэтому возникает ошибка синтаксического анализа.

Использование динамического SQL в блоке BEGIN..END после того, как IF скрывает это от синтаксического анализатора, поэтому он будет выполняться.

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