Lah*_*hib 2 sql sql-server sql-function
我试图在SQL Server中创建一个表值函数.我的问题是我找不到适合SQL的语法.我一直在收到错误.我不知道是否可以execute()在表值函数中使用方法.我尝试声明和设置变量,并在oridinary sql查询中使用execute方法,它的工作原理.
我的SQL:
CREATE FUNCTION SortRoutePartByDay
(
@date datetime
)
RETURNS TABLE
AS
Begin
declare @cmdtext varchar(max)
declare @Daynameofweek varchar(10)
set @Daynameofweek = datename(weekday, @date)
set @cmdtext = 'select * from RoutePartPart where ' +@Daynameofweek+' =1';
RETURN
(
execute(@cmdtext)
)
GO
Run Code Online (Sandbox Code Playgroud)
到目前为止我的错误是:
消息156,级别15,状态1,过程SortRoutePartByDay,第21行
关键字'execute'附近的语法不正确.
消息102,级别15,状态1,过程SortRoutePartByDay,第23行
')'附近的语法不正确.
RoutePartPart DDL:
CREATE TABLE [dbo].[RoutePartPart](
[RouteID] [int] NOT NULL,
[RoutePartNo] [smallint] NOT NULL,
[RoutePartPartNo] [smallint] NOT NULL,
[PickupAreaGrpID] [int] NULL,
[DeliveryAreaGrpID] [int] NULL,
[Monday] [bit] NULL,
[Tuesday] [bit] NULL,
[Wednesday] [bit] NULL,
[Thursday] [bit] NULL,
[Friday] [bit] NULL,
[Saturday] [bit] NULL,
[Sunday] [bit] NULL,
[Pickup] [bit] NULL,
[Delivery] [bit] NULL,
[Types] [varchar](10) NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我认为在你的情况下使用动态SQL是不必要的,所以试试这个 -
查询:
CREATE FUNCTION SortRoutePartByDay
(
@date DATETIME
)
RETURNS TABLE
AS RETURN
SELECT *
FROM dbo.RoutePartPart
WHERE DATENAME(weekday, @date) = 1
Run Code Online (Sandbox Code Playgroud)
小信息:
SQL Server上的函数与存储过程不同,它们对可以执行的操作有一些限制.例如,您不能使用动态SQL.
更新:
CREATE FUNCTION SortRoutePartByDay
(
@date DATETIME
)
RETURNS TABLE
AS RETURN
SELECT p.*
FROM dbo.RoutePartPart p
CROSS JOIN (
SELECT [WeekDay] = DATENAME(weekday, @date)
) t
WHERE ([WeekDay] = 'Monday' AND [Monday] = 1)
OR ([WeekDay] = 'Tuesday' AND [Tuesday] = 1)
OR ([WeekDay] = 'Wednesday' AND [Wednesday] = 1)
OR ([WeekDay] = 'Thursday' AND [Thursday] = 1)
OR ([WeekDay] = 'Friday' AND [Friday] = 1)
OR ([WeekDay] = 'Saturday' AND [Saturday] = 1)
OR ([WeekDay] = 'Sunday' AND [Sunday] = 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10057 次 |
| 最近记录: |