是否有 T-sql 命令,例如 Oracle“Connect”,它可以让我更改我登录的用户?
关于在 SQL Server 2008 存储过程中将 Cursors 与 RETURN 结合使用的问题
考虑这个例子:
CREATE PROCEDURE [dbo].[test]
@ReturnEarly BIT = 0
AS
BEGIN
SET NOCOUNT ON
SELECT 1 AS Result INTO #Test
DECLARE @Result INT, @HasResult INT = 1
DECLARE TestCursor CURSOR FOR
SELECT Result
FROM #Test
WHERE Result = 0
OPEN TestCursor
FETCH NEXT FROM TestCursor INTO @Result
IF (@@FETCH_STATUS <> 0)
BEGIN
IF (@ReturnEarly = 1)
RETURN 0
ELSE
SET @HasResult = 0
END
CLOSE TestCursor
DEALLOCATE TestCursor
DROP TABLE #test --technically …Run Code Online (Sandbox Code Playgroud) 可能的重复:
使用 SQLCMD 运行查询与使用 SSMS 运行查询
我有许多脚本可以从不同的表中查询数据并因此更新它们。我已经定义了一个批处理文件并在 sqlcmd 命令中运行它们。似乎当我直接在 SQL management studio 中运行这些脚本时,它们的运行速度比从批处理文件中调用它们时运行得更快。
这种行为有什么原因吗?
提前致谢。
我们有一组数据库(开发、QA 和生产,分别是dev-foo& dev-bar、qa-foo&qa-bar和 just foo& bar)。
在foo数据库系列中,有一个视图应该使用各自的bar数据库进行跨数据库连接。换句话说,
select f.*, b.* from foo f inner join <bar-db>.dbo.bar b on f.barid = b.id
Run Code Online (Sandbox Code Playgroud)
问题是:有什么办法可以让我编写一次这个脚本,然后有一个数据库级变量<bar-db>指向一个适当的bar数据库“实例” ?
我遇到了一些我很难理解的预先存在的 SQL。
SELECT
MAX(I.Symbol) Symbol
, MAX(I.Ticker) CUSIP
, MAX(I.Name) Name
, SUM(H.Quantity) TotalQuantity
, SUM(H.MarketValue) TotalMarketValue
, MAX(H.PriceLC) Price
, MAX(I.CategoryCode5) BUY_SELL
, MAX(I.EquivFactor1) PriceTgt
, MAX(P.LastPrice) CurrPrice
, MAX(I.AssetClass) Target
, MAX(I.Industry) Industry
, MAX(I.CategoryCode1) Risk
FROM
HOLDINGS_SECURE H
, INVESTMENTS I
, PRICE P
WHERE
H.Symbol = I.Symbol
AND I.Product = 'stock'
AND H.Quantity > 0
AND I.CategoryCode5 NOT IN ('X', '')
AND H.Symbol = P.Symbol
GROUP BY
I.Symbol
Run Code Online (Sandbox Code Playgroud)
Symbol、Ticker、Name、CategoryCode5、Assest Class、Industry 和 CategoryCode1 都是 varchar 字段。其余字段是小数。
我最好的猜测是,以某种方式使用 …
我创建了一个过程,我只能重建需要重建的索引(如果我重建它们,这个过程需要一个半小时),虽然它运行良好,但它卡在一个特定的索引上,我看不到我应该这样做的原因。
它失败并显示以下消息:
消息 2725,级别 16,状态 2,第 1 行
无法对索引“I_520CUSTVENDRELIDX”执行联机操作,因为该索引包含数据类型为 text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml 或 large CLR 类型的列“MEMO”。对于非聚集索引,该列可以是索引的包含列。对于聚集索引,该列可以是表的任何列。如果使用 DROP_EXISTING,则该列可能是新索引或旧索引的一部分。该操作必须离线执行。
但是,当我根据这个 chap的建议运行查询时,如下所示,我没有得到任何结果:
SELECT *
FROM sys.index_columns AS ic
INNER JOIN sys.columns AS c
ON ic.object_id = c.object_id
AND ic.column_id = c.column_id
AND ((c.system_type_id IN (34,35,99,241)) -- image, text, ntext, xml
OR (c.system_type_id IN (167,231,165) -- varchar, nvarchar, varbinary
AND max_length = -1))
INNER JOIN sys.indexes as si
on si.object_id = ic.object_id
AND ic.index_id = si.index_id
inner join sys.tables t
on t.object_id = ic.object_id …Run Code Online (Sandbox Code Playgroud) 有没有办法将表中的特定列和固定数量的行导出到 INSERT 语句?
我正在尝试基于大型生产表为单元测试生成这些,因此在 SQL Server Management Studio 中使用“生成脚本”之类的东西是不可能的。
有一些工具可以做到这一点,但在 MySQL 中如此微不足道的东西在 SQL Server 中不应该那么复杂(至少我不希望如此)。
我有以下查询,它从新闻文章表中选择。由于多种排序因素,我找不到日期的下一页。
我拥有的参数是查询结果集中的最后一个ID,那么我如何才能获取下一页...同样,我没有页面索引,我只有上一个查询结果集中的最后一个ID
SELECT TOP (20) id, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01', 102), release_date) AS date, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01',
102), edit_date) AS lastchanged, important
FROM articles AS news WITH (NOLOCK)
WHERE (status = 1) AND (release_date <= GETUTCDATE())
ORDER BY important DESC, date DESC, lastchanged DESC
Run Code Online (Sandbox Code Playgroud)
这是我的数据的一个例子
id date lastchanged important
187346 1366070400 1345212540 1
187306 1365984000 1345290300 1
187330 1365984000 1342457880 1
187344 1363392000 1342461540 1
187343 1363392000 1342461300 1
187342 1363392000 1342459980 1
187339 1363392000 1342459800 1
187337 1363392000 1342458960 1 …Run Code Online (Sandbox Code Playgroud) 我有这个简单的查询。
SELECT a.RecordID SubmissionID,
a.[DateSubmitted],
a.[FinalAction],
a.[FinalActionReason],
a.[FinalActionDate],
b.GradeSubmissionListID,
b.[Action],
b.ActionReason,
b.ActionDate
FROM [dbo].[GradeSubmissionList] a
LEFT JOIN dbo.GradeSubmissionApproveRejectLog b
ON a.RecordID = b.GradeSubmissionListID
WHERE a.EdpCode = '1314ACT1258'
ORDER BY a.DateSubmitted
Run Code Online (Sandbox Code Playgroud)
这会产生以下执行计划,

