2016-01-21 63 views
0

我有两个独立的学生表部署。在一种情况下,学生表包含部门ID,在其他情况下,它不包含部门ID。根据条件动态生成插入语句

我有一个共同的帖子部署脚本,用于在学生表中插入值的两种情况。

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列此脚本不起作用

消息207,级别16,状态1,行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