Sql 基于条件动态生成insert语句

Sql 基于条件动态生成insert语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两个单独的学生表部署。在一种情况下,student表包含部门Id,而在另一种情况下,它不包含部门Id 对于这两种情况,我都有一个通用的部署后脚本,用于在student表中插入值 CREATE TABLE dbo.Student ( DeptId UNIQUEIDENTIFIER, StudentName VARCHAR(20) ) GO DECLARE @DeptId UNIQUEIDENTIFIER IF COL_LENGTH('dbo.Department', 'De

我有两个单独的学生表部署。在一种情况下,student表包含部门Id,而在另一种情况下,它不包含部门Id

对于这两种情况,我都有一个通用的部署后脚本,用于在student表中插入值

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”无效

你可以试试这样的东西

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 

如果要在相同的表上运行相同的查询,请修复这些表,使它们具有相同的列。对于某些客户机,我不希望为其提供dept Id功能,而其他客户机可以提供该功能。如何使这两种情况下的脚本保持相同。我的意思是我可以将查询更改为字符串并在EXEC下运行它。但是我很难把它转换成字符串。您可能应该使用更高级别的参数来控制这些特性。数据结构应该相同,否则您将面临维护噩梦。因此,您可以在代码中填入
if
语句,检查该功能是否已启用。@GordonLinoff在代码级别我们正在使用castle安装。因此,根据名称,我们正在处理两个单独的安装。需要的if语句不多。数据库级别我只有一个这样的脚本。为此,我不能为数据库安装编写两个单独的脚本。我只是尝试以字符串的形式执行脚本,并根据部门Id列exists设置一个条件,但如果列不存在,insert语句如何工作。你的insert语句是否正确?