小编Jyr*_*kka的帖子

T-SQL 基于标识列插入值

是否可以有一个基于 Identity 列的具有 PK 的表?

假设我有一个客户表,两个字段对于我们的案例很重要,Id即 isPK nvarchar(20)SequenceIdwhich is int identity(1,1)。我想要一个存储过程,该过程将具有(除其他外)一个参数@CustomerType,并根据此参数生成值Id并将新行插入表中。像这样的东西:

CREATE PROCEDURE createCustomer
@CustomerType int, 
@GivenName nvarchar(20), 
@Surname nvarchar(20), 
@BirthDate date = null
...
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @prefix nvarchar(1) = N'x'
    IF @CustomerType = 1
    BEGIN
        SET @prefix = N'P'
    END
...
    ELSE
    BEGIN
        SET @prefix = N'x'
    END

    INSERT INTO [dbo].[Customers]
           ([Id],
            [GivenName],[Surname],[BirthDate])
    VALUES
           (@prefix + (SequenceId + 1000000),
        @GivenName,@Surname,@BirthDate);

    SELECT INSERTED.Id AS CustomerId; …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server dml t-sql

2
推荐指数
1
解决办法
5252
查看次数

如何存储每个产品的版本序列

我需要创建一个如下所示的表:

+----+---------+---------+
| Id | Product | Version |
+----+---------+---------+
|  1 |       1 |       1 |
|  2 |       1 |       2 |
|  3 |       2 |       1 |
|  4 |       1 |       3 |
|  5 |       2 |       2 |
+----+---------+---------+
Run Code Online (Sandbox Code Playgroud)

哪里IDIdentity(1,1)我需要的Version是自动填充这取决于插入Product

SELECT使用ROW_NUMBER()with可以达到类似的效果PARTITION

SELECT ID, Product,
ROW_NUMBER() OVER(PARTITION BY Product ORDER BY ID) AS Version
FROM Products
Run Code Online (Sandbox Code Playgroud)

我有哪些选择?

database-design sql-server t-sql identity ddl

0
推荐指数
1
解决办法
133
查看次数

标签 统计

database-design ×2

sql-server ×2

t-sql ×2

ddl ×1

dml ×1

identity ×1