4

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

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
4

2 回答 2

3

@cName 不会随着@rbr_param 的值更新而自动更新。你需要移动这条线

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

循环内。

于 2013-04-03T18:16:20.863 回答
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
于 2013-04-03T18:16:27.950 回答