动态T-SQL语句常見問題與解決方案
--> Title : 动态T-SQL语句常見問題與解決方案
--> Author : wufeng4552
--> Date : 2009-11-24 10:11:10
if object_id('[tb]') is not null drop table [tb]
go
create table [tb] (dt nvarchar(20),ID int)
insert into [tb]
select '0718093429',1 union all
select '0728043205',2 union all
select '0728032243',3
--1.忘記類型轉換
DECLARE @value int
SET @value=2
DECLARE @sql varchar(8000)
--錯誤的寫法,類型不一致
SET @sql='SELECT * FROM tb WHERE ID='+@value
EXEC(@sql)
/*
訊息245,層級16,狀態1,行10
將varchar 值'SELECT * FROM tb WHERE ID=' 轉換成資料類型int 時,轉換失敗。
*/
--正確寫法,轉換類型
SET @sql='SELECT * FROM tb WHERE ID='+ltrim(@value)
EXEC(@sql)
--或者
EXEC('SELECT * FROM tb WHERE ID='+@value)
--2.字符串邊界符問題
DECLARE @value varchar(10)
SET @value='0728043205'
DECLARE @sql1 varchar(8000),@sql2 varchar(8000),@sql3 varchar(8000)
--常見錯誤
SET @sql1='SELECT * FROM tb WHERE dt='+@value
SET @sql2='SELECT * FROM tb WHERE dt=''+@value+'
PRINT @sql1
PRINT @sql2
/*
SELECT * FROM tb WHERE dt=0728043205
SELECT * FROM tb WHERE dt='+@value+
*/
--正確寫法
SET @sql3='SELECT * FROM tb WHERE dt='''+@value+''''
PRINT @sql3
/*
SELECT * FROM tb WHERE dt='0728043205'
*/
EXEC(@SQL1)
EXEC(@SQL2)
/*
訊息105,層級15,狀態1,行1
遺漏字元字串'+@value+' 後面的引號。
訊息102,層級15,狀態1,行1
接近'+@value+' 之處的語法不正確。
*/
EXEC(@SQL3)
/*
dt ID
-------------------- -----------
0728043205 2
(1 個資料列受到影響)
*/
--3.表名及字段名的问題
--常見錯誤寫法
DECLARE @tbname sysname
SET @tbname='tb'
SELECT * FROM @tbname
GO
DECLARE @tbname sysname
SET @tbname='[tb]'
EXEC sp_executesql N'SELECT * FROM @tbname',N'@tbname sysname',@tbname
GO
--正確寫法
DECLARE @SQL NVARCHAR(100),@TBNAME SYSNAME
SELECT @TBNAME='TB'
SET @SQL='SELECT * FROM '+@TBNAME
EXEC(@SQL)
GO
--或
DECLARE @SQL NVARCHAR(100),@TBNAME SYSNAME
SELECT @TBNAME='TB'
SET @SQL='SELECT * FROM '+@TBNAME
EXEC SP_EXECUTESQL @SQL
--4.返回值的問題
--常見錯誤寫法
DECLARE @DT sysname,@sql varchar(100)
SET @sql='SELECT @DT=DT FROM TB where id=1'
EXEC(@sql)
SELECT @DT
GO
DECLARE @DT sysname,@sql varchar(100)
SET @sql='SELECT '+@DT+'=DT FROM TB where id=1'
EXEC(@sql)
SELECT @DT
GO
--正確寫法
DECLARE @SQL NVARCHAR(200)
SET @SQL='DECLARE @DT SYSNAME SELECT @DT=DT FROM TB WHERE ID=1 SELECT @DT'
EXEC(@SQL)
--或者
DECLARE @SQL NVARCHAR(200),@DT SYSNAME
SET @SQL=N'SELECT @DT=DT FROM TB WHERE ID=1'
EXEC SP_EXECUTESQL @SQL,N'@DT SYSNAME OUTPUT',@DT OUTPUT
SELECT @DT
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wufeng4552/archive/2009/11/24/4862112.aspx
转载于:https://www.cnblogs.com/wpf123/archive/2010/03/22/2347348.html
动态T-SQL语句常見問題與解決方案相关推荐
- oracle连接数一直超出,Oracle超出最大連接數問題及解決(…
用過Oracle的應該都熟悉如何查看和設置Oracle數據庫的最大連接數.這里就再啰嗦一遍. 查看當前的連接數,可以用select count(*) from v$process; 設置的最大連接數( ...
- BT觀念分享和常見問題彙整
一. TCP/IP基本觀念 1. IP : 每台在TCP/IP網路上的電腦必須具備的一個代表號或一個地址.IP又分為private IP(192.168.x.x /10.x.x.x /172.16.x ...
- 小米kali linux蓝牙,小米筆記本在Kali Linux下所遇問題部分解決方案(持續更新中)...
0.本人不才,在小米筆記本安裝Kali Linux所遇到的問題用了兩天摸索才得以解決_(:3 」∠)_ ,kali被我裝了5次,win10的引導被我誤刪了兩次(*/ω\*). 在摸索的過程中發現關於小 ...
- Oracle常見問題查詢
1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces ...
- 「常見程式題目」第三版
更新紀錄: 第一版:最初的版本,主要以 C 語言實作為主,當時還是使用 CHM 格式製作,開啟有些問題吧! 第二版:將文件改為 HTML 格式,修改了 Java 實作部份,加入更多的題目. 第三版:修 ...
- linux 软件集成工具箱,在PB中动态修改SQL语句
在PB中动态修改SQL语句 分享到: 江苏省南通电信局网管中心 黄莹 ---- PowerBuilder是图形界面的Client/Server应用程序开发环境,可以很容易开发出功能强大的应用程序,在当 ...
- oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数
oracle中有没有可动态执行sql语句的函数 关注:233 答案:2 手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...
- mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)
下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式: call GetUsersDynam ...
- mysql函数 动态语句_自定义函数动态执行SQL语句
Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...
最新文章
- dubbo与springboot的集成
- nodejs随记04
- 管道和过滤器模式----POSA模式助记格式
- Swift数据类型简介(二)
- matlab 符号表达式 系数 小数,matlab符号表达式系数
- maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法
- java基础—几种for循环编程思想
- java dna框架_DNA (Java代码)
- Java数组的转换和拷贝
- VMware vsphere中虚拟机的基本操作方法
- 深入了解preventDefault与stopPropagation
- python 整数对应的字符,在Python中将字符串从字母解密为整数映射
- Spark学习记录(二)Spark集群搭建
- Spring入门学习推荐
- python计算两点间距离_用python计算图像中两点之间的距离
- 华为防火墙配置IPSEC实现二个站点间网络互通 隧道模式 web配置(二)
- Mybatis-四大神兽
- Java 常用工具类
- 简单抽奖机系统(中午吃什么?)
- 如何通过互联网赚钱?
热门文章
- 自建服务器 下bt,使用Docker安装OpenTracker,自建BT Tracker服务器
- html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
- 福建省计算机学会 noip比赛,重磅!福州一三附学生领衔全省前九名!他们将代表福建参加全国比赛!...
- 在linux运行math_neon库,linux - 仅使用带交叉编译器的本地库 - 堆栈内存溢出
- 世界科学技术通史_全球科技通史
- http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
- 以太坊 node data write error_Node之 创建服务器与客户端
- 太牛了!芯片级拆解世界第一颗FPGA芯片!
- 群体智能,多个机器人协同搬运!
- 一位嵌入式工程师,硬核单片机编程思想!