标签: sql-server-2008-r2

将索引添加到大表

我在SQL Server 2008 R2中有一个大表(大约40个记录),它有很高的流量(不断增长,选择和编辑......)

到目前为止,我通过其id(简单身份密钥)访问此表上的行,我有一个列让我们调用它GUID,这对于大多数行是唯一的,但是某些行具有该列的相同值.

GUID列是,nvarchar(max)并且该表包含大约10个键和约束,仅在简单身份键列上进行索引.

我想在此列上设置索引,而不会导致任何崩溃或使表不可用.

我怎么能这样做?

请记住,这是一个拥有高流量的大桌子,它必须保持在线和可用

谢谢

sql indexing sql-server-2008-r2

0
推荐指数
1
解决办法
285
查看次数

连接一列SQL的行

我正在使用以下查询来提取约会数据:

SELECT app.subject, AL.locationName
FROM FilteredAppointment app
INNER JOIN appointmentlocation AL ON app.activityid = AL.appointment
WHERE app.scheduledstart='2013-07-06 15:00:00.000'
Run Code Online (Sandbox Code Playgroud)

输出如下,有2行(具有两个不同位置的相同约会):

在此输入图像描述

如何修改此查询以仅显示一行,其中两个位置与逗号连接,如下所示:

Column1:(MZN; OTV)*...
Column2:Room1,Room2

谢谢

sql sql-server-2008-r2

0
推荐指数
1
解决办法
1万
查看次数

查询以获取下一个身份?

查询以获取下一个身份?对于没有删除记录的表,这是可能的:

SELECT TOP 1 EMPID + 1 FROM Employee ORDER BY EMPID DESC
Run Code Online (Sandbox Code Playgroud)

如果有删除的数据,我将如何获得下一个身份?例如,我有一个这样的表:

EMPID    NAME
4001     someName
4002     someName
4003 ----------------------- this is deleted
4004     someName
4005     someName
4006     someName
4007     someName
4008     someName
4009 ----------------------- this is deleted
4010 ----------------------- this is deleted
Run Code Online (Sandbox Code Playgroud)

输出必须是4011

sql t-sql identity-column sql-server-2008-r2

0
推荐指数
1
解决办法
2万
查看次数

在表中插入的正确方法然后将其复制到另一个表

在我的应用程序中,用户将插入一本书.例如,someBook将插入3个副本.Table1.BookID = 1,Table1.Copy = 3,然后在另一个表中,这3本书的主键将是Table2.AccessionID = 1,2,3 Table2.BookID = 1,1,1.

这就是我目前正在做的事情,但正如Aaron Bertrand所说的那样糟糕.

int BookTitlesID;
public void addBookTitle()
{
  int copy = int.Parse(textBox2.Text);
  try
  {
    using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
    {
      myDatabaseConnection.Open();

      using (SqlCommand mySqlCommand1 = new SqlCommand("INSERT INTO BookTitles(BookTitle, Copies) Values(@BookTitle,  @Copies)", myDatabaseConnection))
      {
        mySqlCommand1.Parameters.AddWithValue("@BookTitle", BookTitletextBox.Text);
        mySqlCommand1.Parameters.AddWithValue("@Copies", copy);
        mySqlCommand1.ExecuteNonQuery();
      }
    }
  }
  catch (Exception Ex)
  {
    MessageBox.Show(Ex.Message, "Exception");
  }
}

