作为示例,我的数据库有3个表:People_Table
,Address_Table
和Gender_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"
我该怎么做?
感谢您的帮助!!!
答案 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
连接0
和max(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之间的记录数量的限制,您的表格将遇到一些重大问题。