Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为每个id创建标识_Sql_Sql Server_Sql Server 2000 - Fatal编程技术网

Sql 如何为每个id创建标识

Sql 如何为每个id创建标识,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,是否可以在sql 2000中创建复合键 code id abc 1 abc 2 abc 3 def 1 def 2 ghi 1 其中id在每次代码更改时重新启动计数。我需要通过创建一个表或其他SELECT语句技巧使编号与之完全相同 如何在SQLServer2000中执行此操作 需要查询帮助您可以试试这个 INSERT INTO TABLENAME (code, id) VALUES( 'code', (Select ISNULL

是否可以在sql 2000中创建复合键

code    id
abc      1
abc      2
abc      3
def      1
def      2
ghi      1
其中id在每次代码更改时重新启动计数。我需要通过创建一个表或其他SELECT语句技巧使编号与之完全相同

如何在SQLServer2000中执行此操作

需要查询帮助

您可以试试这个

INSERT INTO TABLENAME (code, id) VALUES( 'code',
(Select ISNULL(MAX(id), 0) FROM TableName where code = 'code')+1)

这里有一种方法可以在运行时检索这些数据,而不必实际将其存储在表中,这对于尝试和维护来说非常麻烦。我在这里使用一个临时表,但你可以假装
\a
是你的永久表。按原样,这将支持多达256个副本。如果您需要更多,可以进行调整

CREATE TABLE #a(code VARCHAR(32));

INSERT #a SELECT 'abc'
UNION ALL SELECT 'abc'
UNION ALL SELECT 'abc'
UNION ALL SELECT 'def'
UNION ALL SELECT 'def'
UNION ALL SELECT 'ghi';
GO

SELECT x.code, id = y.number FROM 
(
  SELECT code, maxid = COUNT(*) FROM #a GROUP BY code
) AS x
CROSS JOIN 
(
  SELECT DISTINCT number FROM master..spt_values
  WHERE number BETWEEN 1 AND 256
) AS y
WHERE x.maxid >= y.number;

DROP TABLE #a;

表中还有其他列吗,还是这一列?您应该期望的
code
的最大重复值是多少?你是想更新一个现有的表还是把这些信息放到一个新表中?@Aaron,没什么,我只是通过表单把数据输入表中。你真的需要把这些数据存储在表中吗?在运行时查询它是否更有意义,这样您就不必在每次更新、插入或删除行时重新计算整个表的数字了?