标签: t-sql

如何在MS-SQL Server中的别名列上执行GROUP BY?

我正在尝试对别名列执行分组操作(下面的示例),但无法确定正确的语法.

SELECT       LastName + ', ' + FirstName AS 'FullName'
FROM         customers
GROUP BY     'FullName'
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?


编辑

进一步扩展问题(我没想到我收到的答案)解决方案是否仍然适用于CASEed别名列?

SELECT       
    CASE
        WHEN LastName IS NULL THEN FirstName
        WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
    END AS 'FullName'
FROM         customers
GROUP BY     
    LastName, FirstName
Run Code Online (Sandbox Code Playgroud)

答案是肯定的,它仍然适用.

sql t-sql sql-server syntax

60
推荐指数
4
解决办法
10万
查看次数

如何使用简单的insert语句将二进制文件数据插入二进制SQL字段?

我有一个SQL Server 2000,其中包含一个包含image列的表.

如何通过指定文件的路径将文件的二进制数据插入该列?

CREATE TABLE Files
(
  FileId int,
  FileData image
)
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2000

60
推荐指数
2
解决办法
10万
查看次数

SQL Server 2000:如何退出存储过程?

如何在存储过程中退出?

我有一个存储过程,我想尽早摆脱(尝试调试).我已经打过电话RETURN,并RAISERROR和SP在后台继续运行:

CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS

    print 'before raiserror'
    raiserror('this is a raised error', 18, 1)
    print 'before return'
    return -1
    print 'after return'

[snip]
Run Code Online (Sandbox Code Playgroud)

我知道它继续运行,因为我遇到了进一步的错误.我看不到任何印刷品.如果我注释掉大部分存储过程:

CREATE PROCEDURE dbo.Archive_Session @SessionGUID uniqueidentifier AS

    print 'before raiserror'
    raiserror('this is a raised error', 18, 1)
    print 'before return'
    return -1
    print 'after return'

   /*
     [snip]
   */
Run Code Online (Sandbox Code Playgroud)

然后我没有得到我的错误,我看到结果:

before raiserror
Server: Msg 50000, Level 18, State 1, Procedure Archive_Session, Line 5
this is a raised error …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures sql-server-2000 flow-control

60
推荐指数
6
解决办法
14万
查看次数

如何在SQL Server数据库中一次删除所有存储过程?

目前,我们在脚本文件中为每个存储过程使用单独的drop语句:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MySP]')   
  AND type in (N'P', N'PC'))  
DROP PROCEDURE [dbo].[MySP] 
Run Code Online (Sandbox Code Playgroud)

有没有办法一次性将它们全部丢弃,或者可能在一个循环中?

sql t-sql sql-server

60
推荐指数
4
解决办法
12万
查看次数

将NTEXT列与常量值进行比较的正确方法是什么?

如果我使用类似的东西

[ntext2] <> '1,032.5',
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

数据类型ntext和varchar在不等于运算符时不兼容.

最好的解决方案是,如果对任何列类型以相同的方式实现比较.(<>运算符适用于NVARCHAR和INT).

sql t-sql sql-server ntext

60
推荐指数
2
解决办法
7万
查看次数

如何执行表值函数

我有以下函数返回表.

create Function FN(@Str varchar(30))
  returns
  @Names table(name varchar(25))
  as 
  begin 

      while (charindex(',', @str) > 0)
      begin
      insert into @Names values(substring(@str, 1, charindex(',', @str) - 1))
     set  @str = substring(@str, charindex(',', @str) + 1, 100)  
      end
      insert into @Names values(@str)  

      return
  end
Run Code Online (Sandbox Code Playgroud)

请问任何人请解释我如何运行此功能.

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

60
推荐指数
2
解决办法
13万
查看次数

检查字符串是否包含其他字符串

在T-SQL中,如何检查字符串是否包含另一个字符串?

我有一个nvarchar可能是"橘子苹果".

我想做一个更新,例如,columm 包含"Apples".

如何才能做到这一点?

t-sql sql-server string

59
推荐指数
4
解决办法
13万
查看次数

ANSI JOIN与非ANSI JOIN查询的执行方式是否不同?

我在~7000行T-SQL存储过程中有我的业务逻辑,其中大多数都有下一个JOIN语法:

SELECT A.A, B.B, C.C
FROM aaa AS A, bbb AS B, ccc AS C
WHERE
    A.B = B.ID
AND B.C = C.ID
AND C.ID = @param
Run Code Online (Sandbox Code Playgroud)

如果我用这个替换这样的查询,我会获得性能增长:

SELECT A.A, B.B, C.C
FROM aaa AS A
JOIN bbb AS B
   ON A.B = B.ID
JOIN ccc AS C
   ON B.C = C.ID
   AND C.ID = @param
Run Code Online (Sandbox Code Playgroud)

或者他们是一样的?

sql t-sql sql-server join

59
推荐指数
2
解决办法
8万
查看次数

TRUNCATE与DELETE FROM的优缺点

有人可以让我快速概述使用以下两个陈述的利弊:

TRUNCATE TABLE dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

VS

DELETE FROM dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

看来和完成所有事情似乎他们都做了同样的事情; 但这两者之间是否存在差异?

t-sql sql-server truncate sql-server-2008 sql-delete

59
推荐指数
4
解决办法
5万
查看次数

SQL Server中的条件WHERE子句

我正在创建一个SQL查询,我需要一个条件where子句.

它应该是这样的:

SELECT 
    DateAppr,
    TimeAppr,
    TAT,
    LaserLTR,
    Permit,
    LtrPrinter,
    JobName,
    JobNumber,
    JobDesc,
    ActQty,
    (ActQty-LtrPrinted) AS L,
    (ActQty-QtyInserted) AS M,
    ((ActQty-LtrPrinted)-(ActQty-QtyInserted)) AS N
FROM 
    [test].[dbo].[MM]
WHERE 
    DateDropped = 0
            --This is where i need the conditional clause 
    AND CASE
            WHEN @JobsOnHold = 1 THEN DateAppr >=  0
            ELSE  DateAppr != 0
        END
Run Code Online (Sandbox Code Playgroud)

以上查询无效.这不是正确的语法,还是有其他方法可以做到这一点,我不知道?

我不想使用动态SQL,所以有没有其他方法或我必须使用一个解决方法,如使用if else和使用不同的where子句相同的查询?

sql t-sql sql-server where-clause sql-server-2008

59
推荐指数
5
解决办法
12万
查看次数