2016-01-21 2 views
0

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

У меня есть общий сценарий развертывания сообщений для обоих случаев, чтобы вставить значение в таблицу учеников.

CREATE TABLE dbo.Student 
(
    DeptId UNIQUEIDENTIFIER, 
    StudentName VARCHAR(20) 
) 
GO 

DECLARE @DeptId UNIQUEIDENTIFIER 

IF COL_LENGTH('dbo.Department', 'DeptId') IS NOT NULL BEGIN 
    SELECT @DeptId = DeptId 
    FROM dbo.Department 
    WHERE DeptName = 'Computer' 
END 

INSERT INTO dbo.Student(DeptId, StudentName) 
SELECT @DeptId, 'TBAG' 

Но когда у меня нет отдела Id колонка этот скрипт не работает

Msg 207, Level 16, State 1, Line 23 Неверное имя столбца 'DeptId'.

+2

Если вы хотите запустить те же самые запросы на один и те же таблицы, исправить таблицы поэтому они имеют одни и те же столбцы. –

+0

Для какого-то клиента я не хочу давать функцию дебета Id, в то время как другая может иметь эту функцию. Как я могу сохранить этот сценарий одинаковым для обоих случаев. Я имею в виду, что я открыт для изменения запроса в строку и запуска его под EXEC. Но мне сложно преобразовать это в строку. – TBAG

+0

. , Вероятно, вы должны контролировать такие функции, используя параметры на более высоком уровне. Структуры данных должны быть одинаковыми, или вы столкнетесь с кошмаром обслуживания. Таким образом, код может быть заполнен операторами 'if', проверяющими, включена ли функция. –

ответ

0

Вы можете попробовать что-то вроде этого,

CREATE TABLE dbo.Student 
    (
    DeptId  UNIQUEIDENTIFIER, 
    StudentName VARCHAR(20) 
) 

GO 

IF Col_length('dbo.Department', 'DeptId') IS NOT NULL 
    BEGIN 
     INSERT INTO dbo.Student 
        (DeptId, 
        StudentName) 
     SELECT DeptId, 
      'TBAG' 
     FROM dbo.Department 
     WHERE DeptName = 'Computer' 
    END 
ELSE 
    BEGIN 
     INSERT INTO dbo.Student 
        (StudentName) 
     SELECT 'TBAG' 
    END 
Смежные вопросы