首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

序号有关问题

2012-03-23 
序号问题Id,FormatId,F1,F2Id序号我设了自动加一,FormatId我想他也象这样 SL000001 ,当Insert时就加1,Fo

序号问题
Id,   FormatId,   F1   ,F2
Id序号我设了自动加一,FormatId我想他也象这样 "SL000001 ",
当Insert时就加1,FormatId我想他也能自动加一 "SL000001 ", "SL000002 "...
能用一条sql什么办法实现.最好不要用中间表。有什么好方法?
谢谢!

[解决办法]
create table #test
(id int identity,
FormatId as 'SL '+right(10000000+id,6),
F1 varchar(50))
go
insert #test(F1) select '1 '
union all select '2 '


select * from #test

drop table #test
[解决办法]
declare @count int
declare @sql varchar(8000)
select @sql = 'sl00000 '+convert(varchar(8000),@count,101)

这个不是你的答案,你可以根据这个改
[解决办法]
最好不要用计算列,可以用触发器实现...
这样的一般都是通过软件实现的
这里有个列子:
http://blog.csdn.net/roy_88/archive/2006/12/01/1424370.aspx
[解决办法]
對於 wangdehao(找找找(现在很幸福)) paoluo(一天到晚游泳的鱼)的答案,如果ID,Formatid 不同步就不行了。
[解决办法]
我给各不一样的实现

CREATE TABLE T (Id INT IDENTITY(1,1), FormatId VARCHAR(8), F1 VARCHAR(4) ,F2 VARCHAR(4))

INSERT INTO T
SELECT 'SL ' +
RIGHT( '000000 '+
CAST(
(CAST(
RIGHT(
ISNULL((SELECT TOP 1 FormatId FROM T ORDER BY FormatId DESC), 'SL000000 ')
, 6)
AS INT)+1)
AS VARCHAR)
, 6)
, '2 ', '3 '

SELECT * FROM T

DROP TABLE T

[解决办法]
wangdehao(找找找(现在很幸福)) paoluo(一天到晚游泳的鱼)的答案都是对的.
------------------------------
Create Table TEST
(IdInt ,
FormatId As 'SL ' + Right(1000000 + Id, 6),
F1Int,
F2Int)
GO
最后前台控制ID
[解决办法]
Create Trigger UpdateFormatId On TEST
Instead Of Insert
As
Begin
Insert TEST (FormatId, F1, F2)
Select 'SL ' + Right(1000000 + Id, 6), F1, F2 From Inserted
End
GO
--測試
Insert TEST(F1, F2) Select 1, 2
Union All Select 2, 3

Select * From TEST
GO
--刪除測試環境
Drop Table TEST
--結果
/*
IdFormatIdF1F2
1SL00000112
2SL00000223
*/

我测试的时候好像不行哟。

[解决办法]
不知道怎么回事。
[解决办法]
不好意思,那個觸發器的確是不行。


--建立測試環境
Create Table TEST
(IdInt Identity(1, 1),
FormatId Char(8),
F1Int,
F2Int)
GO
--建立觸發器
Create Trigger UpdateFormatId On TEST
After Insert
As
Begin
Update A Set FormatId = 'SL ' + Right(1000000 + A.Id, 6) From TEST A Inner Join Inserted B On A.Id = B.Id
End
GO
--測試
Insert TEST(F1, F2) Select 1, 2
Union All Select 2, 3

Select * From TEST
GO
--刪除測試環境
Drop Table TEST
--結果
/*
IdFormatIdF1F2
1SL00000112
2SL00000223
*/


[解决办法]
declare @t table(id int identity(1,1),FormatId as 'SL '+left( '000000 ',6-len(id))+cast(id as varchar),value varchar(10))


insert into @t select 'a '
union all select 'b '
union all select 'c '

select * from @t

/*
id FormatId value
----------- -------------------------------------- ----------
1 SL000001 a
2 SL000002 b
3 SL000003 c

(3 行受影响)

*/

热点排行