我有一个表(SQL 2000),有超过10,000,000条记录.记录的增加速度约为每周80,000-100,000.每周一次,从数据中生成一些报告.报告通常运行起来相当慢,因为索引很少(可能是为了加速INSERT).一个新报告确实可以从特定"char(3)"列的附加索引中受益.
我使用企业管理器添加了索引(管理索引 - >新建 - >选择列,确定),甚至重建了表上的索引,但SELECT查询根本没有加速.有任何想法吗?
更新:
表定义:
ID, int, PK
Source, char(3) <--- column I want indexed
...
About 20 different varchar fields
...
CreatedDate, datetime
Status, tinyint
ExternalID, uniqueidentifier
Run Code Online (Sandbox Code Playgroud)
我的测试查询只是:
select top 10000 [field list] where Source = 'abc'
Run Code Online (Sandbox Code Playgroud) 我想得到一个存储过程调用的输出并创建一个永久表,不指定列.因为存储的proc返回了很多列...
那么..我怎么能这样做?
SELECT * INTO MYTABLE FROM MYSTOREDPROC @PARAM1 = 1, @PARAM2 = 'HELLO'
Run Code Online (Sandbox Code Playgroud)
可能吗??
例子可以帮到我很多
我的代码:
String dbDate = DateTime.ParseExact(TextBox3.Text, "dd/mm/yyyy", null).ToString("yyyy-mm-dd");
SqlConnection MyConnection = new SqlConnection("Data Source=localhost;Initial Catalog=hcgoa;User Id=sa;Password=;");
MyConnection.Open();
String MyString = "select notice from notice_aspx where fil_no=? and orderdate=?";
SqlCommand MyCmd = new SqlCommand(MyString, MyConnection);
MyCmd.Parameters.AddWithValue("?", HiddenField4.Value);
MyCmd.Parameters.AddWithValue("?", dbDate);
using (SqlDataReader MyReader4 = MyCmd.ExecuteReader())
{
//**
if (MyReader4.Read())
{
String MyString1 = "UPDATE notice_aspx SET notice=? where fil_no=? AND orderdate=?";
SqlCommand MyCmd1 = new SqlCommand(MyString1, MyConnection);
MyCmd1.Parameters.AddWithValue("?", Editor1.Content.ToString());
MyCmd1.Parameters.AddWithValue("?", HiddenField4.Value.ToString());
MyCmd1.Parameters.AddWithValue("?", dbDate);
MyCmd1.ExecuteNonQuery();
}
else
{.........
Run Code Online (Sandbox Code Playgroud)
错误是
Exception Details: System.Data.SqlClient.SqlException: Line 1: …Run Code Online (Sandbox Code Playgroud) 我有三个表,其中一个存储用户基本信息,另一个是配置文件信息,最后一个是存储用户图片.
当我删除这些用户时,我需要删除这些表中的所有数据.所以我写了这样的查询.
DELETE Kullanicilar FROM Kullanicilar
INNER JOIN ProfilBilgileri ON Kullanicilar.ID = ProfilBilgileri.UyeID
INNER JOIN UyeResim ON Kullanicilar.ID = UyeResim.UyeID
WHERE Kullanicilar.ID=@ID
Run Code Online (Sandbox Code Playgroud)
但它只是删除了"Kullanicilar"表中的数据.
有什么建议?
编辑:我正在使用MSSQL 2008但托管公司2000所以我需要兼容的代码.
如果它总是炸弹或一些错误 - 任何帮助将非常感激.
CREATE PROCEDURE sp_LetsWork
(@MYID int, @ThisDate Datetime)
AS
SET NOCOUNT ON
DECLARE @intErrorCode int,
@QStartDate datetime,
@QEndDate datetime
SELECT @intErrorCode = @@ERROR
--DATEPART(mm, @ThisDate) BETWEEN 1 and 3 -- test both options
BEGIN
IF @ThisDate BETWEEN '01/01/' + CONVERT(VARCHAR(4), YEAR(@ThisDate))
AND '03/31/' + CONVERT(VARCHAR(4), YEAR(@ThisDate))
RunQuarter:
SELECT *
FROM qryAR
WHERE CID = @MYID
AND (paiddate >= @QStartDate
AND paiddate <= @QEndDate)
--ORDER BY paiddate ASC
GO
-- GOTO RunQuarter
END
GO
SELECT @intErrorCode = @@ERROR
IF …Run Code Online (Sandbox Code Playgroud) 桌子:
hDate Holiday
17/12/2011 National Day
01/01/2012 New Year
....
Run Code Online (Sandbox Code Playgroud)
从表中,我想找到两个日期之间的假期总数:
像这样的查询:
select count(hdate)
from table1
where hdate between '" & start_date & "' and '" & end_date & "'
Run Code Online (Sandbox Code Playgroud)
用户输入:
start_date = '16/12/2011'
end_date = '15/01/2012'
Run Code Online (Sandbox Code Playgroud)
而且我想在2个日期之间找到星期五.
要查找星期五,如何创建查询?
预期产量:
Holiday Friday
2 5
Run Code Online (Sandbox Code Playgroud)
[2] - 从表1,[5] - 周五5天假期2天
这该怎么做?
我有一个表单,显示系统列表及其当前状态.用户可以更改状态,并将状态更改的日期存储在历史记录表中.用户还可以在状态更改时更改服务器的名称(例如,如果由于租赁滚动而更换系统).
历史表存储详细信息,systemname如果系统名称在表单上发生更改,则还需要更新历史记录(以及所有历史更改).在表单上,有一个隐藏字段,originalsystemName因此我们知道systemname表单保存时是否匹配.
<input type='text' name='systemname'>
<input type='text' name='originalSystemName'>
<input type='text' name='status'><input type='submit' type='submit'>
Run Code Online (Sandbox Code Playgroud)
我想出了以下查询但是我收到了一个错误(请参阅下面的查询).
update SysHistory set
SystemName = (
select distinct t.systemname
from systemInfo_tmp t, SysHistory h
where t.systemname != t.originalSystemName
)
where systemname in (
select distinct t1.originalSystemName
from systemInfo_tmp t1, SysHistory h1
where t1.systemname != t1.originalSystemName
)
Run Code Online (Sandbox Code Playgroud)
我收到的错误:
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.
我需要一点帮助让这个脚本做我想要的.
SELECT KM.initials,
TPL.debprice,
TMP.pricegroup,
TMP.date
FROM klientmedarbejder KM
INNER JOIN timeprismedarbejderprisgruppe TMP
ON KM.employeeno = TMP.employeeno
INNER JOIN timeprisprisgruppelinie TPL
ON TMP.pricegroup = TPL.pricegroup
GROUP BY KM.initials,
TMP.date,
TPL.debprice,
TMP.pricegroup,
TPL.date
HAVING ( Max(TMP.dato) = TPL.date )
Run Code Online (Sandbox Code Playgroud)
我需要的是具有最新(最大)日期的debPrice.一名员工经历了他的职业生涯,偶尔他的价格会升级.价格从一组价格中选择.
KlientMedarbejder 是员工表. TimeprisMedarbejderPrisgruppe 是他的记录升级到新价格的日期列表. TimeprisPrisgruppeLinie 是您可以拥有的价格列表. 我的解决方案是每位员工最多2个选项.因此:
emp A - 300 - 9 - 1900-01-01
emp A - 500 - 4 - 2012-01-01
emp B - 400 - 6 - 1900-01-01
emp B - 800 - 8 - 2012-04-01
Run Code Online (Sandbox Code Playgroud)
因此,第一条记录是他加入公司时的默认记录.2012年,他终于有了足够好的价格.现在,我需要在每个员工的升级列表上找到最新日期的答案.因此,emp A应该给我500,而emp …
使用PHP SQLSRV驱动程序连接到SQL Server 2000,有没有办法可以使用这段数据匹配所有这些行:5553442524?
555-344-2524
(555) 344-2524
555.344.2524
1-555-344-2524
Run Code Online (Sandbox Code Playgroud)
我想这可能是通过一个特定的查询可能使用存储过程完成的?
谢谢.
所以我已经梳理了多页stackoverflow问题,看起来我一直在接近但是没有得到我需要的确切结果......所以我屈服于提交这个问题.
首先,这是在SQL Server 2000服务器上......我知道这很糟糕.
我有两个表在一个SQL查询中链接在一起,总体上是相当基本的.示例数据如下:

我用来获取该数据的查询是:
SELECT DISTINCT
AH.locationid as locationid
,AH.adate as date
,Min( CASE WHEN Asum.code = '201' THEN Amount END ) AS attrib1
,Min( CASE WHEN Asum.code = '204' THEN Amount END ) AS attrib2
,Min( CASE WHEN Asum.code = '206' THEN Amount END ) AS attrib3
,Min( CASE WHEN Asum.code = '212' THEN Amount END ) AS attrib4
,Min( CASE WHEN Asum.code = '215' THEN Amount END ) AS attrib5
,Min( CASE WHEN Asum.code = '218' …Run Code Online (Sandbox Code Playgroud) sql-server-2000 ×10
sql ×7
sql-server ×6
t-sql ×4
asp.net ×1
c# ×1
having ×1
indexing ×1
max ×1
php ×1