在T-SQL里的变数,不能用来取代物件名称或是关键字,只能用在运算式中。所以如果要动态组出 SQL 陈述式,使用 EXECUTE 陈述式,可以透过动态的方式来设定。SQL Server 扩充了 EXECUTE 陈述式的功能,让我们可以把要执行的 T-SQL 传给 SQL Server。
以下是要在书局里,找出一本书类别是科学的
USE BookStore
GO
-- 宣告变数
DECLARE @SQLCommand nvarchar(200)
DECLARE @columnList nvarchar(50)
DECLARE @color varchar(10)
-- 定义变数
SET @columnList = N'BookID书本编号, Type 类型'
SET @type = '''Science'''
-- 动态组出 T-SQL
SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Book WHERE Type = ' + @type
-- 执行动态组出的 T-SQL
EXECUTE (@SQLCommand)
@type这变数值左右各用了 3 个单引号(')来把 Science 包起来,第 1 个单引号代表变数值的型别是 nvarchar 型别,第 2 与第 3 个单引号最后会被视为只有一个单引号。EXECUTE 陈述式之后,用一对刮号把要执行的 T-SQL 给包起来。
这样是简短的命令,但是效果相同:
EXEC (@SQLCommand)
也可以增加查询的条件,例如查询ID编号
要注意变数型态的对应,否则执行时会出现型能不符的错误。
USE AdventureWorks
GO
-- 宣告变数
DECLARE @SQLCommand nvarchar(200)
DECLARE @columnList nvarchar(50)
DECLARE @color varchar(10)
DECLARE @pID varchar(5)
-- 定义变数
SET @columnList = N'BookID 书本编号, Type 类型'
SET @type = '''Science'''
SET @pID = '002'
-- 动态组出 T-SQL
SET @SQLCommand = 'SELECT ' + @columnList + ' FROM Production.Book WHERE Type = ' + @color + ' AND BookID < ' + @pID
-- 执行动态组出的 T-SQL
EXEC (@SQLCommand)
该贴被一个路过的编辑于2015-10-23 16:03:08