2016-01-21 65 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