标签: sql-server-2005

首先按当月的日期排序,然后按所有其他日期排序

我在数据库列中有日期,记录如下

Startdate 
Dec-1-2011
Dec-1-2012
April-5-2013
Dec-12-2013
Jan-1-2013
Jan-12-2013
Feb-25-2013
March-2-2013
March-3-2013
April-6-2013
Feb-1-2013
Dec-1-2013
Dec-1-2010
Run Code Online (Sandbox Code Playgroud)

我想要sql查询中的所有记录,但按当前月份和年份排序,因此当前月份和年份记录将首先出现,然后是其他记录。

StartDAte 列数据类型为日期

我试过这个

当月份(StartDate)<月份(GetDate())然后月份(StartDate)+12 ELSE月份(StartDate)END时,它首先给出当前月份日期+任何年份日期。但我首先想要当前月份+当前年份日期,然后是其他日期。

sql t-sql sql-server-2005

-1
推荐指数
1
解决办法
2978
查看次数

在插入之前检查行是否存在的线程安全方法 - 我的代码是否正确?

我有一个表"INSERTIF",看起来像这样 -

id  value
S1  s1rocks
S2  s2rocks
S3  s3rocks
Run Code Online (Sandbox Code Playgroud)

在将一行插入此表之前,我想检查给定的ID是否存在.如果它不存在,则插入.否则,只需更新值即可.我想以线程安全的方式做到这一点.你能告诉我我的代码是否正确吗?我尝试了它,它的工作原理.但是,我想确保我没有遗漏任何性能问题.

编辑1-我想使用此代码一次插入数百万行.每个insert语句都包含在我显示的代码中.

编辑2 -我不想使用我的代码的UPDATE部分,只插入就足够了.

我不想使用MERGE,因为它只适用于SQL Server 2008及更高版本

谢谢.

代码 -

-- no check insert 
INSERT INTO INSERTIF(ID,VALUE)
VALUES('S1', 's1doesNOTrock')

--insert with checking 

begin tran /* default read committed isolation level is fine */
if not exists 
(select * from INSERTIF with (updlock, rowlock, holdlock) 
where ID = 'S1')
BEGIN
INSERT INTO INSERTIF(ID,VALUE)
VALUES('S1', 's1doesNOTrock')
END
else
/* update */
UPDATE INSERTIF
SET VALUE = 's1doesNOTrock'
WHERE ID = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 sql-server-2008

-1
推荐指数
1
解决办法
2965
查看次数

如何使用循环更新 SQL Server 数据库中的所有表

我在数据库中的所有表中有一个公共列,我需要通过所有表中的循环来更新此列的值

我尝试使用这段代码但没有发生任何事情

DECLARE TBL_CURSOR CURSOR
FOR ( SELECT Name FROM Sysobjects WHERE Type='U' )

DECLARE @SQL NVARCHAR(MAX);
SET @SQL = '';

DECLARE @TblName NVARCHAR(MAX);

OPEN TBL_CURSOR

FETCH NEXT FROM TBL_CURSOR INTO @TblName

BEGIN

   SET @SQL = ' If not exists (select column_name from INFORMATION_SCHEMA.columns where  table_name = '+ @TblName +' and column_name = "CommonColumn") update ' + @TblName + ' set CommonColumn= 1 ';
  FETCH NEXT FROM TBL_CURSOR INTO @TblName
END

CLOSE TBL_CURSOR
DEALLOCATE TBL_CURSOR

EXEC (@SQL);
Run Code Online (Sandbox Code Playgroud)

有人有更好的想法或修复此代码吗?

sql sql-server sql-server-2005

-1
推荐指数
1
解决办法
7645
查看次数

从SQL 2005迁移到2012年

这是我在SQLServer 2005中编写的存储过程.现在我们转向SQL2012并在我使用的地方收到大量错误*=.我知道我必须使用LEFT OUTER JOIN语法,但不知怎的,我很难过.有人可以帮帮我吗 ?我在where子句中使用ABS的位置也会出错.

