set @strsql = 'insert into @temptbl select id,'+@strfiled+ ' from tbl ' 中的@strfiled应为@strfield只要@temptbl中有两个数据项,且数据类型正确,就没有错误了。
declare @strfield varchar(3), @strsql varchar(1000) set @strfield = Col_name(object_id('tbl'),@i) set @strsql = 'update xx set '+@strfield+'=tbl.'+@strfield+' from tbl where tbl.id=xx.id' exec(@strsql)
动态SQL语句中可以做Update操作,检查你的UPDATE语句是不是正确.
大力,再帮我看看: 其实我的应用很简单,只是根据@i的值修改表中ai字段的值而已,如:declare @i int, @strfield varchar(3), @strsql varchar(1000) set @i=2 set @strfield = Col_name(object_id('tbl'),@i+1) set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+@i+' where id<3' exec(@strsql) 服务器: 消息 245,级别 16,状态 1,行 6 将 varchar 值 'update tbl set a2=a2+' 转换为数据类型为 int 的列时发生语法错误。如果将语句改为: declare @i int, @strfield varchar(3), @strsql varchar(1000) set @i=2 set @strfield = Col_name(object_id('tbl'),@i+1) set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+@i where id<3' exec(@strsql)还是错: 服务器: 消息 137,级别 15,状态 2,行 1 必须声明变量 '@i'。是不是,EXEC不能带变量赋值的Update语句?
declare @i int, @strfield varchar(3), @strsql varchar(1000) set @i=2 set @strfield = Col_name(object_id('tbl'),@i+1) set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+' where id<3' exec(@strsql)
declare @i int, @strfield varchar(3), @strsql varchar(1000) set @i=2 set @strfield = Col_name(object_id('tbl'),@i+1) set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+' where id<3' exec(@strsql)
select id,'+@strfiled+ ' from tbl '
中的@strfiled应为@strfield只要@temptbl中有两个数据项,且数据类型正确,就没有错误了。
@strsql varchar(1000)
set @strfield = Col_name(object_id('tbl'),@i)
set @strsql = 'update xx set '+@strfield+'=tbl.'+@strfield+' from tbl where tbl.id=xx.id'
exec(@strsql)
其实我的应用很简单,只是根据@i的值修改表中ai字段的值而已,如:declare @i int,
@strfield varchar(3),
@strsql varchar(1000)
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+@i+' where id<3'
exec(@strsql)
服务器: 消息 245,级别 16,状态 1,行 6
将 varchar 值 'update tbl set a2=a2+' 转换为数据类型为 int 的列时发生语法错误。如果将语句改为:
declare @i int,
@strfield varchar(3),
@strsql varchar(1000)
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+@i where id<3'
exec(@strsql)还是错:
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@i'。是不是,EXEC不能带变量赋值的Update语句?
@strfield varchar(3),
@strsql varchar(1000)
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+' where id<3'
exec(@strsql)
@strfield varchar(3),
@strsql varchar(1000)
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = 'update tbl set '+@strfield+'='+@strfield+'+'+cast(@i as varchar(10)+' where id<3'
exec(@strsql)
不行啊。我当时是转了几个弯才实现了这句功能的。不是不Update不行啊!服务器: 消息 170,级别 15,状态 1,行 6
第 6 行: '+' 附近有语法错误。
将大力Update语句中的“Cast”改为“Convert”函数就运行正确,为什么?
如果我要将@strfield字段的值赋给某个变量比如@j,就不行了。
如:
declare @i tinyint,
@strfield varchar(3),
@strsql varchar(1000),
@j smallint
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = 'Select '+@j+'='+@strfield+' from tbl where id=3'
exec(@strsql)
print @j就出错了!
exec sp_executesql @strsql, N'@j smallint output',@j output
print @j
@strfield varchar(3),
@strsql varchar(1000),
@j tinyintset @i=3
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = N'Select '+@j+'='+@strfield+' from tbl where id=3'
exec sp_executesql @strsql, N'@j smallint output',@j output
print @j服务器: 消息 245,级别 16,状态 1,行 8
将 nvarchar 值 'Select ' 转换为数据类型为 tinyint 的列时发生语法错误。好像还是那句 set @strsql赋值语句有问题??????
原因是 set @strsql = 'Select '+@j+'='+@strfield+' from tbl where id=3'中,
@j的值为Null(因为我要对@j赋值啊)大虾们,帮帮忙,帮我调调啊!
@strfield varchar(3),
@strsql nvarchar(1000),
@j smallint
set @i=2
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
exec sp_executesql @strsql,N'@j int output',@j output
print @j
@strfield varchar(3),
@strsql varchar(1000),
@j tinyintset @i=3
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
exec sp_executesql @strsql, N'@j smallint output',@j output
print @j
@strfield varchar(3),
@strsql varchar(1000),
@j tinyintset @i=3
set @strfield = Col_name(object_id('tbl'),@i+1)
set @strsql = N'Select @j='+@strfield+' from tbl where id=3'
exec sp_executesql @strsql, N'@j smallint output',@j output
print @j