public void addBook()
{
  int copy = int.Parse(textBox2.Text);
  try
  {
    for (int x = 0; x < copy; x++) …
Run Code Online (Sandbox Code Playgroud)

c# sql-server-2008-r2 winforms

0
推荐指数
1
解决办法
78
查看次数

从今年开始选择大于5年前的所有年份

 a          b
 1          2009
 2          2007
 3          2006
 4          2010
 5          2011
Run Code Online (Sandbox Code Playgroud)

我将如何从今年开始选择5年以前的所有年份?

So it would be like 2013(year today) - 5 = 2008
 a          b
 1          2009
 4          2010
 5          2011
Run Code Online (Sandbox Code Playgroud)

我试过这个:

select * from table1 where b > CURRENT_TIMESTAMP - 5
Run Code Online (Sandbox Code Playgroud)

我使用smallint作为列b的数据类型而不是日期,因为我只存储年份.使用小型int存储年份是否安全?

sql t-sql sql-server sql-server-2008-r2

0
推荐指数
2
解决办法
1万
查看次数

T-SQL-合并IN子句和CASE语句

我需要做这样的事情:

select *
from  Table 
      inner join Few more tables
where t2.ID IN( case when @Param1 = 0 then 
                        (select ID FROM tbl10 WHERE ForeignKey = @param2) 
                else @Param1 end)
Run Code Online (Sandbox Code Playgroud)

因此,如果@ Param1为0,那么我希望某组值是一个匹配项(基于@ param2),如果其不为0,我只希望@ Param1进行匹配。我尝试了几种语法变体,但无法正常工作。

我也看到过类似的问题,但这并没有帮助我。

sql t-sql case sql-server-2008-r2

0
推荐指数
1
解决办法
2073
查看次数

为什么条件@parameter like(condition)不返回结果,而用文字替换参数呢?

我在mssql2008中尝试这个:

declare @test nvarchar

set @test = '12345'

select 'true' where @test like '%3%' -- no results, condition fails

select 'true' where '12345' like '%3%' -- returns true, condition passes
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么第一个选择语句不会返回任何结果吗?

sql sql-server sql-server-2008 sql-server-2008-r2

0
推荐指数
1
解决办法
81
查看次数

计算并加入Where

顾客

CustomerID Name
4001       John Bob
4002       Joey Markle
4003       Johny Brown
4004       Jessie Black
Run Code Online (Sandbox Code Playgroud)

命令

OrderID    Customer   Status
50001      4001       Paid
50002      4002       Paid
50003      4001       Paid
50004      4003       Paid
50005      4001       Paid
50006      4003       Paid
50007      4004       Unpaid
Run Code Online (Sandbox Code Playgroud)

我试过这次加入

Select c.Customer, COUNT(o.OrderID) as TotalOrders
from Customer c
inner join Orders o
on c.Customer = o.Customer
Where o.Status = 'Paid'
Group by c.Customer
Run Code Online (Sandbox Code Playgroud)

但这是结果.

Customer  TotalOrders
4001      3
4002      1
4003      2
Run Code Online (Sandbox Code Playgroud)

未付款的客户不包括在内.我将如何包括所有客户?

Customer  TotalOrders
4001      3
4002      1 …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2008-r2

0
推荐指数
1
解决办法
80
查看次数

使用WHERE子句查找特定数据类型

我试图找到一种方法来查询只包含某种数据类型的字段.

例如,我想返回dbo.tableA.ColumnA包含字符串的所有值, '___-___'其中每个_值都是数字字符.(这-只是一个普通的破折号)

此外,我知道这可以使用动态查询(我没有经验)完成,我知道那些高级查询可能需要创建临时表,这是我不能做的事情,因为我只是查询快照-shot,因此没有写访问权限.

我试着找我的裤子寻找答案,没有运气.请帮忙.谢谢.

sql sql-server sql-server-2008-r2 sqldatatypes

0
推荐指数
1
解决办法
733
查看次数

可以在一个表上有2个FK,它指向不同的表,其中一个只会被使用吗?

让我们假设我有2个表:

Order -< OrderItem
Run Code Online (Sandbox Code Playgroud)

我有另外一张桌子有2个FK:

Feature
 - Id
 - FkOrderId
 - FkOrderItemId
 - Text
Run Code Online (Sandbox Code Playgroud)

UPDATE


此表链接到另一个名为FeatureReason,它对两种类型的记录都是通用的,可以是OrderFeatures或OrderItem功能.

功能 - <FeatureReason

如果我有两个功能表来计算两种类型的记录,那么这需要2个FeatureReason表.同样的问题是FeatureReason表需要有2个FK,每个FK指向不同的主表.


Order可以具有Feature记录,OrderItem也可以.因此,将填充"FkOrderId"或FkOrderItemId.这样可以吗?

我还会认真考虑使用Views来插入/编辑和读取OrderFeatures或OrderItemFeatures.

思想赞赏.

sql sql-server sql-server-2008 sql-server-2008-r2

0
推荐指数
1
解决办法
176
查看次数