关于sp_executesql的使用。

qq290032431 2012-06-13 04:12:44
以前一直用的Exec来执行存储过程,现在要改成sp_executesql这样来执行,看了不少博客,还是有点弄不懂,请大牛们指教,谢谢了。
原来的存储过程是这样的,如下:

Create procedure AddDataDB
@strTable varchar(200),
@strColl varchar(4000),
@strValue ntext,
@strWhere varchar(4000)=''
as
begin
if ISNULL(@strWhere,'')=''
set @strWhere=''
else
set @strWhere='where'+@strWhere
exec('insert into'+@strtable+N'('+@strColl+N')values('+@strValue+N')'+@strWhere)
end

现在我改成sp_executesql这种形式的,报错了,

create proc TestSP
as
begin
declare @strTable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere varchar(4000)
declare @sql nvarchar(2000)
set @strWhere=''
if ISNULL(@strWhere,'')=''
set @strWhere=''
else
set @strWhere='where'+@strWhere
set @sql='insert into'+@strtable+N'('+@strColl+N')values('+@strValue+N')'+@strWhere
execute sp_executesql @sql,N'@strtable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere varchar(4000)' ,
@strTable ,@strColl ,@strValue ,@strWhere
end


请求懂的人帮帮忙,指教指教,谢谢了,,
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq290032431 2012-06-15
  • 打赏
  • 举报
回复
表名和列名都不能用参数代替,只能是全局参数。我那种是不行的。。谢谢各位的解答。马上结贴。
SQL777 2012-06-13
  • 打赏
  • 举报
回复
A. 执行简单的 SELECT 语句
下面的示例创建并执行一个简单的 SELECT 语句,其中包含名为 @level 的嵌入参数。

execute sp_executesql
N'select * from pubs.dbo.employee where job_lvl = @level',
N'@level tinyint',
@level = 35


多查看帮助。
set @sql=N'insert into'+@strtable+N'('+@strColl+')values('+@strValue+')'+@strWhere
你语句都拼接好了。直接用EXEC就行了

你那样的语句不能用这个。
qq290032431 2012-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code
create proc TestSP
as
begin
declare @strTable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere nvarchar(4000)
declare @sql nvarchar(2000)
set @strWhere=''
if ISNULL(@strW……
[/Quote]
这个还是不行啊,好像是类型无效,,中间有个Ntext类型,报错也是说类型无效。但是我不知道怎么改。
Felixzhaowenzhong 2012-06-13
  • 打赏
  • 举报
回复
我的一楼又丢了?
这CSDN 延迟、发一贴变两贴、404你懂得............
Felixzhaowenzhong 2012-06-13
  • 打赏
  • 举报
回复
create proc TestSP
as
begin
declare @strTable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere nvarchar(4000)
declare @sql nvarchar(2000)
set @strWhere=''
if ISNULL(@strWhere,'')=''
set @strWhere=''
else
set @strWhere=N'where'+@strWhere
set @sql=N'insert into'+@strtable+N'('+@strColl+')values('+@strValue+')'+@strWhere
execute sp_executesql @sql,N'@strtable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere nvarchar(4000)' ,
@strTable ,@strColl ,@strValue ,@strWhere
end
Felixzhaowenzhong 2012-06-13
  • 打赏
  • 举报
回复
create proc TestSP
as
begin
declare @strTable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere Nvarchar(4000)
declare @sql nvarchar(2000)
set @strWhere=''
if ISNULL(@strWhere,'')=''
set @strWhere=''
else
set @strWhere=N'where'+@strWhere
set @sql=N'insert into'+@strtable+N'('+@strColl+')values('+@strValue+')'+@strWhere
execute sp_executesql @sql,N'@strtable varchar(200),@strColl varchar(4000),@strValue ntext,@strWhere varchar(4000)' ,
@strTable ,@strColl ,@strValue ,@strWhere
end

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