在插入期间在字符串中间插入@@ identity

时间:2012-10-19 21:50:21

标签: sql

我不确定这是否可行,但基本上我想做这样的事情......

insert into [DNSList].[dbo].[myTable] ([myValue]) values ('hello ' + convert(varchar,@@identity) + 'world')

在DB中存储一个值以便稍后检索,并且在字符串的某个位置需要一个唯一值,因此只需让sql跟踪唯一ID并将其存储在条目中。

感谢您的帮助!

btw,使用sql server 2008

修改 如果我这样做,它可靠吗?

declare @id as varchar
set @id = CONVERT(varchar,@@identity + 1)
insert into [DNSList].[dbo].[myTable] ([myValue]) values ('hello ' + @id + ' world')

3 个答案:

答案 0 :(得分:1)

在插入之后才会确定标识列的值,因此您无法将其作为插入的一部分添加...但是,您可以使用computed column执行类似操作:< / p>

ALTER TABLE dbo.myTable
ADD MyValue AS 'hello ' + convert(varchar, ID) + 'world' PERSISTED

答案 1 :(得分:0)

我更喜欢Computed Column Idea,但如果Hello world部分是可变的,你总是可以使用输出:

-- What I imagine the table would look like
CREATE TABLE dbo.MyTable (
myID INT IDENTITY(1,1) NOT NULL, 
myValue NVARCHAR(2000)
)

DECLARE @TmpMyIDasString NVARCHAR(2000)
DECLARE @TmpMyIDasINT INT
DECLARE @TmpTable TABLE(tmpID) -- You can only output in a table :/

INSERT INTO dbo.MyTable (myValue)
     VALUES ('AnyText') 
     OUTPUT INSERTED.myId INTO @TmpTable

     -- Put it back in variables you can actually use
     SELECT @TmpMyIDasString = LTRIM(tmpID), 
            @TmpMyIDasINT = tmpID 
       FROM @TmpTable

     -- Update!  
     UPDATE dbo.MyTable 
        SET myValue = myValue+@TmpMyIDasString 
      WHERE myID = @TmpMyIDasINT

它确实会让你在插入后进行额外的更新....

答案 2 :(得分:0)

这似乎是插入的最直接方式。

declare @id as varchar
set @id = CONVERT(varchar,@@identity + 1)
insert into [DNSList].[dbo].[myTable] ([myValue]) values ('hello ' + @id + ' world')