2

私はこのコードを持っています、私は変数によってアイデンティティシードを設定しようとしています

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'の近くの構文が正しくありません」と言い続けるのはなぜですか?

4

2 に答える 2

1

これは、修正されたことのないSQLServerの古いバグのようです。問題を回避するには(リンクで提案されているように)、コマンドを文字列に組み込み、文字列を実行します。

リンクからの回避策:

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
于 2012-06-28T15:26:25.827 に答える
1

文字列にステートメントを追加するのが好きではないので..私は次のことをすることになりました:

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'

ありがとうございました

于 2014-02-26T23:21:21.377 に答える