社区
应用实例
帖子详情
如何用动态SQL向内联表或临时表中更新数据
w_jlcc
2005-12-22 07:16:47
今天下午碰到个问题:
当用exec sp_executesql向内联表@tablename或临时表#插入数据时,总是报错,调试不过去。请哪位大侠慷慨赐教
...全文
298
11
打赏
收藏
如何用动态SQL向内联表或临时表中更新数据
今天下午碰到个问题: 当用exec sp_executesql向内联表@tablename或临时表#插入数据时,总是报错,调试不过去。请哪位大侠慷慨赐教
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
ms sql语法学习大全
这是本人在学习
中
总结的ms sql一些语法,拿出来与大学一起交流一下!
基于SQL Server的SQL优化.pdf
基于SQL Server的SQL优化.pdf
Sqlserver 自定义函数 Function使用介绍
主要介绍了Sqlserver 自定义函数 Function使用介绍,在sqlserver2008
中
有3
中
自定义函数:标量函数/
内联
表
值函数/多语句
表
值函数,需要的朋友可以参考下
Microsoft SQL Server 2005技术内幕:T-SQL查询
目录 致谢 引言 第1章 T-SQL查询和编程基础 1.1 理论背景 1.2 SQL SERVER体系结构 1.3 创建
表
和定义
数据
完整性 1.4 总结 第2章 单
表
查询 2.1 SELECT语句的元素 2.2 谓词和运算符 2.3 CASE
表
达式 2.4 NULL值 2.5 同时操作(ALL-AT-ONCE OPERATION) 2.6 处理字符
数据
2.7 处理日期和时间
数据
2.8 查询元
数据
2.9 总结 2.10 练习 2.11 解决方案 第3章 联接查询 3.1 交叉联接 3.2
内联
接 3.3 特殊的联接实例 3.4 外联接 3.5 总结 3.6 练习 3.7 解决方案 第4章 子查询 4.1 独立子查询 4.2 相关子查询 4.3 高级子查询 4.4 总结 4.5 练习 4.6 解决方案 第5章
表
表
达式 5.1 派生
表
5.2 公用
表
表
达式(CTE) 5.3 视图 5.4
内联
表
值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT(交集)集合运算 6.3 EXCEPT(差集)集合运算 6.4 集合运算的优先级 6.5 避开不支持的逻辑查询处理 6.6 总结 6.7 练习 6.8 解决方案 第7章 透视、逆透视及分组集 7.1 透视转换 7.2 逆透视转换 7.3 分组集 7.4 总结 7.5 练习 7.6 解决方案 第8章
数据
修改 8.1 插入
数据
8.2 删除
数据
8.3
更新
数据
8.4 合并
数据
8.5 通过
表
表
达式修改
数据
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章 可编程对象 10.1 变量 10.2 批处理 10.3 流程控制元素 10.4 游标 10.5
临时
表
10.6
动态SQL
10.7 例程 10.8 错误处理 10.9 总结
(第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础
注:分二卷,点击上传者查看第二卷地址。亲,本人纯手工添加了书签哦!!方便阅读 《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》是Microsoft SQL Server 2008系列
中
的一本。书
中
全面深入地介绍了T-SQL的基本元素,以及SQL Server 2008
中
新增加的一些特性。主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、
表
表
达式、过滤和分组、透视转换、修改
数据
、事务和一致性的处理、可编程对象等内容。 书
中
并非系统地罗列T-SQL的各种语法元素,而是结合实践
中
的各种问题,教读者如何用SQL作为语言工具来思考问题,揭示基于集合查询的强大威力。本书内容丰富、文字简洁明快,列举的实例具有一定的难度,而且实用性较强,可以把它们作为解决实际问题的标准模板。阅读本书,可以充分地理解T-SQL语言和获得良好的编程实践,学会如何编写更加有效而强大的查询。书
中
大部分章节后面都提供了练习题目,可以帮助读者更好地掌握所学的内容。 《Microsoft SQL Server 2008技术内幕:T-SQL语言基础》适合须要学习T-SQL的各级程序员和
数据
库专业人员,是他们快速掌握T-SQL的必备参考图书。 致谢 引言 第1章 T-SQL查询和编程基础 1.1 理论背景 1.2 SQL SERVER体系结构 1.3 创建
表
和定义
数据
完整性 1.4 总结 第2章 单
表
查询 2.1 SELECT语句的元素 2.2 谓词和运算符 2.3 CASE
表
达式 2.4 NULL值 2.5 同时操作(ALL-AT-ONCE OPERATION) 2.6 处理字符
数据
2.7 处理日期和时间
数据
2.8 查询元
数据
2.9 总结 2.10 练习 2.11 解决方案 第3章 联接查询 3.1 交叉联接 3.2
内联
接 3.3 特殊的联接实例 3.4 外联接 3.5 总结 3.6 练习 3.7 解决方案 第4章 子查询 4.1 独立子查询 4.2 相关子查询 4.3 高级子查询 4.4 总结 4.5 练习 4.6 解决方案 第5章
表
表
达式 5.1 派生
表
5.2 公用
表
表
达式(CTE) 5.3 视图 5.4
内联
表
值函数 5.5 APPLY运算符 5.6 总结 5.7 练习 5.8 解决方案 第6章 集合运算 6.1 UNION(并集)集合运算 6.2 INTERSECT(交集)集合运算 6.3 EXCEPT(差集)集合运算 6.4 集合运算的优先级 6.5 避开不支持的逻辑查询处理 6.6 总结 6.7 练习 6.8 解决方案 第7章 透视、逆透视及分组集 7.1 透视转换 7.2 逆透视转换 7.3 分组集 7.4 总结 7.5 练习 7.6 解决方案 第8章
数据
修改 8.1 插入
数据
8.2 删除
数据
8.3
更新
数据
8.4 合并
数据
8.5 通过
表
表
达式修改
数据
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章 可编程对象 10.1 变量 10.2 批处理 10.3 流程控制元素 10.4 游标 10.5
临时
表
10.6
动态SQL
10.7 例程 10.8 错误处理 10.9 总结 附录A SQL SERVER使用入门 索引
应用实例
27,582
社区成员
68,544
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章