如何将数据插入多个SQL表并为每个值创建唯一ID

时间:2015-08-12 21:20:40

标签: sql-server

作为示例,我的数据库有3个表:People_TableAddress_TableGender_Table

我想插入

"First_Name", "Last_Name" 

People_Table

"Address_Line1", "Address_Line2", "City" & "Zip_Code"

Address_Table

"F" or "M"

Gender_Table

对于每个条目,我需要创建一个包含8个字符的唯一标识符。该ID应如下"N0000001", "N0000002", "N0000023"

我该怎么做?

感谢您的帮助!!!

3 个答案:

答案 0 :(得分:1)

您通过使数据库唯一键与可视业务键相同来犯错误。

您应该使用主键的标识列(它们自动增量而不需要任何代码)。然后,您可以在表格上创建一个计算列,例如将数字34563转换为N0034563

当您的ID超过9999999时会发生什么?

答案 1 :(得分:0)

您需要创建一个序列表,其中包含两列number和tablegroupid。你应该创建插入触发器。在触发器上查找最大数量的序列表。并让他们+1。连接你的前缀。并生成您的自定义标识符。

答案 2 :(得分:0)

以下是一种方法:

创建表:

CREATE TABLE People_Table (
    id_key VARCHAR(8)
    ,id INT
    ,firstname VARCHAR(50)
    ,lastname VARCHAR(50)
    );

CREATE TABLE Address_Table (
    id_key VARCHAR(8)
    ,Address_Line1 VARCHAR(50)
    ,Address_Line2 VARCHAR(50)
    ,City VARCHAR(50)
    ,Zip_Code VARCHAR(5)
    );

CREATE TABLE Gender_Table (
    id_key VARCHAR(8)
    ,Gender VARCHAR(1)
    );

创建PROC:

创建一个过程,将插入值作为参数,并为每个表创建单独的insert语句。从max(id)获取People_Table并在插入前增加1。要创建唯一标识符键值,请使用N连接0max(id) + 1的复制。

CREATE PROCEDURE dbo.test_multipleinsert (
    @FirstName VARCHAR(50)
    ,@LastName VARCHAR(50)
    ,@AddressLine1 VARCHAR(50)
    ,@AddressLine2 VARCHAR(50)
    ,@city VARCHAR(50)
    ,@zipcode VARCHAR(5)
    ,@gender VARCHAR(1)
    )
AS
DECLARE @uniqueidentifier VARCHAR(8)
    ,@maxrowid INT;

SET NOCOUNT ON

BEGIN
    SET @maxrowid = 0;

    SELECT @maxrowid = max(id) + 1
    FROM People_table;

SET @uniqueidentifier = 'N' + right(replicate(0, 7) + cast(@maxrowid AS VARCHAR(7)), 7);

    INSERT INTO People_Table (
        id_key
        ,id
        ,firstname
        ,lastname
        )
    VALUES (
        @uniqueidentifier
        ,@maxrowid
        ,@firstName
        ,@lastName
        );

  INSERT INTO Address_Table (
        id_key
        ,Address_Line1
        ,Address_Line2
        ,City
        ,Zip_Code
        )
    VALUES (
        @uniqueidentifier
        ,@AddressLine1
        ,@AddressLine2
        ,@city
        ,@ZipCode
        );

    INSERT INTO Gender_Table (
        id_key
        ,Gender
        )
    VALUES (
        @uniqueidentifier
        ,@gender
        );
END

EXECUTE PROC TO INSERT VALUES:

EXEC dbo.test_multipleinsert @FirstName = 'Michael'
    ,@LastName = 'Jordan'
    ,@AddressLine1 = '123 Main Street'
    ,@AddressLine2 = 'Apt#12'
    ,@City = 'CHICAGO'
    ,@ZipCode = '64601'
    ,@Gender = 'M';

EXEC dbo.test_multipleinsert @FirstName = 'Mark'
,@LastName = 'Johnson'
,@AddressLine1 = '456 Main Street'
,@AddressLine2 = 'Apt#89'
,@City = 'Atlanta'
,@ZipCode = '75859'
,@Gender = 'M';

SELECT *
FROM people_table;

SELECT *
FROM address_table;

SELECT *
FROM gender_table;

作为旁注,由于您对1至9999999之间的记录数量的限制,您的表格将遇到一些重大问题。