社区
应用实例
帖子详情
如何用动态SQL向内联表或临时表中更新数据
w_jlcc
2005-12-22 07:16:47
今天下午碰到个问题:
当用exec sp_executesql向内联表@tablename或临时表#插入数据时,总是报错,调试不过去。请哪位大侠慷慨赐教
...全文
284
11
打赏
收藏
如何用动态SQL向内联表或临时表中更新数据
今天下午碰到个问题: 当用exec sp_executesql向内联表@tablename或临时表#插入数据时,总是报错,调试不过去。请哪位大侠慷慨赐教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jackiecheng001
2005-12-23
打赏
举报
回复
wangtiecheng(cappuccino)
谢谢了
我也学到了不少啊
OracleRoob
2005-12-22
打赏
举报
回复
当字段是字符串时:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + @pcur_day + ''')'
当字段是日期时:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + cast(@pcur_day as varchar(50)) + ''')'
当字段是数值型时:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (' + cast(@pcur_day as varchar(50)) + ')'
OracleRoob
2005-12-22
打赏
举报
回复
当字段是日期、字符串时:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + @pcur_day + ''')'
当字段是数值型时:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (' + cast(@pcur_day as varchar(50)) + ')'
OracleRoob
2005-12-22
打赏
举报
回复
359687035
w_jlcc
2005-12-22
打赏
举报
回复
我的QQ是2228016在线等到10点,因为晚了要封楼:-(
w_jlcc
2005-12-22
打赏
举报
回复
可我声名时:
declare @cur_sp smallint --current position of sample
declare @cur_day smalldatetime --current day
.....
set @cur_day=DATEADD(day,-1,@D_Day)
明明声名的是短日期型啊
w_jlcc
2005-12-22
打赏
举报
回复
wangtiecheng(cappuccino),兄弟,我按照你的改了一下,当结果总是提示:
服务器: 消息 295,级别 16,状态 3,过程 up_Svm1Train,行 81
从字符串转换为 smalldatetime 数据类型时发生语法错误。
我就是因为今天上午用exec()这种方式出现这个错误才改用exec sp_executesql 的,55555555
要不,兄弟,把你的QQ号告诉我吧,我要崩溃了,29日必须给导师看啊:-(
新鲜鱼排
2005-12-22
打赏
举报
回复
set @dyni_SQL='insert into #tp_res' +
' ('+ @pfname+') values ('''+ @pcur_day+''')'
exec (@dyni_SQL)
因为@pfname和@pcur_day不是作为输出,所以直接使用就可以了。
OracleRoob
2005-12-22
打赏
举报
回复
DECLARE @fname varchar(20),
@dyni_SQL varchar(8000),
@pcur_day varchar(20)
create table #tp_res(
f1 smalldatetime NULL,
f2 smallint NULL,
f3 float NULL
)
set @fname='f1'
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (''' + @pcur_day + ''')'
exec (@dyni_SQL)
select * from #tp_res
drop table #tp_res
--需要注意,如果字段是数值型,不要用单引号,其他如字符型和日期型都要单引号即:
set @dyni_SQL='insert into #tp_res' + ' ( ' + @fname + ') values (' + cast(@pcur_day as varchar(50)) + ')'
w_jlcc
2005-12-22
打赏
举报
回复
终于逮到个高手肯指点的,下面是我的一个存储过程内的一段代码,帮我看看
临时表时:
DECLARE ...
create table #tp_res(
f1 smalldatetime NULL,
f2 smallint NULL,
f3 float NULL
)
set @fname='f1'
set @dyni_SQL='insert into #tp_res' +
' ( @pfname) values ( @pcur_day)'
exec sp_executesql @dyni_SQL,N'@pfname varchar(10), @pcur_day SMALLDATETIME',
@fname, @cur_day
就这样的临时表,不好使,
提示为:
服务器: 消息 208,级别 16,状态 3,行 1
对象名 '#tp_res' 无效。
当用表变量时:
declare @tn_talbe table
(
tn_date smalldatetime,
tn_sp int,
tn_yval float
)
set @fname='f1'
set @dyni_SQL='insert into @pptn_talbe' +
' ( @pfname) values ( @pcur_day)'
exec sp_executesql @dyni_SQL,N'@tn_talbe talbe,@pfname varchar(10), @pcur_day SMALLDATETIME', @tn_talbe,@fname, @cur_day
也不好使,提示:要先声名变量@tn_talbe
哪怕我在动态SQL的参数部分把表定义加上也不好使
请指定一、二,深度谢谢
OracleRoob
2005-12-22
打赏
举报
回复
请参考---动态sql语句基本语法
1 :普通SQL语句可以用Exec执行
eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N
2:字段名,表名,数据库名之类作为变量时,必须用动态SQL
eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格
当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名
declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错
declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确
3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中?
declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
Microsoft SQL Server 2005技术内幕:T-SQL查询
8.6 带有TOP选项的
数据
更新
8.7 OUTPUT子句 8.8 总结 8.9 练习 8.10 解决方案 第9章 事务和并发 9.1 事务 9.2 锁定和阻塞 9.3 隔离级别 9.4 死锁 9.5 总结 9.6 练习 第10章 可...
(第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础
书
中
并非系统地罗列T-SQL的各种语法元素,而是结合实践
中
的各种问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。本书内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性较...
(第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础
书
中
并非系统地罗列T-SQL的各种语法元素,而是结合实践
中
的各种问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。本书内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性较...
SQL Server
数据
库技术大全 电子书
2.2.3 使用UPDATE
更新
数据
/35 2.2.4 使用DELETE删除
数据
/36 2.3 联接查询/37 2.3.1
内联
接(INNER JOIN)/37 2.3.2 外联接(OUTER JOIN)/38 2.3.3 完全联接(FULL JOIN)/39 2.3.4 交叉联接(CROSS JOIN)/40 2.3.5...
C#程序开发范例宝典(第2版).part13
实例107 使用EventLog组件向本机现有日志
中
添加条目 155 3.4 FileSystemWatcher组件 156 实例108 使用FileSystemWatcher组件监视系统日志文件是否被更改 157 3.5 HelpProvider组件 158 实例109 使用HelpProvider...
应用实例
27,579
社区成员
68,558
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章