【问题标题】:Identity with variable seed具有可变种子的身份
【发布时间】:2012-06-30 03:38:40
【问题描述】:

我有这段代码,我正在尝试通过变量设置身份种子

DECLARE @iKeyX INT

SELECT @iKeyX = MAX(KeyX) FROM Temporales..tmp_Orders

IF (@iKeyX = NULL)
   SET @iKeyX = 1
ELSE
   SET @iKeyX = @iKeyX + 1

IF OBJECT_ID('tempdb..#tmp_Orders','U') IS NOT NULL
   DROP TABLE #tmp_Orders

SELECT  IDENTITY(INT, @iKeyX, 1) AS KeyX,
        0 AS Valido, 
        OrderNumber, 
        OrderType, 
        Code, 
        Size, 
INTO #tmp_Orders
FROM TableWithData

为什么 SQL 一直告诉我“'@iKeyX' 附近的语法不正确”?

【问题讨论】:

  • 我在这里假设IDENTITY 不能将变量作为参数。

标签: sql tsql variables dynamic identity


【解决方案1】:

这似乎是 SQL Server 中从未修复过的old bug。要解决此问题(如链接中所建议),请将命令构建为字符串,然后执行该字符串。

链接中的解决方法:

DECLARE @SQL varchar(8000)
DECLARE @myident int
SET @myident = 100
SET @sql = 'SELECT IDENTITY(INT, ' + CAST(@myident as varchar) + ', 1)    AS ident INTO #T2'
EXEC(@sql)
SELECT @@identity

【讨论】:

    【解决方案2】:

    因为我不喜欢在字符串中添加语句.. 我最终做了以下事情:

    DECLARE @NewId INT
    
    SELECT @NewId = MAX(ID) FROM MyIDSTable
    
    DECLARE @MyTempData TABLE (
        Id int not null primary key
        ,Field1 int not null
        ,Field2 nvarchar(25) not null
        ,Field3 datetime
    )
    
    INSERT INTO @MyTempData
    SELECT  ROW_NUMBER() OVER ( Order by [C].[Cancel_id] ASC) + @NewId -1 [RowNum]
            ,Field1
            ,Field2
            ,Field3
    
    INSERT INTO MyTable SELECT * FROM @MyTempData
    
    UPDATE MYIDSTable SET ID = (SELECT MAX(ID) FROM @MyTempData) + 1 WHERE Name = 'Something'
    

    谢谢

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 2016-05-05
      • 2014-06-27
      • 2019-04-29
      • 2013-11-13
      • 2023-03-22
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多