我在SQL Server 2008 R2中有一个大表(大约40个记录),它有很高的流量(不断增长,选择和编辑......)
到目前为止,我通过其id
(简单身份密钥)访问此表上的行,我有一个列让我们调用它GUID
,这对于大多数行是唯一的,但是某些行具有该列的相同值.
该GUID
列是,nvarchar(max)
并且该表包含大约10个键和约束,仅在简单身份键列上进行索引.
我想在此列上设置索引,而不会导致任何崩溃或使表不可用.
我怎么能这样做?
请记住,这是一个拥有高流量的大桌子,它必须保持在线和可用
谢谢
我正在使用以下查询来提取约会数据:
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
谢谢
查询以获取下一个身份?对于没有删除记录的表,这是可能的:
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
在我的应用程序中,用户将插入一本书.例如,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) 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存储年份是否安全?
我需要做这样的事情:
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进行匹配。我尝试了几种语法变体,但无法正常工作。
我也看到过类似的问题,但这并没有帮助我。
我在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)
有人可以向我解释为什么第一个选择语句不会返回任何结果吗?
顾客
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) 我试图找到一种方法来查询只包含某种数据类型的字段.
例如,我想返回dbo.tableA.ColumnA
包含字符串的所有值,
'___-___'
其中每个_
值都是数字字符.(这-
只是一个普通的破折号)
此外,我知道这可以使用动态查询(我没有经验)完成,我知道那些高级查询可能需要创建临时表,这是我不能做的事情,因为我只是查询快照-shot,因此没有写访问权限.
我试着找我的裤子寻找答案,没有运气.请帮忙.谢谢.
让我们假设我有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.
思想赞赏.