我正试图在Server中创建一个过程。到目前为止,我的尝试如下:
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:@table_name附近的不正确语法。
我刚开始使用Server,我在PostgreSQL中开发了同样的东西
发布于 2015-01-06 11:27:34
将过程代码更改为:
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语句,以查看查询在执行之前的确切外观。
另外,我建议您不要使用TEXT或NTEXT数据类型,并将变量作为NVARCHAR传递,因为您还将@sql变量的数据类型设置为NVARCHAR,并在过程声明中给出参数的大小。
另外,请注意@marc_s说过的话,不要使用sp作为存储过程的前缀,因为它是由微软预订的。
因此,为了调用上述存储过程,我建议您使用:
EXEC cr_tbl @table_name='tbl_9'
建议:
不一定要指定要传递变量的参数的名称,但我认为,如果您创建具有多个参数的存储过程,并且希望传递多个变量,那么它将在将来派上用场。
如果显式地指定传递给什么参数的变量(否则,如果没有,那么传递参数的顺序将很重要!),这将有助于避免错误。
发布于 2015-01-06 11:29:56
下面的查询将帮助您
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 https://stackoverflow.com/questions/27797651
复制相似问题