我有一个存储过程,我想从另一个内部调用,然后循环结果.有点像使用带有存储过程的游标而不是SQL select语句.我无法弄明白该怎么做.
我可以像这样得到整个结果:
DECLARE @result int;
EXEC @result = sp_who;
PRINT @result;
Run Code Online (Sandbox Code Playgroud)
有趣的是,这似乎将@result的类型改为int以外的东西,但无论如何.然后,我如何逐行循环结果?如何访问各列的数据?例如,我如何杀死第四列(loginname)就像'%gatesb'或其他什么的进程?
一个应用程序会导致我们的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需要表扫描来找出明显的?
对我来说似乎没什么好事.我听过很多关于人们在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 Server 2005中有一个表,其中有大约40亿行.我需要删除大约20亿这些行.如果我尝试在单个事务中执行此操作,则事务日志将填满并且失败.我没有任何额外的空间来使事务日志更大.我认为最好的方法是批量删除语句(批量为~10000?).
我可以使用游标执行此操作,但这是一种标准/简单/聪明的方法吗?
PS此表没有标识列作为PK.PK由整数外键和日期组成.
我有2个表组和人
People具有链接到Group.GroupId(主键)的GroupId
如何选择没有人的团体?在t-sql和linq中
谢谢
基本上我需要做这样的事情......这只是一个例子......但是第一个查询的语法在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在同一类中的任何以前的金奖获奖者.然后在第二个中设置新的金牌获胜者.
我相信我需要使用某种类型的内连接,但我不是百分之百确定.
如果我能在一个查询中完成所有操作,那会更聪明!
任何人都可以提出建议吗?
谢谢 :)
我很困惑应该从哪里开始设计星型模式.
例如,我在数据库中有如下表:
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)
我想设计一个数据仓库来分析负载,例如:
在创建星型模式时,我应该从哪里开始?
根据我的理解,所有星型模式都必须有一个中心,而中心事实表包含"Measures"和"与其他事实表的关系".
那么,在设计星型模式时,我们总是从中心开始,首先确认测量的是什么?然后选择与另一个事实表的正确关系?
但是我还有另一个问题,我们应该选择哪些措施?在选择措施时,我应该问自己什么问题?
我可以用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 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) 我正在插入带有自动增量键字段的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 ×10
sql-server ×7
t-sql ×4
indexing ×2
identity ×1
join ×1
linq ×1
mysql ×1
star-schema ×1