2013-04-03 75 views
2

我有一個遊標,裏面有一個alter table命令,我想用它在特定表中創建新列。列名將包含來自另一個表的一列中的值,這就是爲什麼我使用光標執行此操作的原因。無論如何,我不斷收到此錯誤消息:Msg 173,Level 15,State 1,Line 1 'nvarchar'列的定義必須包含數據類型。。現在我宣佈所有數據類型(嗯,我想我做了,我檢查),我無法找到otu爲什麼我不斷收到此消息。在Google上找不到任何類似的問題,所以我決定在本網站上詢問我的第一個問題。希望能夠快速回答。代碼如下:列'nvarchar'的定義必須包含數據類型

DECLARE @rbr_param nvarchar(255) 
DECLARE @cName nvarchar(255) 
SET @cName = 'P_'[email protected]_param+'_P' 

DECLARE curs CURSOR FOR SELECT DISTINCT rbr_param FROM dbo.parametri_pomocna ORDER BY  rbr_param 
OPEN curs 
FETCH NEXT FROM curs 
INTO @rbr_param 
WHILE @@FETCH_STATUS = 0 
BEGIN 

EXEC('ALTER TABLE dbo.Parametri ADD ' + @cName + ' nvarchar(255)') 

FETCH NEXT FROM curs 
INTO @rbr_param 

END 
CLOSE curs 
DEALLOCATE curs 
+0

我有你的代碼有問題。你已經把它標記爲「mysql」,但你使用'+'作爲字符串連接,以及'exec()'。你在使用SQL Server還是MySQL? –

+0

SQL Server ... exciedently我添加了mysql標記。我的不好 – Stojdza

+0

作爲評論,絕對不要直接執行動態SQL字符串。將它分配給一個變量,然後執行它:'exec sp_executesql @ sql'然後如果你有奇怪的語法錯誤,你可以用'PRINT @ sql'來查看正在執行的實際字符串是什麼。 – Pondlife

回答

2

@cName將不會隨着@rbr_param更新的值自動更新。您需要移動此線路

SET @cName = 'P_'[email protected]_param+'_P' 

內部的循環。

+0

非常感謝你這個作品,拯救了我的一天! – Stojdza

+0

我的榮幸,請記住這些是腳本變量,它更像是一種替代模型,而不是您可能習以爲常的參考模型。 – cmsjr

+0

好的建議不好,請記住。 – Stojdza

1

我想以後設置的值取..

DECLARE @rbr_param nvarchar(255) 
DECLARE @cName nvarchar(255) 

DECLARE curs CURSOR FOR SELECT DISTINCT rbr_param FROM dbo.parametri_pomocna ORDER BY  rbr_param 
OPEN curs 
FETCH NEXT FROM curs 
INTO @rbr_param 
WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @cName = 'P_'[email protected]_param+'_P' 

EXEC('ALTER TABLE dbo.Parametri ADD ' + @cName + ' nvarchar(255)') 

FETCH NEXT FROM curs 
INTO @rbr_param 

END 
CLOSE curs 
DEALLOCATE curs 
相關問題