一张表,里面只有两列,分别是Id,name.id自动增长。我想通过储存过程把表名和和属性都用参数传递。但是执行报了
Msg 214, Level 16, State 2, Procedure sp_executesql, Line 10
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
希望哪位大哥帮忙解决。小弟感激万分!
主要遇到就是不能把表名当参数传递。
以下是小弟测试的代码
create procedure tests
@name varchar(20),
@tableName varchar(50) --表名--
as
begin
declare @ta varchar(25);
declare @Sql varchar(150);
set @ta=@name;
set @Sql='insert into '+@tableName+'(name)values('+(@ta)+')'
exec sp_executesql @Sql
end
Msg 214, Level 16, State 2, Procedure sp_executesql, Line 10
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
希望哪位大哥帮忙解决。小弟感激万分!
主要遇到就是不能把表名当参数传递。
以下是小弟测试的代码
create procedure tests
@name varchar(20),
@tableName varchar(50) --表名--
as
begin
declare @ta varchar(25);
declare @Sql varchar(150);
set @ta=@name;
set @Sql='insert into '+@tableName+'(name)values('+(@ta)+')'
exec sp_executesql @Sql
end
declare @Sql nvarchar(150);在存储过程中拼接SQL时,SQL字符串要用 nvarchar 类型
@name varchar(20),
@tableName varchar(50)
as
begin
declare @sql nvarchar(max)
set @sql='insert into ' + @tableName + '(name) values (' + @name +')'
exec(@sql)
end
exec sp_executesql @Sql N'@name varchar(25),@tableName varchar(100)',@name ,@tableName
乱说,谁说拼接Sql不能用varchar了
如下例子 你去sql2005中测试
create proc TestPoc
@tablename varchar(50)
as
begin
declare @sql varchar(100)
set @sql='select * from '+@tablename
exec(@sql)
end
@name Nvarchar(20),
@tableName Nvarchar(50) --表名--
as
begin
declare @ta Nvarchar(25);
declare @Sql Nvarchar(150);
set @ta=@name;
set @Sql='insert into '+@tableName+'(name)values('+(@ta)+')'
exec sp_executesql @Sql
end
传递para的时候给定第三个长度的那个参数
Msg 128, Level 15, State 1, Line 1
The name 'da' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.(1 row(s) affected)
@name varchar(20),
@tableName varchar(50) --表名--
as
BEGIN
----------DECLARE @tableName NVARCHAR(20)
declare @ta varchar(25);
declare @Sql varchar(150);------set @tableName='aaaa';
----set @ta='aaaa';set @Sql='insert into '+@tableName+' (name)values(N'''+(@ta)+''')'
----PRINT @Sql
exec sp_executesql @Sqlend
小小问题改一下
set @Sql='insert into '+@tableName+'(name) values('+(@ta)+')'
values前面加空格
@name varchar(20),
@tableName varchar(50) --表名--
as
BEGIN
----------DECLARE @tableName NVARCHAR(20)
declare @ta varchar(25);
declare @Sql varchar(150);------set @tableName='aaaa';
----set @ta='aaaa';set @Sql='insert into '+@tableName+' (name)values('''+(@ta)+''')'
PRINT @Sql
---exec sp_executesql @Sqlend
看看输出的SQL是否正确的。
create procedure tests
@name varchar(20),
@tableName varchar(50) --表名--
as
begin
declare @Sql nvarchar(150);
print '@name='+@name
print '@tableName='+@tableName
set @Sql='insert into '+@tableName+'(name) values('''+@name+''')'
print @sql
exec sp_executesql @Sql
end
刚试 了下,
表只能了两个字段一个ID自增长一个NAME VARCHAR(50)
没问题.
@name varchar(20),
@tableName varchar(50) --表名--
as
BEGIN
----------DECLARE @tableName NVARCHAR(20)
declare @ta varchar(25);
declare @Sql varchar(150);
set @ta=@name;
------set @tableName='aaaa';
----set @ta='aaaa';
set @Sql='insert into '+@tableName+' (name)values('''+(@ta)+''')'
exec(@Sql)
---exec sp_executesql @Sql
end
这样在2005的数据库正常,但是在2000的数据就报错了。希望大家帮忙找找原因。谢谢