我有 36 个 Microsoft SQL Server VM,每个都有一个以 _Sec 结尾的特定数据库作为数据库名称。该数据库中有 2 个表,我需要在单个查询中从中获取数据:tblConnGroups和tblConnGroupsDet.
tblConnGroups 有 3 列我需要包含在结果中
tblConnGroups.ID
tblConnGroups.GroupName
tblConnGroups.Provisional
Run Code Online (Sandbox Code Playgroud)
tblConnGroupsDet 结果中基本上有一个列。
tblConnGroupsDet.GroupID
tblConnGroupsDet.DBName
Run Code Online (Sandbox Code Playgroud)
tblConnGroups.ID是在使用的密钥tblConnGroupsDet.GroupID,然而,在tblConnGroups该ID领域具有一对多的关系到GroupID在字段tblConnGroupsDet。
Connection Group Name 只出现在tblConnGroups带有它的ID, 和其他信息中,但是GroupID将出现在tblConnGroupsDet带有成员数据库名称的每一行中。
USE [Name_Sec];
GO
SELECT ID,Groupname,Provisional
from [tblConnGroups]
ORDER BY ID ASC
ID GroupName Provisional
514 Name_FY0910 0
844 Name_FY1011 0
1588 NameTest_FY1516 1
USE [Name_Sec];
GO
SELECT GroupID,DBName
FROM …Run Code Online (Sandbox Code Playgroud) 我看到@ypercube 的回答??这对如何计算似乎是由 3 订购的数量并给出整数答案给出了很好的答案。这让我想到,如果要拆分的次数可变,您将如何处理?
这意味着这是你总是会被 3 分割的 OP(原始海报
Create Table #Orders
(
id int IDENTITY(1,1) PRIMARY KEY NOT NULL
,partid varchar(100) NOT NULL
,qtyordered int DEFAULT '0'
,orderedby varchar(100) NOT NULL
,ordereddate date DEFAULT GETDATE()
) ;
Insert Into #Orders (partid, qtyordered, orderedby) VALUES
('SS100', 10, 'James'), ('RR200', 5, 'Bob'), ('NN300', 3, 'Jake'), ('OO400', 5, 'Blue') ;
SELECT
partid,
qtyordered,
[First],
[Second],
[Third]
FROM
#Orders
CROSS APPLY
( SELECT [Third] = (qtyordered) / 3 ) AS q3
CROSS APPLY …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行以下更新查询
UPDATE x
SET totalval = COUNT(projs)
FROM Prs x
LEFT JOIN es y
ON x.CS = y.CS
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
消息 157,级别 15,状态 1,第 2 行
聚合可能不会出现在 UPDATE 语句的集合列表中。
应如何更改此语句才能使其成为有效的更新语句?
我发现诸如“SSIS”、“SSDT”等的首字母缩略词对于它们与 SQL Server 的关系有点令人困惑。在我看来,SQL Server 实现了 T-SQL 语言,并且诸如“SSIS”之类的包是 T-SQL 语言上的第三方“包装器”,并且实际上是 SQL Server 的插件。这样对吗?
这篇博文(这里)提到了 SSIS 与 T-SQL 的优势(这就是为什么我认为 SSIS 是 T-SQL 的包装器)。此外,我可以看到创建为 SSIS 包的作业可以在 SSMS 的 SQL Server 代理下找到。
尝试创建一个大型测试数据库时,我创建了一个 SP,它使用预定义的表列表(我感兴趣的 35 个)并将每个表中的数据相乘。
换句话说,一张表有一个商店的数据。我将相同的数据插入到该表中,但具有不同的商店编号(这给了我 2 个商店)。然后我调用将 2 个商店数据乘以 4 个商店的同一个 SP,依此类推。上周末,我开始对 SP 进行 6 次后续调用,认为当我周一回来时,我的数据库将拥有 64 家商店的数据。不幸的是,事实并非如此......
当我周一来时,我发现数据高清已满,但该过程从未崩溃并且似乎已暂停。我的数据库处于简单恢复模式,我通过移动文件和缩小 TempDB(通过 SSMS 中的缩小文件选项)来腾出空间,并在外部驱动器上创建了一个初始大小为 100GB 的额外 ndf 文件......进程仍在运行(腾出空间后超过 24 小时)。
spid 的任务状态显示暂停,等待类型为 PAGEIOLATCH_EX,但等待时间很短(低于 100 毫秒),这让我相信进程仍在运行。
35 个表中有 34 个大小合适,乘法速度足够快... 该过程已将所有表中的 1 个数据存储乘以 8 个存储,并且仍在完成数据从 8 个存储到 16 个存储的乘法过程......它似乎正在处理的一张桌子是所有桌子中最大的......
将这个表的 8 个存储区的数据乘以 16 个存储区的实际过程是从 4 亿条记录中插入 4 亿条记录,该表有 200 列所有不同类型。
我是在浪费时间等待吗?恐怕杀死进程需要几天时间才能回滚......我应该等待吗?它变成了一个 Phantom 过程吗?我怎么知道它在做什么?
任何意见/想法将不胜感激。
谢谢
我试图只选择从查询返回的第一行。这是我的语法->
insert into @Temp (id, salesID)
select
RN = ROW_NUMBER() OVER(order by t.psUserID)
,t.psUserID
from (
select distinct
psUserID = rstln.Bama
From rusticlines rstln
AND tnr.Active = '1') t
WHERE RN = 1;
Run Code Online (Sandbox Code Playgroud)
我得到错误:
消息 207,级别 16,状态 1,第 51 行
无效的列名称“RN”。
我需要更改什么才能只选择第一行号?
我正在尝试保护我的业务逻辑,但我不想使用“使用加密”,因为它是不够的并且可能会被破坏。
我不想再次用 CLR 语言重新编写程序。
是否有一种简单的方法可以将 TSQL 编程编译为可供 SQL Server 使用的 DLL,就像它使用 CLR 程序集的方式一样?
我需要一种方法来比较两varchar列的内容,命名fistname和lastname相应,如果内容存在于 中firstname,则将其从lastname. 理想情况下,我想在没有更新查询的情况下执行此操作,但如果这是实现它的唯一方法,那么我可以走那条路。
这是示例 DDL 和 DML:
Declare @BadData Table
(
firstname varchar(500)
,lastname varchar(500)
)
Insert Into @BadData (firstname, lastname) Values
('Bridget Jones', 'Jones, III'), ('Butch', 'Jones'), ('Key West', 'West')
,('Bob Marly', 'Junior')
Select * From @BadData
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果集:
firstname lastname
------------- ----------
Bridget Jones Jones, III
Butch Jones
Key West West
Bob Marly Junior
Run Code Online (Sandbox Code Playgroud)
我想要的结果集是:
firstname lastname
------------- --------
Bridget Jones , III
Butch Jones
Key West
Bob Marly …Run Code Online (Sandbox Code Playgroud) 我正在 MSDN 的 SQL-Server 中学习“分区功能”和“分区架构”。我发现这种将所有分区映射到同一个文件组的语法。例如:
CREATE PARTITION FUNCTION myRangePF3 (int)
AS RANGE LEFT FOR VALUES (1, 100, 1000);
GO
CREATE PARTITION SCHEME myRangePS3
AS PARTITION myRangePF3
ALL TO ( test1fg );
Run Code Online (Sandbox Code Playgroud)
我的问题是,这样做的关键是什么?这甚至称为分区吗???我们通常什么时候将所有分区映射到同一个文件组?
在 SQL Server 2008 中,我有一个结构相似的表。不幸的是,改变数据结构不是一种选择,所以我一直试图想出一个替代方案。我曾尝试运行此查询,但出现以下错误:
(受影响的 5 行)
消息 8114,级别 16,状态 5,第 9行将
数据类型 varchar 转换为数字时出错。
这是 DDL - 应该在查询中更改什么语法才能接收有效输出而不是错误消息?
Declare @GreenHouse Table
(nomen varchar(100), vtc varchar(100), d1 date)
Insert Into @GreenHouse (nomen, vtc, d1) VALUES
('Green', '507.02', '2016-01-14'), ('Green', '4.44089e-015', '2016-01-03')
,('Green', '200.57', '2016-01-18'), ('Green', '649.01', '2016-01-19'),
('Green', '1849.85', '2016-04-30')
Select nomen, Round(Sum(Cast(vtc As Decimal(10,2))),0.00) As FormatedInfo, d1
FROM @GreenHouse Group By nomen, d1 Order By d1 DESC
Run Code Online (Sandbox Code Playgroud)