社区
应用实例
帖子详情
如何用动态SQL向内联表或临时表中更新数据
w_jlcc
2005-12-22 07:16:47
今天下午碰到个问题:
当用exec sp_executesql向内联表@tablename或临时表#插入数据时,总是报错,调试不过去。请哪位大侠慷慨赐教
...全文
334
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
SQL 实战:动态
表
创建与多
表
更新
的高级 SQL
本文聚焦 SQL 动态
表
创建和多
表
更新
。介绍了批量
更新
缺失邮编信息、动态创建
临时
表
补充生日信息、INSERT INTO SELECT 实现
数据
补充等实战案例,还提及多
表
更新
优化,如用索引提升 JOIN 性能、避免子查询嵌套,可高效解决多
表
操作问题。
sqlserver
中
实现一张
表
的
数据
更新
另外一张
表
的
数据
本文介绍了一种安全地将一张
表
的
数据
更新
到另一张
表
的方法,避免了直接
更新
导致的风险。通过创建
临时
表
,查询所需
数据
,定义变量并使用WHILE循环结合
动态SQL
来逐步
更新
目标
表
,降低了
数据
误操作的可能性。
SQL在存储过程
中
使用
临时
表
本文展示了如何在SQL存储过程
中
使用
临时
表
。通过一个名为PRODUCT_TEMP_UPDATE_PRC的存储过程,创建和操作
临时
表
productinfo_tmp,处理产品信息,包括删除或创建
表
、遍历产品类型、筛选低价产品并
更新
数据
。
SQL Server
临时
表
与
表
变量
本文围绕SQL Server
中
的
临时
表
与
表
变量展开。
临时
表
用于存储临时
数据
,速度快、存储空间小,但使用有一定限制;
表
变量可存储大量
数据
,能动态调整大小。文
中
介绍了两者特点、使用技巧,并通过实例展示应用,还提醒要按需选择存储方式和
数据
类型。
Oracle
临时
表
之
临时
表
的应用问题
本文讨论了Oracle
临时
表
在复杂查询优化
中
的应用,包括其作为
数据
中
转站的作用,以及与WITH子查询的开销对比。文章提到了
临时
表
可能导致的执行计划问题和额外的redo写入,并提出了动态采样和使用
动态SQL
来优化执行计划的建议。
临时
表
适用于循环SQL、多
表
关联、大
数据
量
更新
和复杂查询条件的
中
间结果。
应用实例
27,579
社区成员
68,548
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章