These 2 lines in question in WHERE CLAUSE BELOW
currhold.current_hold__001 *= #tmp_transac.current_hold__001 and
((abs(t_quantity_c)> 0.01 and #tmp_transac.current_hold__001 is null) or
Run Code Online (Sandbox Code Playgroud)

完整的SP就在这里

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[usp_getEPMData_GFS]
AS
  BEGIN
      SET NOCOUNT ON;

      IF OBJECT_ID('tempdb..#factortemp', 'u') IS NOT NULL
        BEGIN
            DROP TABLE #factortemp
        END

      IF OBJECT_ID('tempdb..#transactemp', 'u') IS NOT NULL
        BEGIN
            DROP TABLE #transactemp
        END

      SELECT *
      INTO   #transactemp
      FROM   transac
      WHERE  tran_type IN ( 'BUY', 'SHORT' …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 outer-join sql-server-2012

-1
推荐指数
1
解决办法
89
查看次数

SQL Server外键,引用表

是否有一个工具或某人确实有一个查询,可以为提供的表创建一个查询,该查询将在所有引用的表上具有(左)连接,随后是那些引用的所有其他表...到第n个lvl.

谢谢

t-sql sql-server-2005

-1
推荐指数
1
解决办法
164
查看次数

这个TSQL查询有什么问题?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Literal1.Text = Request.QueryString("Pno")
    On Error Resume Next
    Dim SQLData As New System.Data.SqlClient.SqlConnection("workstation id=ws.example.com;packet size=4096;user id=some-user;pwd=some-password;data source=mssql.example.com;persist security info=False;initial catalog=some-db")
    Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT * FROM a1_ticket WHERE PNR_no ='" & Literal1.Text & "'", SQLData)
    SQLData.Open()
    Dim dtrReader As System.Data.SqlClient.SqlDataReader = cmdSelect.ExecuteReader()
    If dtrReader.HasRows Then
        While dtrReader.Read()
            Literal2.Text = dtrReader("bus_type")
            Literal3.Text = dtrReader("dep_time")
            Literal4.Text = dtrReader("PRN")
            Literal5.Text = dtrReader("fro_m")
            Literal6.Text = dtrReader("seat_opt")
            Literal7.Text = dtrReader("Ticket_no")
            Literal8.Text = dtrReader("t_o") …
Run Code Online (Sandbox Code Playgroud)

.net t-sql vb.net ado.net sql-server-2005

-2
推荐指数
1
解决办法
107
查看次数

sql update(帮帮我)

我有3张桌子:

tbl_indicator

grp_nbr,   sect_nbr,   indicat  
1             100          p  
2             101          s
tbl_group 

grp_id,    grp_nbr,    sect_nbr,     indicat  
333         1              100           a  
555         1              100           p  
444         2              101           s
222         2              101           y

这里(in tbl_group)grp_id是主键

tbl_order

order_id,       grp_id
5000              333
5001              555
5002              555
5003              555
5004              444
5005              444
5006              222

这里(tbl_order)grp_id是一个外键grp_idtbl_group.

在表tbl_indiactor中,对于一组grp_nbr和sect_nbr,有一个指示,对于同一组grp_nbr和sect_nbr,有一个正确的指示(555,1,100,p)和一个垃圾指示(333,1,100,a )在表tbl_group中,但这些grp_id s(333,555)都存在于表tbl_orders中.

现在我需要以这样的方式更新tbl_order表,即应该用正确的grp_id s替换垃圾grp_id

输出应该像:

tbl_orders

order_id,       grp_id
5000              555
5001              555
5002              555
5003              555
5004              444 …

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

-2
推荐指数
1
解决办法
117
查看次数

如何使光标更快

我已将此光标写入佣金报告.会发生什么是佣金来自一个表,记录是另一个表.我根据某些标准匹配两个(没有完全匹配).问题是存在记录的重复.当我将佣金与records表格匹配时,可能会导致重复这些重复.因此,代表获得更多报酬.另一方面,佣金表中也有重复,但这些都是有效的,因为它们简单意味着账户已经支付了2个月.

我写了这个查询,但需要5分钟才能运行.我在记录表中有50,000条记录,在佣金表中有100,000条记录.有什么方法可以改进这个游标吗?

/* just preparation of cursor, this is not time consuming */
CREATE TABLE #result
  (
     repid         INT,
     AccountNo     VARCHAR(100),
     supplier      VARCHAR(15),
     CompanyName   VARCHAR(200),
     StartDate     DATETIME,
     EndDate       DATETIME,
     Product       VARCHAR(25),
     commodity     VARCHAR(25),
     ContractEnd   DATETIME,
     EstUsage      INT,
     EnrollStatus  VARCHAR(10),
     EnrollDate    DATETIME,
     ActualEndDate DATETIME,
     MeterStart    DATETIME,
     MeterEnd      DATETIME,
     ActualUsage   INT
  )

DECLARE @AccountNo VARCHAR(100)
DECLARE @supplier VARCHAR(10)
DECLARE @commodity VARCHAR(15)
DECLARE @meterstart DATETIME
DECLARE @meterEnd DATETIME
DECLARE @volume FLOAT
DECLARE @RepID INT
DECLARE @Month INT
DECLARE @Year INT

SET …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2005 cursor duplicate-removal

-2
推荐指数
1
解决办法
2407
查看次数

SqlDataAdapter:空结果

我写了这个小函数来对SQL Server 2005数据库进行查询:

public DataSet Query(string query, Dictionary<string, string> parameters)
{
    DataSet result = new DataSet();

    using (SqlDataAdapter adapter = new SqlDataAdapter(query, sqlConnection))
    {
        adapter.SelectCommand.CommandType = CommandType.Text;
        adapter.SelectCommand.CommandText = query;
        foreach (KeyValuePair<string, string> pair in parameters)
        {
            adapter.SelectCommand.Parameters.Add(pair.Key, SqlDbType.Text).Value = pair.Value;
        }
        adapter.Fill(result);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

当我这样称呼时:

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE '%1%'", new Dictionary<string, string>() {  });
Run Code Online (Sandbox Code Playgroud)

我得到了很多结果.但我想要的是这样称呼它:

Query("SELECT * FROM Database.Tab.le WHERE somecol LIKE '@number'", new Dictionary<string, string>() { {"@number", "%1%"}  });
Run Code Online (Sandbox Code Playgroud)

但是,这会返回零行.我想知道为什么以及如何解决它.

c# sql sql-server sql-server-2005

-2
推荐指数
1
解决办法
339
查看次数

将Select语句作为格式化HTML返回(SQL 2005)

我有一个看起来像这样的数据集:

   Gender | Age | Name
    Male  | 30  | Bill
  Female  | 27  | Jenny
  Female  | 27  | Debby 
   Male   | 44  | Frank
Run Code Online (Sandbox Code Playgroud)

我试图将其显示为特殊格式的HTML代码:

    <ul>
      <li>Male
        <ul>
          <li>30
            <ul>
              <li>Bill</li>
            </ul>
          </li>
          <li>44
            <ul>
              <li>Frank</li>
            </ul>
          </li>
        </ul>  
      </li>
    </ul>

    <ul>
      <li>Female
        <ul>
          <li>27
            <ul>
              <li>Jenny</li>
              <li>Debby</li>
            </ul>
          </li>
        </ul>  
      </li>
    </ul>
Run Code Online (Sandbox Code Playgroud)

我试过使用,FOR XML但没有给出我想要的结果.它没有删除多个GenderAge返回的字段.正如您在此HTML中看到的那样,它将所有内容复合在一起,并且只在末端节点上提供重复项.

Aaron Bertrand在这里提供了一个很好的方法返回选择语句作为格式化的HTML,似乎在SQL 2008中完美运行,但我在寻找一些在2005年也能运行的东西,除了小东西,比如+=运算符和设置默认的DECLARE值,只是没有在2005年展出.

如何在SQL Server 2005中实现这样的功能?

sql sql-server sql-server-2005

-3
推荐指数
1
解决办法
7477
查看次数