2016-01-21 146 views
0

我有一张学生表和部门表。 学生表包含三列如何在sql server中编写动态插入语句?

StudentId | DeptId | StudentName 

部门表包含

DeptId | DeptName 

这可能是DeptTable有时不列入存在的情况下。那就是我正在部署脚本,有时两个脚本部署,有时没有脚本。在没有主管部门的情况下,因此,当系表存在我要插入DEPTID的价值,否则我必须写INSERT语句没有DepartmentID的

IF (EXISTS(
     SELECT 1 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE table_name = 'Department' 
      AND column_name = 'DeptId' 
    )) 
DECLARE @DeptId UNIQUEIDENTIFIER; 
SET @DeptId = Select DeptId From Department Where DeptName = 'Computer' 

INSERT INTO Student ([DeptId], [StudentName]) 
VALUES (@DeptId, 'TBAG') 

但作为DEPTID列有时不存在DepartmentID的会不会有学生表 我需要创建动态Sql。

因此,我创建Select语句

DECLARE @sqlCommand nvarchar(1000) 
DECLARE @DeptName varchar(75) 
declare @DeptId uniqueIdentifier 
SET @DeptName = 'Computer' 
SET @sqlCommand = 'SELECT @dept=DeptId FROM customers WHERE DeptName = @DeptName' 
EXECUTE sp_executesql @sqlCommand, N'@DeptName varchar(50),@dept uniqueIdentifier OUTPUT', @DeptName = @DeptName, @[email protected] OUTPUT 

但如何写Insert语句,我没有得到

回答

1
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 /* null is when DeptId is not exists */, 'TBAG' 

输出 -

(1 row(s) affected) 
+0

SELECT @DeptId = DeptId FROM dbo.Department有时部门表本身不会出现,所以这将变得无效。 – TBAG

+0

@TBAG请在这种情况下提供您的错误消息 – Devart

+0

无效的列名称'DeptId'。由于表格本身不存在。我提到的问题可能是DeptTable有时不存在的情况 – TBAG

0

按我的理解,你要做好准备学生表的动态插入语句(带有deptid或不带deptid)

请参考下面的代码。

DECLARE @STUDENTID INT='',--MENTION YOUR STUDENT ID VALUE AND USE THE SAME IN THE ELSE PART COMMENT OUT IF IT HAS IDENTITY 
      @STUDENTNAME VARCHAR(100)=''--MENTION YOUR STUDENT NAME 
    IF Col_length('dbo.Student', '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 @STUDENTNAME 
     END