当我运行以下代码时,我收到错误:' @ 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
答案 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'')
'
)