标签: sql-server-2005

参数数据类型uniqueidentifier对子字符串函数的参数1无效

我试图使用TSQL子字符串函数获取Guid字段的第一部分,如下所示

SELECT SUBSTRING(Guid, 1, 8) AS Gu FROM MyTable
Run Code Online (Sandbox Code Playgroud)

但我得到的只是这个错误.

参数数据类型uniqueidentifier对子字符串函数的参数1无效.

那么这里发生了什么?我应该首先将Guid视为纯字符串还是......?

提前致谢!

t-sql substring sql-server-2005 uniqueidentifier

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

SQL查询,按外键按日期排序前2

我需要一个SQL查询,按PlanDate每个ClientID 返回前两个计划.这是一个表,其中PlanID是PrimaryID,ClientID是一个foreignID.

这是我到目前为止 - >

SELECT *
FROM [dbo].[tblPlan] 
WHERE [PlanID] IN (SELECT TOP (2) PlanID FROM [dbo].[tblPlan] ORDER BY [PlanDate] DESC)
Run Code Online (Sandbox Code Playgroud)

显然,这只返回2条记录,其中我实际上需要最多2条记录ClientID.

sql sql-server-2005 greatest-n-per-group

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

如何编写存储过程来执行此操作?

我想创建一个存储过程,它接受一串逗号分隔值,如"1,2,3,4",并将其拆分并使用这些数字在不同的表上运行查询.

所以在相同的存储过程中它会做类似的事情

select somefield from sometable where somefield = 1
select somefield from sometable where somefield = 2
select somefield from sometable where somefield = 3
select somefield from sometable where somefield = 4
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql t-sql sql-server sql-server-2005

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

SQL CLR - lock语句有什么区别吗?

我编写了以下代码(sql clr存储过程),它将消息写入本地文件.当多个连接同时调用存储的proc时,会发生此问题.所以我使用了锁定语句.但这似乎没有任何区别?我在这做错了什么?

lock (SqlContext.Pipe)
{
    StreamWriter sw = File.AppendText("C:\Date.txt");
    int y = 50;

    while (y != 0)
    {
        sw.WriteLine(DateTime.Now + " " + serverName + " -- " + jobId.ToString() );
        System.Threading.Thread.Sleep(new Random().Next());
        y = y - 1;
    }
    sw.Close();

}
Run Code Online (Sandbox Code Playgroud)

c# sql-server sql-server-2005 sql-server-2008

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

SQL Server 2005身份自行递增

我有一个带有标识列的表,对于它的所有记录都增加了1,然后突然上周它开始以一种奇怪的方式递增.
例如:

身份 - 日期

31891 2010-02-27 09:47:41    
39258 2010-02-27 13:13:03    
41994 2010-02-27 13:43:56   
45119 2010-02-27 14:44:43    
45120 2010-02-27 14:51:33
45121 2010-02-27 15:01:12    
63943 2010-02-27 19:38:24    
63944 2010-02-27 20:14:11   
73344 2010-02-27 22:06:35   
78298 2010-02-27 22:54:43    
124007 2010-02-28 07:02:51    
130482 2010-02-28 07:35:34    
130483 2010-02-28 08:05:02    
144470 2010-02-28 10:11:57    
164253 2010-02-28 11:30:00   
254921 2010-02-28 16:59:51    
254922 2010-02-28 17:06:28
Run Code Online (Sandbox Code Playgroud)

如果你看时间你可以看到插入之间的时间越长,增量就越高.我完全不知道为什么会这样.我不对表执行任何删除查询,因此不能删除行.

identity sql-server-2005

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

在SQL Server 2005中创建触发器(也必须在2008年工作)以防止重复?

