首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server中调用过程时出错

在Server中调用过程时出错
EN

Stack Overflow用户
提问于 2015-01-06 11:25:49
回答 2查看 58关注 0票数 0

我正试图在Server中创建一个过程。到目前为止,我的尝试如下:

代码语言:javascript
复制
create proc sp_cr_tbl(@table_name text)
--returns integer
as
begin
declare @sql nvarchar(4000)     
set @sql = 'create table @table_name(id integer)'
exec sp_executesql @sql
end 

它成功地创建了,但是当我调用

代码语言:javascript
复制
EXEC sp_cr_tbl 'tbl_9'

我收到以下错误:

ErrorMessage:@table_name附近的不正确语法。

我刚开始使用Server,我在PostgreSQL中开发了同样的东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 11:27:34

将过程代码更改为:

代码语言:javascript
复制
CREATE PROCEDURE cr_tbl (@table_name NVARCHAR(30))
AS
BEGIN
    DECLARE @sql NVARCHAR(4000)

    SET @sql = 'create table ' + @table_name + ' (id integer)'

    EXEC sp_executesql @sql
END

这是动态SQL,您需要将要创建的表的名称附加到命令查询(@sql)中,然后执行此命令。

您可以在PRINT @sql语句之前添加EXEC语句,以查看查询在执行之前的确切外观。

另外,我建议您不要使用TEXTNTEXT数据类型,并将变量作为NVARCHAR传递,因为您还将@sql变量的数据类型设置为NVARCHAR,并在过程声明中给出参数的大小。

另外,请注意@marc_s说过的话,不要使用sp作为存储过程的前缀,因为它是由微软预订的。

因此,为了调用上述存储过程,我建议您使用:

EXEC cr_tbl @table_name='tbl_9'

建议:

不一定要指定要传递变量的参数的名称,但我认为,如果您创建具有多个参数的存储过程,并且希望传递多个变量,那么它将在将来派上用场。

如果显式地指定传递给什么参数的变量(否则,如果没有,那么传递参数的顺序将很重要!),这将有助于避免错误。

票数 2
EN

Stack Overflow用户

发布于 2015-01-06 11:29:56

下面的查询将帮助您

代码语言:javascript
复制
create proc sp_cr_tbl(@table_name text)
 --returns integer
as
begin
 declare @sql nvarchar(4000)     
  set @sql = 'create table ' + convert(nvarchar(4000), @table_name) + ' (id integer)'
  exec sp_executesql @sql
end 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27797651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档