请教SQL IF 中加入UNION ALL???

宇宙最强皮皮虾 2015-02-12 12:07:30

各位道友..


DECLARE @round INT
SELECT @round = 10
WHILE @round > 0
BEGIN
SELECT
*
FROM
t_project p
WHERE
p.id = 1263
SET @round = @round - 1 ;

--问题出在这里
IF @round != 1
BEGIN
UNION ALL
END


END


请问我如何才能判断如果round不等于1则在sql下面加入UNION ALL这个标签,否则不加入。

现在报错:[Err] 42000 - [SQL Server]关键字 'UNION' 附近有语法错误。
...全文
242 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2015-02-12
  • 打赏
  • 举报
回复
如果要按你原本的想法,只有用动态执行,不过感觉你的业务需要可以有别的方式实现。
tcmakebest 2015-02-12
  • 打赏
  • 举报
回复
楼主的示例完全不能体现楼主要干嘛, 要 UNION 1-10吗, 应该有更好的解决办法.
唐诗三百首 2015-02-12
  • 打赏
  • 举报
回复
应该用动态SQL实现,
lzw_0736 2015-02-12
  • 打赏
  • 举报
回复
SQL語句用變量
  • 打赏
  • 举报
回复
解决了。我新建了一个临时表然后谢了存储过程循环向里面添加数据。

ALTER PROC p_agreementError @agreement_project_id int
AS 
DECLARE @round INT ,@start DATE 

if (SELECT (DATEDIFF(DAY,ap.start_date,ap.end_date) % ap.photoperiod) FROM t_agreement_project ap WHERE ap.id = @agreement_project_id) > 0
BEGIN
	SELECT @round = (DATEDIFF(DAY,ap.start_date,ap.end_date) / ap.photoperiod) + 1 FROM t_agreement_project ap WHERE ap.id = @agreement_project_id
END
ELSE
BEGIN
	SELECT @round = (DATEDIFF(DAY,ap.start_date,ap.end_date) / ap.photoperiod) FROM t_agreement_project ap WHERE ap.id = @agreement_project_id
END

SELECT @start = ap.start_date FROM t_agreement_project ap WHERE ap.id = @agreement_project_id
WHILE @round > 0
		BEGIN

			INSERT INTO t_agreement_error (agreementid,agreementprojectid,start_date,end_date,agreementerror) 
			SELECT a.id,ap.id,@start,(SELECT DATEADD(DAY, ap.photoperiod, @start) FROM t_agreement_project ap WHERE ap.id = @agreement_project_id),
			(CASE WHEN p.photo_time BETWEEN @start AND DATEADD(DAY, ap.photoperiod, @start) THEN '正常' ELSE '异常' END)
			FROM t_agreement a
			LEFT JOIN t_agreement_project ap ON a.id = ap.agreement_id
			LEFT JOIN t_photograph p ON ap.id = p.agreement_projectid
			WHERE
				ap.id = @agreement_project_id and @start < GETDATE()
				--(p.id is null and @start < ap.end_date) 
				--or
				--(p.photo_time BETWEEN @start AND DATEADD(DAY, ap.photoperiod, @start) and @start < ap.end_date)

		SELECT @start = DATEADD(DAY, ap.photoperiod, @start) FROM t_agreement_project ap WHERE ap.id = @agreement_project_id
		
		SET @round = @round - 1
	END

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