我试图在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)
但是,当我运行它时,我收到一条错误,指出'语法不正确':'.我究竟做错了什么?
以下图像是Microsoft SQL Server 2008 R2系统视图的一部分.从图片我们可以看到,之间的关系sys.partitions和sys.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'='附近的语法不正确.

我想列出所有销售,并按天分组.
Sales (saleID INT, amount INT, created DATETIME)
Run Code Online (Sandbox Code Playgroud)
更新 我正在使用SQL Server 2005
命名约定很重要,主键和外键具有常用和明显的约定(PK_Table和FK_Table_ReferencedTable分别).IX_Table_Column索引的命名也是相当标准的.
UNIQUE约束怎么样?这个约束是否有一个普遍接受的命名约定?我见过UK_TableName_Column,UQ_TableName_Column有人推荐AX_TableName_Column- 我不知道它来自哪里.
我经常使用,UQ但我并不特别喜欢它,我不喜欢捍卫我选择使用它来反对UK倡导者.
我只想看看是否就最流行的命名达成了共识,或者是为什么一个人比其他人更有意义的一个很好的推理.
我在使用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)
令我惊讶的是,结果与我的想法相反:
测试直接在MSSQL Management …
在FeeSQL Server 2012中的"ReceiptNo"列中的一个表中,数据库标识增量突然开始跳转到100而不是1,具体取决于以下两点.
如果它是1205446,则跳转到1206306,如果是1206321,则跳转到1207306,如果是1207314,则跳到1208306.我想让你注意的是,最后三位数保持不变,即每当跳跃时为306如下图所示.
我重新启动计算机时会出现此问题

我有这样的查询:
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,我怀疑它与时间有关?怎么解决这个问题?
如果我执行更大的日期范围,它可以正常工作,但它应该(包含)也可以使用单个日期.
寻找优雅(或任何)解决方案将列转换为行.
这是一个例子:我有一个包含以下模式的表:
[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中查看的位置以及如何完成它有什么建议吗?
我有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 ×10
sql-server ×10
t-sql ×5
case ×1
dacpac ×1
date ×1
group-by ×1
join ×1
performance ×1
unpivot ×1