14在数据库中拼字符串,也可以用参数 在实际的开发中,某些情况下在数据库中拼字符串不可避免,但又担心有特殊字符,导致拼出来的SQL有问题,其实数据库中拼字符串也可以使用参数,这就要用到dbo.sp_executesql ,这样就可以避免SQL注入和特殊字符导致的错误如DECLARE @IntVariable INT;--定义变量 DECLARE @SQLString NVARCHAR(500);--存储拼出来的SQL DECLARE @ParmDefinition NVARCHAR(500);---存储拼出来的SQL中的参数 /* Build the SQL string one time. */ SET @SQLString = N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID'; /* Specify the parameter format one time. */ SET @ParmDefinition = N'@SalesID int';--赋值/* Execute the string with the first parameter value. */ SET @IntVariable = 275;--赋值 EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition, @SalesID = @IntVariable; /* Execute the same string with the second parameter value. */ SET @IntVariable = 276; EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition, @SalesID = @IntVariable;
To:maco_wangdbo.ReturnOrderbyColumn()这个函数返回的是字段串。 下面我讲下我的需求吧,可能你们有更好的解决办法储存过程会接收一个参数@RKEY 它的值是类似于 '111,222,333,' 我想在动态SQL 里根据','分割@RKEY,分别将111,222,333 传给dbo.ReturnOrderbyColumn() 然后在动态SQL里每次设置 SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))能不能在动态SQL里设置参数@RKEY的值,就是下面这步操作 SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))
declare @table table (id int,col varchar(1)) insert into @table select 101,'a' union all select 201,'b' union all select 301,'c' union all select 409,'d'declare @userid varchar(2000), @sqlstr varchar(4000) set @userid='201,102,301,104,199'SELECT * FROM @table WHERE CHARINDEX(','+CAST(id AS VARCHAR(4))+',',','+@userid+',')>0 /* id col ----------- ---- 201 b 301 c */是不是这个意思?
如果是int,会提示类型转换失败。函数内部不能exec,所以在函数里面是不能动态拼接的。
DECLARE @SQLString NVARCHAR(500);--存储拼出来的SQL
DECLARE @ParmDefinition NVARCHAR(500);---存储拼出来的SQL中的参数
/* Build the SQL string one time. */
SET @SQLString =
N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID';
/* Specify the parameter format one time. */
SET @ParmDefinition = N'@SalesID int';--赋值/* Execute the string with the first parameter value. */
SET @IntVariable = 275;--赋值
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 276;
EXECUTE dbo.sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable;
To:maco_wangdbo.ReturnOrderbyColumn()这个函数返回的是字段串。
下面我讲下我的需求吧,可能你们有更好的解决办法储存过程会接收一个参数@RKEY 它的值是类似于 '111,222,333,'
我想在动态SQL 里根据','分割@RKEY,分别将111,222,333 传给dbo.ReturnOrderbyColumn()
然后在动态SQL里每次设置 SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))能不能在动态SQL里设置参数@RKEY的值,就是下面这步操作
SET @RKEY=SUBSTRING(@RKEY,CHARINDEX(',',@RKEY)+1,LEN(@RKEY))
declare @table table (id int,col varchar(1))
insert into @table
select 101,'a' union all
select 201,'b' union all
select 301,'c' union all
select 409,'d'declare @userid varchar(2000),
@sqlstr varchar(4000)
set @userid='201,102,301,104,199'SELECT * FROM @table
WHERE CHARINDEX(','+CAST(id AS VARCHAR(4))+',',','+@userid+',')>0
/*
id col
----------- ----
201 b
301 c
*/是不是这个意思?