本文介绍了我想在SQL Server中创建一个函数我创建了一个临时表,但我想在sqlserver中为下面的代码创建函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 DECLARE @ StartDate DATETIME , @ EndDate DATETIME ; SELECT @ StartDate = ' 20100101', @ EndDate = GETDATE() - convert(varchar(8),GETDATE(),112); ; DT_TempTbl as ( SELECT @ StartDate AS YearMonth UNION ALL SELECT DATEADD(月, 1 ,YearMonth) FROM DT_TempTbl WHERE YearMonth< = @EndDate ) SELECT CONVERT ( VARCHAR ( 6 ),YearMonth, 112 ) AS YearMonth1 FR OM DT_TempTbl ORDER BY YearMonth1 创建功能 [ ^ ] 你需要做的第一件事是将变量@StartDate和@EndDate移出这个SQL,成为函数的参数......例如 CREATE FUNCTION [dbo]。[fnYourFunction] ( @ StartDate DATETIME , @EndDate DATETIME )然后你需要定义你想要返回的值...在这种情况下你试图从 SELECT CONVERT(VARCHAR(6),YearMonth,112)返回结果AS YearMonth1 因此你可以通过函数定义你的函数输出 RETURNS @output TABLE(yearmonth VARCHAR(6) 接下来将SQL包含在函数体中,用 BEGIN ... END 并包含 RETURN 声明。 最后,因为你已经定义了输出表,你只需要将查询中的结果添加到表中,例如 INSERT INTO @ output 所以整件事变成 CREATE FUNCTION [dbo]。[fnYourFunction] ( @ StartDate DATETIME , @EndDate DATETIME ) RETURNS @ output TABLE (yearmonth VARCHAR ( 6 )) BEGIN 使用 DT_TempTbl 作为 ( SELECT @ StartDate AS YearMonth UNION ALL SELECT DATEADD(MONTH, 1 ,YearMonth) FROM DT_TempTbl WHERE YearMonth< = @ EndDate ) INSERT INTO @ output SELECT CONVERT ( VARCHAR ( 6 ),YearMonth, 112 ) AS YearMonth1 FROM DT_TempTbl ORDER BY YearMonth1 返回 END 我使用您的测试数据调用它,如下所示 选择 * 来自 dbo.fnYourFunction(CAST(' 2010-01 -01' as DATETIME ),getdate()) DECLARE @StartDate DATETIME ,@EndDate DATETIME;SELECT @StartDate ='20100101', @EndDate = GETDATE() --convert(varchar(8), GETDATE(),112); ;With DT_TempTbl as( SELECT @StartDate AS YearMonth UNION ALL SELECT DATEADD(MONTH, 1, YearMonth) FROM DT_TempTbl WHERE YearMonth <= @EndDate)SELECT CONVERT(VARCHAR(6), YearMonth, 112) AS YearMonth1 FROM DT_TempTbl ORDER BY YearMonth1 解决方案 这篇关于我想在SQL Server中创建一个函数我创建了一个临时表,但我想在sqlserver中为下面的代码创建函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
09-18 15:34