我想摆脱所有Clustered Index Scan。当我悬停第一个聚集索引扫描时,它生成了这个图像,

看起来它正在使用主键索引,
ALTER TABLE [dbo].[GradeSubmissionList]
ADD CONSTRAINT [GradeSubmissionList_pk_RecordID] PRIMARY KEY CLUSTERED
([RecordID] ASC) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
所以我根据这篇文章创建了一个:为什么在创建索引时使用 INCLUDE 子句?
CREATE NONCLUSTERED INDEX idx_dmcasarms_GradeSubmissionList_RecordIDEdpCode
ON [dbo].GradeSubmissionList(RecordID, FinalApprovedRejectedBy, EdpCode , DateSubmitted)
INCLUDE ( FinalAction, FinalActionDate, FinalActionReason );
Run Code Online (Sandbox Code Playgroud)
我期望 sql 语句现在将转换为Index Seek,但显示它仍在扫描整行。

为了完成这项工作,我需要做什么?如果你有什么想知道的关于我的情况,请尽管问。
我有一个包含以下示例数据的队列表:
id company location
1 acme new york
2 acme philadelphia
3 genco st.louis
4 genco san diego
5 genco san francisco
6 acme miami
Run Code Online (Sandbox Code Playgroud)
我想查询每个公司组的队列位置以显示每个公司的排队位置(假设 acme 在 500 Genco 开始之前有 1,000 行,然后在 Genco 记录过程之后 acme 有 5,000 行)。我想要的结果如下所示:
queuePositionId company
1 acme
3 genco
6 acme
Run Code Online (Sandbox Code Playgroud)
我玩过排名和分组,但事实上一个公司组可以在队列中的任何地方多次出现,这一直在扰乱我的聚合。我也尝试过,dense_rank但无法弄清楚顺序。有任何想法吗?
sql-server t-sql sql-server-2008-r2 group-by gaps-and-islands