列'nvarchar'的定义必须包含数据类型

时间:2013-04-03 18:13:28

标签: sql sql-server

我有一个带有alter table命令的游标,我想用它来创建特定表中的新列。列名称将包含来自另一个表的一列的值,这就是我使用游标执行此操作的原因。无论如何,我不断收到此错误消息:消息173,级别15,状态1,行1 列'nvarchar'的定义必须包含数据类型。。现在我宣布所有的数据类型(我想我做了,我检查了),我无法想象otu为什么我一直收到这条消息。无法在谷歌上找到任何类似的问题所以我决定在这个网站上问我的第一个问题。希望能快速回答。这是代码:

DECLARE @rbr_param  nvarchar(255)
DECLARE @cName nvarchar(255)
SET @cName = 'P_'+@rbr_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

2 个答案:

答案 0 :(得分:3)

@cName将不会自动更新,因为@rbr_param的值会更新。你需要移动这一行

SET @cName = 'P_'+@rbr_param+'_P'

循环内部。

答案 1 :(得分: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_'+@rbr_param+'_P'

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

FETCH NEXT FROM curs
INTO @rbr_param

END
CLOSE curs
DEALLOCATE curs