日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

动态T-SQL语句常見問題與解決方案

發布時間:2023/12/18 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态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语句常見問題與解決方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。