标签: sql-server

SQL Server':setvar'错误

我试图在T-SQL中创建一些脚本变量,如下所示:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我收到一条错误,指出'语法不正确':'.我究竟做错了什么?

sql t-sql sql-server

118
推荐指数
2
解决办法
6万
查看次数

我可以在JOIN条件下使用CASE语句吗?

以下图像是Microsoft SQL Server 2008 R2系统视图的一部分.从图片我们可以看到,之间的关系sys.partitionssys.allocation_units依赖的价值sys.allocation_units.type.所以要将它们连接在一起,我会写一些与此类似的东西:

SELECT  *
FROM    sys.indexes i
        JOIN sys.partitions p
            ON i.index_id = p.index_id 
        JOIN sys.allocation_units a
            ON CASE
               WHEN a.type IN (1, 3)
                   THEN a.container_id = p.hobt_id 
               WHEN a.type IN (2)
                   THEN a.container_id = p.partition_id
               END 
Run Code Online (Sandbox Code Playgroud)

但是上面的代码给出了语法错误.我猜这是因为CASE声明.任何人都可以帮忙解释一下吗?

谢谢!


添加错误消息:

消息102,级别15,状态1,行6'='附近的语法不正确.

这是图像

sql sql-server join case

118
推荐指数
6
解决办法
39万
查看次数

Sql查询按天分组

我想列出所有销售,并按天分组.

Sales (saleID INT, amount INT, created DATETIME)
Run Code Online (Sandbox Code Playgroud)

更新 我正在使用SQL Server 2005

sql sql-server group-by sql-server-2005

117
推荐指数
6
解决办法
16万
查看次数

唯一约束的命名约定

命名约定很重要,主键和外键具有常用和明显的约定(PK_TableFK_Table_ReferencedTable分别).IX_Table_Column索引的命名也是相当标准的.

UNIQUE约束怎么样?这个约束是否有一个普遍接受的命名约定?我见过UK_TableName_Column,UQ_TableName_Column有人推荐AX_TableName_Column- 我不知道它来自哪里.

我经常使用,UQ但我并不特别喜欢它,我不喜欢捍卫我选择使用它来反对UK倡导者.

我只想看看是否就最流行的命名达成了共识,或者是为什么一个人比其他人更有意义的一个很好的推理.

sql sql-server naming-conventions unique-constraint

117
推荐指数
3
解决办法
6万
查看次数

多个INSERT语句与具有多个VALUES的单个INSERT

我在使用1000个INSERT语句之间运行性能比较:

INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('6f3f7257-a3d8-4a78-b2e1-c9b767cfe1c1', 'First 0', 'Last 0', 0)
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('32023304-2e55-4768-8e52-1ba589b82c8b', 'First 1', 'Last 1', 1)
...
INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
   VALUES ('f34d95a7-90b1-4558-be10-6ceacd53e4c4', 'First 999', 'Last 999', 999)
Run Code Online (Sandbox Code Playgroud)

..versus使用具有1000个值的单个INSERT语句:

INSERT INTO T_TESTS (TestId, FirstName, LastName, Age) 
VALUES 
('db72b358-e9b5-4101-8d11-7d7ea3a0ae7d', 'First 0', 'Last 0', 0),
('6a4874ab-b6a3-4aa4-8ed4-a167ab21dd3d', 'First 1', 'Last 1', 1),
...
('9d7f2a58-7e57-4ed4-ba54-5e9e335fb56c', 'First 999', 'Last 999', 999)
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,结果与我的想法相反:

  • 1000 INSERT语句:290毫秒.
  • 1个带有1000个值的INSERT语句:2800毫秒.

测试直接在MSSQL Management …

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

117
推荐指数
3
解决办法
10万
查看次数

身份增量在SQL Server数据库中跳跃

FeeSQL Server 2012中的"ReceiptNo"列中的一个表中,数据库标识增量突然开始跳转到100而不是1,具体取决于以下两点.

  1. 如果它是1205446,则跳转到1206306,如果是1206321,则跳转到1207306,如果是1207314,则跳到1208306.我想让你注意的是,最后三位数保持不变,即每当跳跃时为306如下图所示.

  2. 我重新启动计算机时会出现此问题

在此输入图像描述

sql sql-server identity-column sql-server-2012

117
推荐指数
6
解决办法
7万
查看次数

SQL"之间"不包括在内

我有这样的查询:

SELECT * FROM Cases WHERE created_at BETWEEN '2013-05-01' AND '2013-05-01'
Run Code Online (Sandbox Code Playgroud)

但即使第一次有数据,这也没有结果.

created_at看起来2013-05-01 22:25:19,我怀疑它与时间有关?怎么解决这个问题?

如果我执行更大的日期范围,它可以正常工作,但它应该(包含)也可以使用单个日期.

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

117
推荐指数
5
解决办法
13万
查看次数

SQL Server:列到行

寻找优雅(或任何)解决方案将列转换为行.

这是一个例子:我有一个包含以下模式的表:

[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
Run Code Online (Sandbox Code Playgroud)

以下是我想得到的结果:

[ID] [EntityId] [IndicatorName] [IndicatorValue]
Run Code Online (Sandbox Code Playgroud)

结果值将是:

1 1 'Indicator1' 'Value of Indicator 1 for entity 1'
2 1 'Indicator2' 'Value of Indicator 2 for entity 1'
3 1 'Indicator3' 'Value of Indicator 3 for entity 1'
4 2 'Indicator1' 'Value of Indicator 1 for entity 2'
Run Code Online (Sandbox Code Playgroud)

等等..

这有意义吗?您对在T-SQL中查看的位置以及如何完成它有什么建议吗?

sql t-sql sql-server unpivot

117
推荐指数
5
解决办法
24万
查看次数

SQL脚本出错:每批只允许一个语句

我有4个sql脚本,我想在PostDeployment中的DACPAC中运行,但是当我尝试为其中3个构建VS项目时,我收到此错误:

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.
Run Code Online (Sandbox Code Playgroud)

这些脚本仅包含INSERTDB上不同表中的语句.而且所有这些都是这样构建的

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');
Run Code Online (Sandbox Code Playgroud)

仅限于不同的表格和不同的数据.

我的问题是,当语法和操作方面的所有脚本相同时,为什么VS会抱怨其中的3个?

PS:在语句之间添加"GO",因为错误表明没有做任何事情.

sql sql-server visual-studio-2012 dacpac

117
推荐指数
3
解决办法
3万
查看次数

从SQL DATE获取月份和年份

我只需要从SQL Server中的Date字段访问Month.Year.

sql t-sql sql-server

116
推荐指数
15
解决办法
91万
查看次数