仅将查询选择部分作为变量多次使用

时间:2015-12-15 21:50:57

标签: sql-server tsql variables select

我有一组查询使用相同的Select部分查询,其中包含不同的连接,Where子句等在Select部分下面。选择部分很长,因为我必须运行此查询的版本接近30次,每当我必须进行更改时,我必须进行30次更改。有没有办法只将这些查询的Select部分捕获为变量并每次调用该变量?这个过程非常麻烦,所以如果我能够为Select部分执行此操作,并且大多数Where子句可以压缩成大约5个不同的分组,那将是很棒的,但我不知道如何去做。这是我正在寻找的一个简单例子:

DECLARE @TestSelect varchar(max) = (SELECT Field1, Field2, Field3, ..., Field 22);

@TestSelect
FROM Table1
LEFT OUTER JOIN Table2
ON Table1.id = Table2.id

使用tsql可以吗?如果不使用tsql,那么最好的工具是什么,因为正在运行这些步骤,我将结果插入到另一个表中。

1 个答案:

答案 0 :(得分:2)

执行此操作的最佳方法是在字符串中构建查询,然后使用sp_executesql运行动态查询。例如:

DECLARE @TestSelect varchar(max)
DECLARE @TestQuery varchar(max)

SET @TestSelect = '(SELECT Field1, Field2, Field3, ..., Field 22)'
SET @TestQuery = @TestSelect + ' FROM Table1 LEFT OUTER JOIN Table2 ON Table1.id = Table2.id'

EXECUTE sp_executesql @TestQuery