我知道在SQL Server 2005中我们可以做类似的事情:
从tbX中删除前10位,其中X = 1
考虑到主键由两个FK列组成,在SQL2K中执行相同操作的查询可能是什么?
我在旧的SQL 2000数据库中有一个存储过程,该数据库采用格式化为varchar的注释列并将其作为money对象导出.在设置此表结构时,假设这将是进入此字段的唯一数据.目前的程序只是这个:
SELECT CAST(dbo.member_category_assign.coment AS money)
FROM dbo.member_category_assign
WHERE member_id = @intMemberId
AND
dbo.member_category_assign.eff_date <= @dtmEndDate
AND
(
dbo.member_category_assign.term_date >= @dtmBeginDate
OR
dbo.member_category_assign.term_date Is Null
)
Run Code Online (Sandbox Code Playgroud)
但是,现在正在将数据插入到此列中,该列无法解析为money对象并导致该过程崩溃.我无法删除"坏"数据(因为这是第三方产品),但需要更新存储过程以测试可解析的钱条目并返回该条目.
如何更新此过程以便它只返回可解析为money对象的值?我是否创建了一个临时表并遍历每个项目,或者是否有更聪明的方法来执行此操作?我坚持使用旧版SQL 2000(版本6.0),因此不幸使用任何较新的功能.
我有一个生产表,每个月有12列.我需要创建一个SP,我传入productID,Customer和Month参数并检索该月的总和.
目前我的逻辑是
if month = 1 then
select sum(JAN) from table where productID = @id and customer = @cust
if month = 2 then
select SUM(FEB) from table where productID = @id and customer = @cust
....
Run Code Online (Sandbox Code Playgroud)
查询涉及更多,但这是它的核心.围绕这些"IF"声明有什么办法吗?
编辑 - 这是一个SQL Server 2000数据库,但将迁移到SQL Server 2005,当我迁移到SQL Server 2005时,PIVOT和UNPIVOT将派上用场.
您好,我的任务是在大型SQL Server 2000数据库上进行一些查询.
我遇到的问题是"找到20到40岁之间的人数"
我该怎么做?我以前的查询得到每个人的计数看起来像这样:
select count(rid) from people where ...
Run Code Online (Sandbox Code Playgroud)
(与...无关的条件).我用谷歌搜索了一些,但我发现计算年龄的唯一事情是如此之大以至于我没有看到如何将它嵌入到查询中,或者它是一个我没有创建权限的存储过程.
有人可以帮我弄这个吗?
人员表的相关部分如下:
RID(unique key) | dateofbirth(datetime) | firstname....
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么这个查询对于变量而言如此缓慢而没有它们.我读了一些我需要启用"动态参数"的地方,但我找不到在哪里这样做.
DECLARE
@BeginDate AS DATETIME
,@EndDate AS DATETIME
SELECT
@BeginDate = '2010-05-20'
,@EndDate = '2010-05-25'
-- Fix date range to include time values
SET @BeginDate = CONVERT(VARCHAR(10), ISNULL(@BeginDate, '01/01/1990'), 101) + ' 00:00'
SET @EndDate = CONVERT(VARCHAR(10), ISNULL(@EndDate, '12/31/2099'), 101) + ' 23:59'
SELECT
*
FROM
claim c
WHERE
(c.Received_Date BETWEEN @BeginDate AND @EndDate) --this is much slower
--(c.Received_Date BETWEEN '2010-05-20' AND '2010-05-25') --this is much faster
Run Code Online (Sandbox Code Playgroud) 有没有办法从IN子句中检索所有数据?
我们假设我的桌子有(ID,名字):
0 Banana
1 Mango
2 Papaya
3 Lemon
和我的查询:
SELECT * FROM Fruits WHERE Name IN (Banana,Mango,Orange)
Run Code Online (Sandbox Code Playgroud)
我希望'Orange'返回,带有空ID(因为没有注册).这该怎么做?
当我试图通过EF迁移使我的数据库版本化时,我收到错误"从字符串转换日期和/或时间时转换失败".问题是我的MS Sql Server版本(带有高级服务的Microsoft SQL Server Express Edition)不支持EF生成的日期字符串('2012-03-21T18:23:13.525Z')用于新的迁移脚本条目(64-位)).这是一个错误吗?有工作吗?
CREATE TABLE [__MigrationHistory] (
[MigrationId] [nvarchar](255) NOT NULL,
[CreatedOn] [datetime] NOT NULL,
[Model] [varbinary](max) NOT NULL,
[ProductVersion] [nvarchar](32) NOT NULL,
CONSTRAINT [PK___MigrationHistory] PRIMARY KEY ([MigrationId])
)
BEGIN TRY
EXEC sp_MS_marksystemobject '__MigrationHistory'
END TRY
BEGIN CATCH
END CATCH
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion])
VALUES ('201203210144184_init', '2012-03-21T18:23:13.525Z', 0x33, '4.3.1');
Run Code Online (Sandbox Code Playgroud)
编辑
没关系.这与EntityFramework无关.如果我的SQL Server数据库配置为向后兼容SQL Server 2000,它将不接受该日期格式.我想除非我可以让EF以另一种格式输出它的日期字符串(或者让SQL Server向后兼容到2000并仍然理解EF日期字符串),我将无法在我的数据库中使用EF迁移: - (.如果有人找到了将EF与兼容级别为SQL Server 2000的数据库一起使用的方法,请告诉我.
sql-server-2000 backwards-compatibility ef-migrations entity-framework-4.3
如果我有一个包含以下字段的表格
ID, SomeFK, SomeTime
Run Code Online (Sandbox Code Playgroud)
如何编写查询返回每个的最新/前3项(基于SomeTime)SomeFK.
所以,结果可能看起来像
SomeFK Sometime
0 2012-07-05
0 2012-07-04
0 2012-07-03
1 2012-07-03
1 2012-07-02
1 2012-07-01
2 2012-07-03
2 2012-07-02
2 2012-07-01
....etc....
Run Code Online (Sandbox Code Playgroud)
返回特定的最新项目SomeFK很容易,但我只是想不出如何为上述做.我也觉得应该死得很简单!
编辑:
道歉,我错过了一些关键信息.这是针对SQL2000的,所以ROW_NUMBER()无法使用!
我们正在使用SQL Server 2008 R2.我们有一个名为PD(6列)的表,它有一个NO主键,没有任何列的索引.当我们执行查询时
select * from PD where ESE='bycad'
Run Code Online (Sandbox Code Playgroud)
如果没有ORDER BY子句,我们每次执行相同的查询时都会以不同的顺序获得结果.我们曾经在两个月前使用SQL Server 2000并且从未遇到过这个问题.
这是SQL Server 2008中的错误吗?我知道我们应该使用ORDER BY子句,但为什么SQL Server 2008在没有ORDER BY子句的情况下处理不同的SQL查询?
我需要更新一个表,以便同一“组”(示例中为“代码+颜色”)的行在该组中获得一个递增的数字。每个组的行应编号为1、2、3 ...
id | Code | Color |Required_New_field
--------------------------
1231 |001 |Red | 1
1232 |001 |Red | 2
1233 |002 |Red | 1
1234 |001 |Red | 3
1235 |001 |Blue | 1
1236 |002 |Red | 2
1237 |001 |Blue | 2
1238 |002 |Blue | 1
1239 |002 |Red | 3
...
Run Code Online (Sandbox Code Playgroud)
在示例中,Code = 001和Color = Red的行应分别获得1、2、3。
我尝试了使用子查询和“分组依据”的几种方法,但是我意识到这实际上不是正确的方法。
任何提示将不胜感激!
编辑: ROW_NUMBER()个答案很棒!可悲的是,我必须在旧的sql_server 2000版本上运行它。ROW_NUMBER()在2005年及更高版本上可用(有关详细信息,请参见此处)。还有其他选择吗?