sql 存储过程中参数在in中的字符串
(2013-05-02 19:56:32)
标签:
sql存储过程in参数带引号参数单引号参数sp_executesql |
分类: 数据库 |
一、使用 sp_executesql
系统存储过程执行 Unicode
字符串
1、直接组合 SQL
语句执行
CREATE PROCEDURE
p_Test1
@TableName
varchar(20)
AS
declare @SQLString
nvarchar(200)
set @SQLString
= N 'select
* from '
+
@TableName
EXECUTE sp_executesql
@SQLString
2、SQL
语句里包含嵌入参数
CREATE PROCEDURE
p_Test2
@TableName
varchar(20),
@UserID
int,
@UserName
varchar(50)
AS
declare @SQLString
nvarchar(200)
set @SQLString
= N 'select
* from '
+
@TableName
+
N ' where
UserID=@UserID or
UserName=@UserName '
EXECUTE sp_executesql
@SQLString,
N '@UserID int,
@UserName varchar(50)
',
@UserID,
@UserName
这也是 Microsoft
SQL Server
的推荐做法。
二、使用EXECUTE语句执行字符串
CREATE PROCEDURE
p_Test3
@TableName
varchar(20)
AS
declare @SQLString
nvarchar(200)
set @SQLString
= N 'select
* from '
+
@TableName
EXEC(@SQLString)
另外在这个使用中如果你传入的参数是带有 日期的或者说 需要参数本身就带有
单引号的,比如'2013-02-01 00:00:00'
这个在字符串中本身就需要带着单引号,那么记住这个就OK了:如果是字符串拼接的话,那么在在字符串中三个'表示实际的一个',四个'表示一个紧连的'也就是一个空字符的表达''.
如果程序中有过多的字符型变量拼接的话,那么建议使用系统存储过程sp_executesql,使用这个系统存储过程可以避免由于拼接字符串时不小心出现的单引号引发的错误.