标签: t-sql

以不同用户身份登录的 T-SQL 命令?

是否有 T-sql 命令,例如 Oracle“Connect”,它可以让我更改我登录的用户?

sql-server t-sql logins

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

DEALLOCATE CURSOR 之前的 RETURN 语句

关于在 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)

sql-server-2008 stored-procedures t-sql

6
推荐指数
1
解决办法
7764
查看次数

使用sqlcmd查询性能

可能的重复:
使用 SQLCMD 运行查询与使用 SSMS 运行查询

我有许多脚本可以从不同的表中查询数据并因此更新它们。我已经定义了一个批处理文件并在 sqlcmd 命令中运行它们。似乎当我直接在 SQL management studio 中运行这些脚本时,它们的运行速度比从批处理文件中调用它们时运行得更快。

这种行为有什么原因吗?

提前致谢。

sql-server-2008 sql-server optimization t-sql sqlcmd

6
推荐指数
1
解决办法
1791
查看次数

T-SQL 脚本中的动态数据库引用

我们有一组数据库(开发、QA 和生产,分别是dev-foo& dev-barqa-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数据库“实例” ?

t-sql

6
推荐指数
1
解决办法
2901
查看次数

此 Group By Query 中 MAX 的 T-SQL 用途

我遇到了一些我很难理解的预先存在的 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 字段。其余字段是小数。

我最好的猜测是,以某种方式使用 …

t-sql group-by

6
推荐指数
1
解决办法
1679
查看次数

无法重建索引,但没有理由不?

我创建了一个过程,我只能重建需要重建的索引(如果我重建它们,这个过程需要一个半小时),虽然它运行良好,但它卡在一个特定的索引上,我看不到我应该这样做的原因。

它失败并显示以下消息:

消息 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)

sql-server-2008 clustered-index t-sql

6
推荐指数
1
解决办法
6640
查看次数

将特定列导出到 INSERT 语句

有没有办法将表中的特定列和固定数量的行导出到 INSERT 语句?

我正在尝试基于大型生产表为单元测试生成这些,因此在 SQL Server Management Studio 中使用“生成脚本”之类的东西是不可能的。

有一些工具可以做到这一点,但在 MySQL 中如此微不足道的东西在 SQL Server 中不应该那么复杂(至少我不希望如此)。

sql-server t-sql unit-test

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

选择特定 ID 后的行

我有以下查询,它从新闻文章表中选择。由于多种排序因素,我找不到日期的下一页。

我拥有的参数是查询结果集中的最后一个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)

sql-server t-sql sql-server-2012

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

非聚集索引仍在做索引扫描

我有这个简单的查询。

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,但显示它仍在扫描整行。

在此处输入图片说明 在此处输入图片说明

为了完成这项工作,我需要做什么?如果你有什么想知道的关于我的情况,请尽管问。

sql-server t-sql

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

查询以获取每个组的队列位置

我有一个包含以下示例数据的队列表:

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

6
推荐指数
1
解决办法
516
查看次数