如何使用表名变量

yjsng 2004-11-03 10:43:25
CREATE PROCEDURE dbo.insertDataD
@tablename nvarchar(12)='D20041010', @fldnum int, @tagname nvarchar(12)='yl001' , @val float=0, @state int = 0
AS
declare @table (FLDNO float NULL ,
TAGNAME varchar 20 ,
VALUE real NULL ,
STATE smallint NULL )
if exists(select tagname from @tablename where tagname = @tagname and fldno = @fldnum)
begin
update @tablename set value = @val
where tagname = @tagname and fldno = @fldnum and value<>@val
end
else
insert into dataD values(@fldnum, @tagname, @val, -1)
GO
请问如何使用表明变量是实现动态查询和插入????
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjsng 2004-11-03
  • 打赏
  • 举报
回复
哪里的括号??,说是 else附近和第四行“)”附近有语法错误???
fxcl2006 2004-11-03
  • 打赏
  • 举报
回复
哦,忘了括号。
yjsng 2004-11-03
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo.insertDataD
@tablename nvarchar(12)='D20041010', @fldnum int, @tagname nvarchar(12)='yl001' , @val float=0, @state int = 0
AS
if exists(exec('select tagname from' + @tablename + 'where tagname= @tagname and fldno =@fldnum'))
begin
exec(' update' + @tablename + 'set value = @val where tagname = @tagname and fldno = @fldnum and value<>@val')
end
else
exec('insert into ' + @tablename+'values(@fldnum, @tagname, @val, -1)')
GO
帮我看看这样子为什么还是不行???
finer 2004-11-03
  • 打赏
  • 举报
回复
exec语句加个括号:

这样:
create procedure Finer_proce
@tabname varhcar(20)
as
exec('select * from '+@tabname)
go

这样就行了
yjsng 2004-11-03
  • 打赏
  • 举报
回复
是不是要声明一个表变量??我在sql帮助看到好象是要声明个表变量,但是我不知道怎么做???
yjsng 2004-11-03
  • 打赏
  • 举报
回复
执行说 select from 附近有语法错误????
fxcl2006 2004-11-03
  • 打赏
  • 举报
回复
可以参考:
create proc test_pro
@tablename varchar(50)
as
exec 'select * from ' + @tablename
go
finer 2004-11-03
  • 打赏
  • 举报
回复
你的变量连接不行啊

CREATE PROCEDURE dbo.insertDataD
@tablename nvarchar(12)='D20041010', @fldnum int, @tagname nvarchar(12)='yl001' , @val float=0, @state int = 0
AS
if exists(exec('select tagname from' + @tablename + 'where tagname= '+@tagname and fldno ='+@fldnum))
begin
exec(' update' + @tablename + 'set value = '+@val+' where tagname = '+@tagname+' and fldno = '+@fldnum+' and value<>'+@val)
end
else
exec('insert into ' + @tablename+'values('+@fldnum+','+@tagname+','+@val+', -1)')
GO

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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