一个SQL语句(存储过程)查错问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:09:46
create proc [dbo].[getwebdata]
@tablename varchar(200),
@gid bigint,
@adid bigint,
@webid bigint,
@fromip varchar(20),
@fromurl varchar(200),
@fromdomain varchar(200),
@duration int
as

declare @counts int
declare @sql varchar(1000)
set @sql = 'select @counts = count(*) From [' + @tablename + '] where [gid] = ' + @gid + 'and [adid] = ' + @adid + 'and [webid] = ' + @webid + 'and [fromip] = ' + @fromip
exec sp_executesql @sql,N'@counts int output',@counts output

if @counts < 1
begin
set @sql = 'insert into ' + @tablename + ' ([gid],[adid],[webid],[fromip],[fromurl],[fromdomain],[duration]) values (' + @gid + ',' + @adid + ',' + @webid + ',' + @fromip + ',' + @fromurl + ',' + @fromdomain + ',' + @duration + ')'
exec(@sql)
end

运行显示:
消息 8114,级别 16,状

字段类型和参数类型是绝对匹配的 你这句话不对 是显然的类型不匹配

@gid bigint,
@adid bigint,
@webid bigint,
@fromip varchar(20),
@fromurl varchar(200),
@fromdomain varchar(200),
@duration int
这样的显示定义类型容易出错 用table.字段%rowtype定义类型
由于你的表名是个变量 但是你肯定知道一个具体的表 假如说有个表是 tableinfo 那么定义@gid bigint时改成 tableinfo.gid%rowtype 这样类型就不会不匹配了 把table作为 变量是很不好的做法

数据类型不匹配,看看你表的字段类型跟参数的类型哪里不匹配,到第14行找
没有绝对,把你的表结构贴出来一看就知道了