SQL Server存储过程显示语法错误

时间:2014-02-24 08:39:01

标签: c# sql-server-2008 stored-procedures

我创建了一个在运行时创建表的存储过程。此动态表的表列及其数据类型来自数据库中已存在的另一个表。

我从C#控制台应用程序代码调用此存储过程。存储过程抛出语法错误,我完全无法弄清楚导致此语法错误的原因。

这是我写的存储过程代码:

CREATE procedure [dbo].[sproc_TableExists]
   @TableName NVARCHAR(128) 
      ,@Column1Name NVARCHAR(32)
      ,@Column1DataType NVARCHAR(32)
      ,@Column1Nullable NVARCHAR(32)
AS
   DECLARE @SQLString NVARCHAR(MAX)
   BEGIN
       IF( EXISTS (select * from INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName))
       BEGIN
            SET @SQLString = 'ALTER TABLE ' + @TableName + '( '+ @Column1Name + ' ' + @Column1DataType + ' '+ @Column1Nullable +')'
            EXEC (@SQLString)
        END
    ELSE
        BEGIN
            SET @SQLString = 'CREATE TABLE ' + @TableName + '( '+ @Column1Name + ' ' + @Column1DataType + ' '+ @Column1Nullable +')'
            EXEC (@SQLString)
        END
END
GO

错误我从代码中调用它:

  

'('。

附近的语法不正确

2 个答案:

答案 0 :(得分:2)

在更改现有表时,问题在于以下代码行:

SET @SQLString = 'ALTER TABLE ' + @TableName + '( '+ @Column1Name + ' ' + @Column1DataType + ' '+ @Column1Nullable +')'

这将生成以下输出(作为使用伪表\列名称的示例):

ALTER TABLE TableEx( ColumnEx NVARCHAR(MAX) NULL)

但是,这不是有效的SQL语句。

如果您希望在表已存在时添加新列,请改为使用:

SET @SQLString = 'ALTER TABLE ' + @TableName + ' ADD '+ @Column1Name + ' ' + @Column1DataType + ' '+ @Column1Nullable

哪个会产生输出:

ALTER TABLE TableEx ADD ColumnEx NVARCHAR(MAX) NULL

请注意,如果您打算更改预先存在的表中预先存在的列的名称,则需要单独测试 - 上面只会向现有表添加新列。

答案 1 :(得分:1)

替换 EXEC (@SQLString)

EXEC @SQLString