在存储过程中,关于动态生成SQL语句的问题.

sunon 2003-08-13 10:59:30
declare @count int
declare @SQLStr varchar(8000)

set @SqlStr= 'select @count=count(*) from [VW_User_DetailInfo] where OperID =@OperID'
exec(@SQLStr)

错误信息:
服务器: 消息 137,级别 15,状态 1,行 1
[Microsoft][ODBC SQL Server Driver][SQL Server]必须声明变量 '@count'。

改成:
set @SqlStr= 'select ' + @count +'=count(*) from [VW_User_DetailInfo] where OperID =@OperID'
exec(@SQLStr)

错误信息:
服务器: 消息 245,级别 16,状态 1,过程 SearchCorp,行 17
[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 'select ' 转换为数据类型为 int 的列时发生语法错误。

请各们大哥帮帮小弟的忙.多谢!!
...全文
33 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyFor 2003-08-13
  • 打赏
  • 举报
回复
参考:

declare @tcnt int
declare @paras varchar(100)
DECLARE @SQLString NVARCHAR(500)
set @paras ='1,3,5'
set @sqlstring=N'select @cnt=count(*) from sysobjects where id in ('+@paras+')'

set @tcnt=0
execute sp_executesql
@sqlstring,
N'@cnt int output',
@cnt=@tcnt output
select @tcnt


select * from sysobjects



Create Procedure GetMaxID
@TableName varchar(100), @ID int output
as
begin
declare @sql nvarchar(1000)
set @sql='select @ID = count(ID) from '+@TableName
exec sp_executesql @sql,N'@id int output',@id output
end
pengdali 2003-08-13
  • 打赏
  • 举报
回复
declare @count int
declare @SQL nvarchar(4000)

set @Sql= N'select @count=count(*) from [VW_User_DetailInfo] where OperID ='+cast(@OperID as varchar(100))
exec sp_executesql @sql,N'@count int output',@count output

select @count 结果
sunon 2003-08-13
  • 打赏
  • 举报
回复
把:exec sp_executesql @sql,N'@count int output',@count output
改成: exec sp_executesql @SqlStr,N'@count int output',@count output

出错信息也是:
服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 21
[Microsoft][ODBC SQL Server Driver][SQL Server]过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
sunon 2003-08-13
  • 打赏
  • 举报
回复
pengdali(大力 V2.0):

我定义了变量: declare @sql nvarchar

出错信息:
服务器: 消息 214,级别 16,状态 2,过程 sp_executesql,行 21
[Microsoft][ODBC SQL Server Driver][SQL Server]过程需要参数 '@statement' 为 'ntext/nchar/nvarchar' 类型。
pengdali 2003-08-13
  • 打赏
  • 举报
回复
declare @count int
declare @SQLStr nvarchar(4000)

set @SqlStr= N'select @count=count(*) from [VW_User_DetailInfo] where OperID ='+cast(@OperID as varchar(100))
exec sp_executesql @sql,N'@count int output',@count output

select @count 结果
trustmeok 2003-08-13
  • 打赏
  • 举报
回复
UP

34,590

社区成员

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

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