我有表,我插入数据与以下查询(从c#代码):

INSERT INTO [BazaZarzadzanie].[dbo].[Wycena]
   ([KlienciPortfeleKontaID]
   ,[WycenaData]
   ,[WycenaTyp]
   ,[WycenaWartosc]
   ,[WycenaWaluta]
   ,[WycenaUzytkownik]
   ,[WycenaUzytkownikData])
VALUES
   (@varKlienciPortfeleKontaID
   ,@varWycenaData
   ,@varWycenaTyp
   ,@varWycenaWartosc
   ,@varWycenaWaluta
   ,@varWycenaUzytkownik
   ,@varWycenaUzytkownikData)
Run Code Online (Sandbox Code Playgroud)

表创建脚本如下所示:

CREATE TABLE [dbo].[Wycena](
[KlienciPortfeleKontaID] [int] NULL,
[WycenaData] [datetime] NULL,
[WycenaTyp] [int] NULL,
[InID] [int] NULL,
[WycenaIlosc] [decimal](18, 2) NULL,
[WycenaCena] [decimal](18, 2) NULL,
[WycenaWartosc] [decimal](18, 2) NULL,
[WycenaWaluta] [nvarchar](3) NULL,
[WycenaUzytkownik] [nvarchar](50) NULL,
[WycenaUzytkownikData] [datetime] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

它还有几个外键,但我没有任何东西可以制作主键/唯一键.所以我想防止重复,我会去触发,因为知道一行是重复我实际上必须测试该行的每一个值(也许不是最后一列2)?该表有大约2mln行.

这是个好主意吗?或者,还有更好的方法?

下面是我创建的触发器(未测试是否有效):

CREATE TRIGGER [dbo].[trg_WycenaDuplicateCheck]
   ON [dbo].[Wycena] FOR INSERT
AS

IF EXISTS(SELECT INSERTED.[KlienciPortfeleKontaID]
  ,INSERTED.[WycenaData]
  ,INSERTED.[WycenaTyp]
  ,INSERTED.[InID]
  ,INSERTED.[WycenaIlosc]
  ,INSERTED.[WycenaCena]
  ,INSERTED.[WycenaWartosc]
  ,INSERTED.[WycenaWaluta] …
Run Code Online (Sandbox Code Playgroud)

triggers sql-server-2005 sql-server-2008

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

调试SQL Server速度慢:相同的数据库,不同的服务器

有一段时间了,我们在新建的(基于VMWare的)SQL Server 2005数据库服务器上的传闻很慢.最近问题已经出现,我已经开始寻找问题的根本原因.

这是一个奇怪的部分:在我用作性能测试用例的存储过程中,执行速度的差异取决于我运行它的DB服务器.这是使用相同的数据库(mdf)和log(ldf)文件,从慢速服务器分离,复制和重新连接到快速服务器.这似乎不是(虚拟化)硬件问题:他的服务器速度是CPU容量的4倍,而速度快速服务器的2倍.

据我所知,问题在于服务器的环境/配置(操作系统或SQL Server安装).但是,我检查了一堆变量(SQL Server配置选项,运行服务,磁盘碎片),发现没有什么能够对测试产生影响.

我应该看什么?我可以用什么工具来调查为什么会这样?

sql-server performance sql-server-2005

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

如何以编程方式从.NET代码中删除SQL Server数据库

我正在尝试从.NET代码中删除SQL Server数据库.我已经尝试过使用SMO类,但得到一个例外,说数据库正在使用中.

然后我尝试执行一个查询(打开一个SqlConnection,执行一个SqlCommand),顺序如下:

ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Run Code Online (Sandbox Code Playgroud)

(暂停)

DROP DATABASE foo
Run Code Online (Sandbox Code Playgroud)

但我仍然得到一个例外,说数据库正在使用中.

我该怎么做呢?(或者,SQL Server Management Studio如何实现Drop数据库并关闭现有连接?)

sql sql-server-2005

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

如何在SQL Server 2005中有效地操作500k记录?

我从客户那里获得了一个包含500,000个用户更新的更新信息的大文本文件.但是,当我处理此文件时,我经常遇到SQL Server超时错误.

这是我在VB应用程序中遵循的处理数据的过程(通常):

  1. 从临时表中删除所有记录(删除上个月的数据)(例如DELETE * FROM tempTable)
  2. 将文本文件翻录到临时表中
  3. 在临时表中填写额外信息,例如organization_id,user_id,group_code等.
  4. 根据临时表中计算的数据更新实际表中的数据

问题是我经常运行像UPDATE tempTable SET user_id = (SELECT user_id FROM myUsers WHERE external_id = tempTable.external_id这样的命令,这些命令经常超时.我已经尝试将时间超过10分钟,但它们仍然失败.现在,我意识到500k行是不容易操作的行数,但我认为据称能够处理数百万行的数据库应该能够很容易地处理500k.我是如何处理这些数据的?

请帮忙.任何和所有建议欢迎.

timeout sql-server-2005

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

旋转sql表

我的sql talble具有以下结构

F1      F2     F3     F4     F5 
Group   1      2      3      4  
Design  5      6      7      8 
Run Code Online (Sandbox Code Playgroud)

现在我想阅读此内容并返回查询结果,如下所示,请帮忙

F1      Value 
Group   1    
Group   2    
Group   3    
Group   4 
Design  5       
Design  6   
Design  7   
Design  8   
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2005

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