存储过程中拼接SQL语句

     很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了。具体看如下演示代码:

 

代码:

 

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

-- =============================================

-- Author:		yy

-- Create date: 2012-1-17

-- Description:	存储过程SQL字符串拼接示例

-- =============================================

CREATE PROCEDURE [dbo].[Test]

	@FileName varchar(10), --字段名

	@Operator varchar(1), --操作符

	@FileValue  varchar(10) --字段值

AS 

	DECLARE @TempSql varchar(100) --临时存放sql语句

BEGIN

	set @TempSql= 'select * from Comment where ' + @FileName + @Operator + char(39) + @FileValue + char(39) --拼接sql字符串,char(39)为单引号

	execute(@TempSql) --执行sql字符串

END

测试:

 

 

execute Test 'newsid','>',4

 

     在这解释一下“ALTERPROCEDURE [dbo].[Test]”至“AS”之间的代码和“AS”至“BEGIN”之间的代码有什么区别,像我这种SQL新手应该会有疑问:为什么@TempSql要定义在“AS”至“BEGIN”之间?因为,“AS”至“BEGIN”之间定义的为临时变量,前边必须加DECLARE,和其他语言中普通变量的使用方法相同;而“ALTER PROCEDURE [dbo].[Test]”至“AS”之间定义的是存储过程被调用时传入的必要参数,必须在调用的时候就赋值,不可以加DECLARE,可以理解为字符常量,一旦调用时被赋值,就再无法改变,就上边例子来说,类似@FileName=’xxx’的写法是错误的。因为@TempSql只是用来接受SQL语句的临时变量,没有初值,但必须接受值,所以要定义在“AS”至“BEGIN”之间。

 

 

 

你可能感兴趣的:(sql语句)