--> 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语句常見問題與解決方案相关推荐

  1. oracle连接数一直超出,Oracle超出最大連接數問題及解決(…

    用過Oracle的應該都熟悉如何查看和設置Oracle數據庫的最大連接數.這里就再啰嗦一遍. 查看當前的連接數,可以用select count(*) from v$process; 設置的最大連接數( ...

  2. BT觀念分享和常見問題彙整

    一. TCP/IP基本觀念 1. IP : 每台在TCP/IP網路上的電腦必須具備的一個代表號或一個地址.IP又分為private IP(192.168.x.x /10.x.x.x /172.16.x ...

  3. 小米kali linux蓝牙,小米筆記本在Kali Linux下所遇問題部分解決方案(持續更新中)...

    0.本人不才,在小米筆記本安裝Kali Linux所遇到的問題用了兩天摸索才得以解決_(:3 」∠)_ ,kali被我裝了5次,win10的引導被我誤刪了兩次(*/ω\*). 在摸索的過程中發現關於小 ...

  4. Oracle常見問題查詢

    1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces ...

  5. 「常見程式題目」第三版

    更新紀錄: 第一版:最初的版本,主要以 C 語言實作為主,當時還是使用 CHM 格式製作,開啟有些問題吧! 第二版:將文件改為 HTML 格式,修改了 Java 實作部份,加入更多的題目. 第三版:修 ...

  6. linux 软件集成工具箱,在PB中动态修改SQL语句

    在PB中动态修改SQL语句 分享到: 江苏省南通电信局网管中心 黄莹 ---- PowerBuilder是图形界面的Client/Server应用程序开发环境,可以很容易开发出功能强大的应用程序,在当 ...

  7. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  8. mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)

    下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式: call GetUsersDynam ...

  9. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

最新文章

  1. dubbo与springboot的集成
  2. nodejs随记04
  3. 管道和过滤器模式----POSA模式助记格式
  4. Swift数据类型简介(二)
  5. matlab 符号表达式 系数 小数,matlab符号表达式系数
  6. maven依赖的jar包版本不一样_Maven依赖jar包冲突常见的解决方法
  7. java基础—几种for循环编程思想
  8. java dna框架_DNA (Java代码)
  9. Java数组的转换和拷贝
  10. VMware vsphere中虚拟机的基本操作方法
  11. 深入了解preventDefault与stopPropagation
  12. python 整数对应的字符,在Python中将字符串从字母解密为整数映射
  13. Spark学习记录(二)Spark集群搭建
  14. Spring入门学习推荐
  15. python计算两点间距离_用python计算图像中两点之间的距离
  16. 华为防火墙配置IPSEC实现二个站点间网络互通 隧道模式 web配置(二)
  17. Mybatis-四大神兽
  18. Java 常用工具类
  19. 简单抽奖机系统(中午吃什么?)
  20. 如何通过互联网赚钱?

热门文章

  1. 自建服务器 下bt,使用Docker安装OpenTracker,自建BT Tracker服务器
  2. html判断安装没安装qq,QQ6.1体验版怎么用?腾讯QQ6.1体验版本安装步骤(无须申请体验账号)...
  3. 福建省计算机学会 noip比赛,重磅!福州一三附学生领衔全省前九名!他们将代表福建参加全国比赛!...
  4. 在linux运行math_neon库,linux - 仅使用带交叉编译器的本地库 - 堆栈内存溢出
  5. 世界科学技术通史_全球科技通史
  6. http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
  7. 以太坊 node data write error_Node之 创建服务器与客户端
  8. 太牛了!芯片级拆解世界第一颗FPGA芯片!
  9. 群体智能,多个机器人协同搬运!
  10. 一位嵌入式工程师,硬核单片机编程思想!