2014-09-29 55 views
0

我需要爲光標寫一個動態查詢來獲取表的索引名稱。光標的動態查詢

嘗試1:

DECLARE @Cur AS Cursor 

EXECUTE SP_EXECUTESQL N'SET @Cur = CURSOR fast_forward for 
         SELECT IndexColumn = i.name 
         FROM sys.indexes i 
         INNER JOIN sys.tables t ON t.object_id = i.object_id 
         WHERE 
         T.Name = ''' + @TableName + '''' 

錯誤:附近有語法錯誤 '+'。

嘗試2:

DECLARE @sqlstatement nvarchar(max) 

SET @sqlstatement = 'DECLARE @Cur AS CURSOR fast_forward for 
       SELECT IndexColumn = i.name 
       FROM sys.indexes i 
       INNER JOIN sys.tables t ON t.object_id = i.object_id 
       WHERE 
       T.Name = ''' + @TableName + '''' 
PRINT(@sqlstatement) 
EXEC sp_executesql @sqlstatement 

錯誤:附近有語法錯誤FAST_FORWARD'。

+0

更大的問題是,你真的需要光標嗎? – 2014-09-29 13:25:06

回答

1

光標聲明是不正確的(失去@/AS

SET @sqlstatement = 'DECLARE Cur CURSOR fast_forward for 
       SELECT IndexColumn = i.name 
       FROM sys.indexes i 
       INNER JOIN sys.tables t ON t.object_id = i.object_id 
       WHERE 
       T.Name = ''' + @TableName + '''' 

(未遂1是不正確的光標是不是在建字符串中的批次範圍內)

+0

K,非常感謝。 – Meem 2014-09-29 12:10:38

1

那麼有因爲遊標不在範圍內,所以不需要聲明。你也可以這樣做 -

SET @sqlstatement = 'DECLARE cur_mycursor CURSOR fast_forward for 
       SELECT IndexColumn = i.name 
       FROM sys.indexes i 
       INNER JOIN sys.tables t ON t.object_id = i.object_id 
       WHERE 
       T.Name = ''' + @TableName + '''' 
EXEC(@sqlstatement) 

OPEN cur_mycursor 

FETCH NEXT FROM cur_mycursor INTO .... blah..blah... 
+0

非常感謝。 – Meem 2014-09-29 12:10:13