日期:2014-05-16  浏览次数:20719 次

定义临时表时可以使用变量吗?



declare @A1 bigint
declare @BStep bigint
set @A1 = 268435455
set @BStep = 268435456

declare @indextable table([id] [bigint] IDENTITY(@A1,@BStep) NOT NULL, [nid] [bigint] NULL)


想要动态定义表的第一个值和增量,但是提示IDENTITY(@A1,@BStep)这部分有错,是不是不能这样动态的使用变量来定义啊,能有什么方法实现吗?
------解决方案--------------------
试试这个,只能把所有的语句,全部改成动态语句:

CREATE PROCEDURE [dbo].[mypcAddProCategory]
(
@PcPID bigint, 
@PdName nvarchar(300),
@A1 bigint, 
@A2 bigint, 
@BStep bigint
)
AS

set nocount on
begin

declare @sql varchar(8000)

declare @t table(newPCID bigint)

set @sql = '
declare @newPCID bigint
set @newPCID = 0
            
declare @indextable table([id] [bigint] IDENTITY('+

CAST(@A1+1 as varchar)+','+CAST(@BStep as varchar)+'
) NOT NULL, [nid] [bigint] NULL)

insert into @indextable(nid) SELECT PcID FROM ProCategory WHERE (PcID > 
'+CAST(@A1 as varchar)+
') AND (PcID <= '+CAST(@A2 as varchar)+') AND (PcPID = '+CAST(@PcPID as varchar)+
') ORDER BY PcID 

SELECT TOP 1 t.id
FROM @indextable t
WHERE t.id <> t.nid
ORDER BY t.id
'

--select @sql

insert into @t
exec(@sql)


declare @newPCID BIGINT

select @newPCID = newPCID from @t


print @newPCID
end
set nocount off
go