【问题标题】:SQL Server Procedure or function CreateTable has too many arguments specifiedSQL Server 过程或函数 CreateTable 指定的参数过多
【发布时间】:2020-10-31 17:29:24
【问题描述】:

我想创建一个包含 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 指定的参数过多

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

【问题讨论】:

标签: sql sql-server


【解决方案1】:

现在应该可以了:

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作为执行语句的一部分。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2023-03-26
    • 2014-02-08
    相关资源
    最近更新 更多