如何在Select语句中使用变量?

时间:2014-10-02 21:01:30

标签: sql-server sql-server-2008

当我运行以下代码时,我收到错误:' @ num_to_remove'附近的语法不正确。

知道为什么这不起作用?

提前致谢, 马特

DECLARE @num_to_remove INT
SET @num_to_remove = 2

-- get em_ids for records to delete
WITH em_ids
 AS (SELECT TOP @num_to_remove em_id
       FROM irs_self_cert_em sc
      WHERE     sc.date_cert_loc IS NULL
            AND sc.date_first_cert_email_sent < '2014-10-03')

SELECT * FROM em_ids

2 个答案:

答案 0 :(得分:3)

在常规tSQL中,您只能使用变量来表示值,而不能使用列名或其他对象。我知道“TOP”子句的数值似乎应该符合条件,但事实并非如此。

要以这种方式使用变量,您必须执行Dynamic SQL

答案 1 :(得分:2)

试试这个(注意:我还没有对它进行测试。你可以尝试类似的这个)

DECLARE @num_to_remove INT
SET @num_to_remove = 2

-- get em_ids for records to delete
EXEC
(
    'WITH em_ids
    AS (SELECT TOP ' + CAST(@num_to_remove AS varchar(10)  + 'em_id
       FROM irs_self_cert_em sc
      WHERE     sc.date_cert_loc IS NULL
            AND sc.date_first_cert_email_sent < ''2014-10-03'')
    '
)