1

我在重命名列时遇到问题。我的代码如下:

Using m_cnInterval
    Using m_CMDInterval = New SqlCommand()
        m_CMDInterval.Connection = m_cnInterval
        m_CMDInterval.CommandText = "EXEC sp_rename '[" & strClassColumnName(intClassArrayPosition) & "]', '[" & strRenameClassColumn(intClassArrayPosition) & "]', 'COLUMN'"
        m_CMDInterval.CommandType = CommandType.Text
        m_CMDInterval.ExecuteNonQuery()
    End Using
End Using

我收到如下错误消息:

“参数@objname 不明确或声明的@objtype(列)错误”

我认为这个错误与我使用单引号和括号的方式有关。使用变量作为列名时还有另一种语法吗?

谢谢

4

2 回答 2

1

您需要在第一个参数中给出表的限定路径。尝试这样的事情:

m_CMDInterval.CommandText =
        String.Format("EXEC sp_rename '[{0}].[dbo].[{1}].[{2}]', '{3}', 'COLUMN'",
                      "databasename",
                      "tablename",
                      "old column name",
                      "new column name")

在其中用变量填充值。新名称不能有括号 [] 否则它们会成为新名称的一部分(至少这是我在 SSMS 中测试时看到的)。

于 2012-11-02T19:19:11.263 回答
0

我实际上最终使用了以下内容:

m_CMDInterval.CommandText = "EXEC sp_rename 'Interval.[" & strClassColumnName _
(intClassArrayPosition) & "]', '" & strRenameClassColumn(intClassArrayPosition) _
 & "', 'COLUMN'"

我需要用列名指定表名。我使用了括号,因为列名中有一个空格。我不必在重命名的列名上使用方括号,即使它的名称中也有空格。

谢谢您的帮助!

于 2012-11-02T23:31:57.620 回答