首页 > 解决方案 > SQL Server 过程或函数 CreateTable 指定的参数过多

问题描述

我想创建一个包含 2 列的表:varchar 类型的客户名称和 int 类型的年龄。

我的代码:

CREATE PROCEDURE CreateTable 
    (@tablename varchar(50), 
     @column varchar(50),
     @type varchar(50),
     @column2 varchar(20), 
     @type2 int, 
     @extra varchar(20) = NULL)
AS
BEGIN
    DECLARE @sqlQuery AS varchar(MAX)
    SET @sqlQuery = 'CREATE TABLE ' + @tablename +  '( id int '+ @column +' ' + @type + @column2 +' ' + @type2+'  PRIMARY KEY(id))'

    PRINT (@sqlQuery)
    EXEC (@sqlQuery)
END
GO

EXEC CreateTable 'Customers', 'Name', 'varchar(50)', 'Age', 'int'

错误是:

过程或函数 CreateTable 指定的参数过多

我不知道我的错误在哪里。请帮我。

标签: sqlsql-server

解决方案


现在应该可以了:

CREATE PROCEDURE CreateTable (
    @tablename VARCHAR(50)
    ,@column VARCHAR(50)
    ,@type VARCHAR(50)
    ,@column2 VARCHAR(20)
    ,@type2 VARCHAR(50)
    ,@extra VARCHAR(20) = NULL
    )
AS
BEGIN
    DECLARE @sqlQuery AS VARCHAR(MAX)

    SET @sqlQuery = 'create table ' + @tablename + '( id int ,' + @column + '  ' + @type + ' , ' + @column2 + ' ' + @type2 + '  PRIMARY KEY(id))'

    PRINT (@sqlQuery)

    EXEC (@sqlQuery)
END
GO

EXEC CreateTable 'Customers'
    ,'Name'
    ,'varchar(50)'
    ,'Age'
    ,'int'

如果您比较参数,您会发现类型@type2被指定为int它应该是varchar执行语句的一部分。

(,)您在存储过程中的可执行字符串中也缺少逗号。


推荐阅读