首页 > 数据库技术 > 详细

T-SQL Recipes之 Table Variables and Temporary Tables and CTE

时间:2016-05-24 18:47:10      阅读:200      评论:0      收藏:0      [点我收藏+]

Problem

许多时候, 我们想要Table Variables在动态SQL中执行,但现实是很骨感的。比如这个示例:

技术分享
DECLARE @sql_command NVARCHAR(MAX);
DECLARE @parameter_list NVARCHAR(MAX);
DECLARE @last_names TABLE ( last_name NVARCHAR(50) );
SELECT  @sql_command = 
SELECT DISTINCT
FirstName
FROM Person.Person
WHERE LastName IN (SELECT last_name FROM @last_names)
EXEC sp_executesql @sql_command;
View Code

有人看到这里,也许第一直觉就会问,为什么不在动态SQL中申明@last_names,其实然并卵。

这条路走不通,那我们换条路吧,比如Type Table:

技术分享
CREATE TYPE last_name_table AS TABLE
(last_name NVARCHAR(50));
GO
--DROP TYPE last_name_table
DECLARE @sql_command NVARCHAR(MAX);
DECLARE @parameter_list NVARCHAR(MAX);
DECLARE @first_name_calling_sql NVARCHAR(50) = Edward;
DECLARE @last_names AS last_name_table;



SELECT  @sql_command = 
INSERT  INTO @last_names
        ( last_name
        )
        SELECT  LastName
        FROM    Person.Person
        WHERE   FirstName = @first_name_calling_sql;

SELECT DISTINCT
FirstName
FROM Person.Person
WHERE LastName IN (SELECT last_name FROM @last_names)

SELECT  @parameter_list = @first_name_calling_sql NVARCHAR(50), 
@last_names last_name_table READONLY
EXEC sp_executesql @sql_command, @parameter_list, @first_name_calling_sql,@last_names;
View Code

如果把Insert语句拿出来,当然是可以执行的,不过有些业务就是要动态处理,摊手中……

 

T-SQL Recipes之 Table Variables and Temporary Tables and CTE

原文:http://www.cnblogs.com/cdjboy/p/5524174.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!