请耐心等待,我是一名SQL初学者,现在我一直被困在一个问题上几个小时。我经常遇到的每个小问题都已经在论坛上回答过了,所以我没有任何理由可以发帖。参数化查询返回错误的数据类型
我目前在统计仪表板编写查询的过程中,打在这一个墙:
OmbudID和GRUPP是整数 Födelsedatum和Startdatum是日期
不使用UNION的查询工作很好,参数@start和@slut的工作方式与TimePicker给出的值一样,但只要我使用UNION,Query似乎会将参数与期望值一起转换为varchar(3)。我试图CAST Startdatum AS Date,但只给了我预期的值varchar(1024)。
我已经尝试了多种不同的解决方案,无济于事,所以我转向你们。
预先感谢您!
SELECT '18-27' as Caption, count(*) as Count
FROM clients
WHERE DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) < 28
AND ((clients.OmbudID = @ombud) OR (COALESCE (@ombud, '') = ''))
AND ((clients.Grupp = @grupp) OR (COALESCE (@grupp, '') = ''))
AND clients.Startdatum BETWEEN @start AND @slut
union all
SELECT '28-37' as Caption, count(*) as Count
FROM clients
WHERE DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) >= 28
AND DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) <= 37
AND ((clients.OmbudID = @ombud) OR (COALESCE (@ombud, '') = ''))
AND ((clients.Grupp = @grupp) OR (COALESCE (@grupp, '') = ''))
union all
SELECT '38-47' as Caption, count(*) as Count
FROM clients
WHERE DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) >= 38
AND DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) <= 47
AND ((clients.OmbudID = @ombud) OR (COALESCE (@ombud, '') = ''))
AND ((clients.Grupp = @grupp) OR (COALESCE (@grupp, '') = ''))
union all
SELECT '48-57' as Caption, count(*) as Count
FROM clients
WHERE DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) >= 48
AND DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) <= 57
AND ((clients.OmbudID = @ombud) OR (COALESCE (@ombud, '') = ''))
AND ((clients.Grupp = @grupp) OR (COALESCE (@grupp, '') = ''))
union all
SELECT '58-' as Caption, count(*) as Count
FROM clients
WHERE DATEDIFF (year, clients.Födelsedatum, clients.Startdatum) >= 58
AND ((clients.OmbudID = @ombud) OR (COALESCE (@ombud, '') = ''))
AND ((clients.Grupp = @grupp) OR (COALESCE (@grupp, '') = ''))
编辑:表定义
CREATE TABLE [dbo].[clients] (
[KlientID] INT IDENTITY (1, 1) NOT NULL,
[Förnamn] VARCHAR (25) NULL,
[Efternamn] VARCHAR (25) NULL,
[Födelsedatum] DATE NULL,
[OmbudID] INT NULL,
[Grupp] TINYINT NULL,
[Startdatum] DATE NULL,
[Slutdatum] DATE NULL,
PRIMARY KEY CLUSTERED ([KlientID] ASC)
您的查询不会改变您的参数的数据类型。但是我们在这里做得不多,因为你提供的只是一个查询。没有参数定义,没有表定义。说实话,这可以重写为一个单一的查询与一些聚合和分组。 –