标签: sql

如何在另一个内部使用存储过程的结果?

我有一个存储过程,我想从另一个内部调用,然后循环结果.有点像使用带有存储过程的游标而不是SQL select语句.我无法弄明白该怎么做.

我可以像这样得到整个结果:

DECLARE @result int;
EXEC @result = sp_who;
PRINT @result;
Run Code Online (Sandbox Code Playgroud)

有趣的是,这似乎将@result的类型改为int以外的东西,但无论如何.然后,我如何逐行循环结果?如何访问各列的数据?例如,我如何杀死第四列(loginname)就像'%gatesb'或其他什么的进程?

sql sql-server stored-procedures

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

id!= id的意外表扫描

一个应用程序会导致我们的Sql Server 2005数据库负载过重.我们不控制运行此查询的应用程序每分钟一次:

select id,col1,col2,col3 from table where id != id
Run Code Online (Sandbox Code Playgroud)

注意id!= id,意味着行不等于它自己.不出所料,结果始终没有找到行.但是,每次运行此查询时,Sql Server都会执行聚簇索引扫描扫描!

id列定义为:

varchar(15) not null primary key
Run Code Online (Sandbox Code Playgroud)

查询计划显示"估计行数"的大量数字.有谁知道为什么Sql Server需要表扫描来找出明显的?

sql sql-server indexing sql-server-2005

11
推荐指数
2
解决办法
607
查看次数

为什么SQL Server默认不强制使用WHERE子句?

对我来说似乎没什么好事.我听过很多关于人们在UPDATE或DELETE中忘记WHERE子句并且废弃整个表的故事.我知道粗心的人不应该直接发出查询而且所有这些...并且存在您希望影响所有行的合法情况,但是默认情况下有一个选项需要这样的查询才有意义写得像:

UPDATE MyTable SET MyColumn = 0 WHERE *
Run Code Online (Sandbox Code Playgroud)

或者不改变语言,

UPDATE MyTable SET MyColumn = 0 WHERE 1 = 1 -- tacky, I know
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

11
推荐指数
4
解决办法
3415
查看次数

SQL批量删除

我在SQL Server 2005中有一个表,其中有大约40亿行.我需要删除大约20亿这些行.如果我尝试在单个事务中执行此操作,则事务日志将填满并且失败.我没有任何额外的空间来使事务日志更大.我认为最好的方法是批量删除语句(批量为~10000?).

我可以使用游标执行此操作,但这是一种标准/简单/聪明的方法吗?

PS此表没有标识列作为PK.PK由整数外键和日期组成.

sql t-sql sql-server sql-server-administration

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

选择没有链接任何外键的行

我有2个表组和人

People具有链接到Group.GroupId(主键)的GroupId

如何选择没有人的团体?在t-sql和linq中

谢谢

sql linq

11
推荐指数
2
解决办法
4914
查看次数

mysql在同一个表的UPDATE中嵌套SELECT

基本上我需要做这样的事情......这只是一个例子......但是第一个查询的语法在MySQL中不起作用

update people set prize = '' 
where prize = 'Gold' and class = (select class from people where id = person_id);
update people set prize = 'Gold' where id = <id>;
Run Code Online (Sandbox Code Playgroud)

任何一个班级中只有一人可以获得金奖.我只知道获得金奖的人的person_id.

我试图在第一个查询中删除与person_id在同一类中的任何以前的金奖获奖者.然后在第二个中设置新的金牌获胜者.

我相信我需要使用某种类型的内连接,但我不是百分之百确定.

如果我能在一个查询中完成所有操作,那会更聪明!

任何人都可以提出建议吗?

谢谢 :)

mysql sql join

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

如何设计星型模式

我很困惑应该从哪里开始设计星型模式.

例如,我在数据库中有如下表:

Branch(branchNo, bStreetAddress, bCity)
LoanManager(empNo, empName, phone, branchNo)
Customer(custNo, custName, profession, streetAddress, city, state)
Account(accNo, accType, balance, accDate, custNo)
LoanContract(contractNo, loanType, amount, loanDate, empNo, custNo)
Run Code Online (Sandbox Code Playgroud)

