在 SQL 服务器中调用过程时出错
Error When Calling Procedure In SQL Server
我正在尝试在 SQL 服务器中创建一个过程。到目前为止,这是我的尝试:
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
它创建成功但是当我调用
EXEC sp_cr_tbl 'tbl_9'
我收到以下错误:
ErrorMessage: Incorrect syntax near '@table_name'.
我是 SQL 服务器的新手,我在 Postgre 中开发过同样的东西SQL
将您的程序代码更改为:
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,您需要将要创建的 table 的名称附加到命令查询 (@sql),然后执行此命令。
您可以在 EXEC
之前添加一个 PRINT @sql
语句,以准确查看查询在执行之前的样子。
此外,我建议您不要使用 TEXT
或 NTEXT
数据类型并将变量作为 NVARCHAR
传递,因为您还为 @[=47 设置了数据类型=] 变量为 NVARCHAR
,并在过程声明中为参数指定大小。
另外,请注意@marc_s所说的,不要使用sp
作为存储过程的前缀,因为它已被Microsoft保留。
因此,为了调用上面的存储过程我推荐你使用:
EXEC cr_tbl @table_name='tbl_9'
建议:
指定要传递变量的参数的名称不是强制性的,但我认为如果您创建具有多个参数的存储过程并且要传递多个变量,将来它会派上用场。
如果您明确指定将哪些变量传递给哪些参数,这将有助于避免错误(否则,如果您不指定,那么您传递的参数的顺序将很重要!).
下面的查询可以帮到你
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
我正在尝试在 SQL 服务器中创建一个过程。到目前为止,这是我的尝试:
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
它创建成功但是当我调用
EXEC sp_cr_tbl 'tbl_9'
我收到以下错误:
ErrorMessage: Incorrect syntax near '@table_name'.
我是 SQL 服务器的新手,我在 Postgre 中开发过同样的东西SQL
将您的程序代码更改为:
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,您需要将要创建的 table 的名称附加到命令查询 (@sql),然后执行此命令。
您可以在 EXEC
之前添加一个 PRINT @sql
语句,以准确查看查询在执行之前的样子。
此外,我建议您不要使用 TEXT
或 NTEXT
数据类型并将变量作为 NVARCHAR
传递,因为您还为 @[=47 设置了数据类型=] 变量为 NVARCHAR
,并在过程声明中为参数指定大小。
另外,请注意@marc_s所说的,不要使用sp
作为存储过程的前缀,因为它已被Microsoft保留。
因此,为了调用上面的存储过程我推荐你使用:
EXEC cr_tbl @table_name='tbl_9'
建议:
指定要传递变量的参数的名称不是强制性的,但我认为如果您创建具有多个参数的存储过程并且要传递多个变量,将来它会派上用场。
如果您明确指定将哪些变量传递给哪些参数,这将有助于避免错误(否则,如果您不指定,那么您传递的参数的顺序将很重要!).
下面的查询可以帮到你
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