我想设计一个数据仓库来分析负载,例如:

  1. 2008年的贷款总额.
  2. 对于贷款类型超过10的贷款类型,贷款类型和合同数量

在创建星型模式时,我应该从哪里开始?

根据我的理解,所有星型模式都必须有一个中心,而中心事实表包含"Measures"和"与其他事实表的关系".

那么,在设计星型模式时,我们总是从中心开始,首先确认测量的是什么?然后选择与另一个事实表的正确关系?

但是我还有另一个问题,我们应该选择哪些措施?在选择措施时,我应该问自己什么问题?

sql database-design star-schema

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

我可以在T-SQL SELECT中定义循环变量(如LINQ中的LET)吗?

我可以用LINQ写这样的东西:

var selection = from person in personList
                let initials = person.FirstName[0] + person.LastName[0]
                select initials;
Run Code Online (Sandbox Code Playgroud)

我可以用SQL做类似的事情,比如:

SELECT @Initials
FROM [Person]
SET @Initials = SUBSTRING (Person.FirstName, 1, 1) + SUBSTRING (Person.LastName, 1, 1)
Run Code Online (Sandbox Code Playgroud)

可能不是,但也许有一个伎俩?

我需要有一个预先计算的变量,以便在复杂的WHERE子句中进一步使用,以避免极端复杂性和代码重复.

sql t-sql sql-server

11
推荐指数
1
解决办法
6626
查看次数

为什么我的SQL索引会被忽略?

我们遇到的问题是,我们的表上的索引被忽略,而SQL Server 2000正在执行表扫描.我们可以通过使用该WITH (INDEX=<index_name>)子句来强制使用索引,但是不希望这样做.

作为开发人员,我在编写T-SQL时非常熟悉SQL Server,但是分析和性能调优不是我的强项.我正在寻找关于为什么会发生这种情况的任何建议和指导.

更新:

我应该说我们已经重建了所有索引并更新了索引统计信息.

其中一个罪魁祸首的表定义如下:

CREATE TABLE [tblinvoices]
(
    [CustomerID] [int] NOT NULL,
    [InvoiceNo] [int] NOT NULL,
    [InvoiceDate] [smalldatetime] NOT NULL,
    [InvoiceTotal] [numeric](18, 2) NOT NULL,
    [AmountPaid] [numeric](18, 2) NULL 
        CONSTRAINT [DF_tblinvoices_AmountPaid]  DEFAULT (0),
    [DateEntered] [smalldatetime] NULL 
        CONSTRAINT [DF_tblinvoices_DateEntered]  DEFAULT (getdate()),
    [PaymentRef] [varchar](110),
    [PaymentType] [varchar](10),
    [SyncStatus] [int] NULL,
    [PeriodStart] [smalldatetime] NULL,
    [DateIssued] [smalldatetime] NULL 
        CONSTRAINT [DF_tblinvoices_dateissued]  DEFAULT (getdate()),
    CONSTRAINT [PK_tblinvoices] PRIMARY KEY NONCLUSTERED 
    (
        [InvoiceNo] ASC
    ) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

此表上还有另一个索引(我们希望SQL使用的索引):

CustomerID …
Run Code Online (Sandbox Code Playgroud)

sql sql-server indexing

11
推荐指数
2
解决办法
4960
查看次数

如何从SQLServer SELECT语句返回新的IDENTITY列值?

我正在插入带有自动增量键字段的SQLServer表.(我相信这在SQLServer中称为IDENTITY列.)

在Oracle中,我可以使用RETURNING关键字为我的INSERT语句提供一个结果集,就像SELECT查询一样,它将返回生成的值:

INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Run Code Online (Sandbox Code Playgroud)

如何在SQLServer中完成此操作?

额外奖励:好的,到目前为止答案很好,但如果可能的话,如何将其写入单一陈述?:)

sql t-sql sql-server identity auto-increment

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