我有以下结构表:
UserID StartedOn EndedOn
1 2009-7-12T14:01 2009-7-12T15:01
2 2009-7-12T14:30 2009-7-12T14:45
3 2009-7-12T14:47 2009-7-12T15:30
4 2009-7-12T13:01 2009-7-12T17:01
5 2009-7-12T14:15 2009-7-12T18:01
6 2009-7-12T11:01 2009-7-12T19:01
1 2009-7-12T16:07 2009-7-12T19:01
Run Code Online (Sandbox Code Playgroud)
我需要找到在线的最大并发用户数.在上表中,结果将是5,因为用户set1 = {1,2,4,5,6}和set2 = {1,3,4,5,6}在同一时期在线.
您是否知道如何仅使用T-SQL来计算此值?
我有一个具有应用程序角色的数据库.角色成员都属于Active Directory中的组.我没有赋予角色权限以从表中选择,而是赋予角色对其需要调用的所有存储过程的执行权限.
这工作正常,除了我的一个存储过程,它正在构建一些动态SQL并调用sp_executesql.
动态sql看起来像这样:
SET @SQL = N'
SELECT *
FROM dbo.uvView1
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'
EXEC sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)
此角色的用户无法调用存储过程.它给出了以下错误,我想这是一种预期:
对象'uvView1',数据库'Foobar',架构'dbo'上的SELECT权限被拒绝.
有没有办法让我的用户成功执行此proc而不赋予动态SQL中所有视图的角色权限?
我的老板要我在不久的将来创建一些报告,我想他想使用SQL Server Reporting Services来部署报告.考虑到我们是一个非常小的组织,我不太确定这将是一个好主意,我看不到我们正在充分利用或需要此解决方案提供的功能,如设置用户,组和订阅.
虽然我之前没有使用SSRS,但我已经观看了为期3天的网络研讨会,看起来这是一件很好的事情,对于简单的情况来说很好但是当需求变得更加复杂时会变得很痛苦并且受到限制.我会将报告部署为.net应用程序中的本地报告(.rdlc),因为:
所以我想我的问题是SSRS在什么情况下运作良好,哪些情况不好?我的观点是有效还是我只是怀疑论者?
我今天写了这个,我很惭愧.我需要做些什么来使这些混乱的东西更准确和可读?
switch ((RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType)Enum.Parse(typeof(RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType), ihdType.Value))
{
//REF:This can (but should it?) be refactored through strategy pattern
case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffects:
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffects(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo)));
break;
case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffectsForFacts:
DateTime factDate;
try
{
factDate = Convert.ToDateTime(ihdDate.Value);
}
catch(FormatException)
{
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), DateTime.MinValue));
break;
}
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), factDate));
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个存储过程,它接受参数来创建用户.如果用户已存在,则将输出参数设置为"用户已存在",并且不执行任何操作.
现在我已将此函数(InsertNewUser)映射到我的实体框架,并调用它如下:
context.InsertNewUser(email, name, passwordhash, salt, ???)
??? 是我遇到麻烦的地方.在存储过程中,此参数是OUTPUT参数.我尝试声明一个字符串,然后传入"out declaredString",但这不正确.
我不确定我是以正确的方式,任何想法?
这是存储过程:
ALTER PROCEDURE dbo.InsertNewUser ( @eMail nvarchar(256), @firstName nvarchar(256), @lastName nvarchar(256), @passwordHash nvarchar(256), @salt nvarchar(256), @output nvarchar(256) OUTPUT ) AS /* Saves a user to the db. */ BEGIN --First check if the user doesn't exist IF EXISTS (SELECT eMail FROM UserSet WHERE eMail = @eMail) --Return that user exists SET @output = 'User exists' ELSE INSERT INTO UserSet VALUES (@eMail, @firstName, @lastName, @passwordHash, @salt) END
好奇如果可能:app服务器和db服务器生活在不同的地方(显然).app服务器当前生成一个用于sql server bulk insert的文件.
这需要DB和app服务器能够查看位置,并且在不同环境中使配置更加困难.
我想知道的是:在这种情况下是否可以绕过文件系统?也许我可以将数据传递给sql server并让它生成文件?
我在sql server 2008上,如果这有所不同.
谢谢!
我知道综合指数总是从左到右使用(例如,如果指数在城市,州,WHERE City ="Blah"或WHERE City ="Blah"AND State ="AA"将正常工作但WHERE State ="AA " 不会).
这个原理是否同样适用于INCLUDE索引?
提前致谢!
粘土
有没有办法判断是否使用SQLCMD在命令行上定义了变量?
这是我的命令行:
sqlcmd -vDB="EduC_E100" -i"Z:\SQL Common\Admin\ProdToTest_DB.sql"
在ProdToTest_DB.sql里面我想设置某种条件IF来检查变量是否不存在,如果不存在则定义它.
IF NOT $(DB) :setvar DB "C_Q200" END
我想允许脚本从命令行和SSMS内部运行.
提前致谢.
此存储过程不起作用.我检查了SQL,并在直接解析到DB时返回正确的值.真奇怪啊!它只返回0行.
可能有什么不对?
ALTER PROCEDURE dbo.GetSaltOfUser ( @eMail nvarchar ) AS DECLARE @result nvarchar /* SET NOCOUNT ON */ BEGIN SELECT @result = salt FROM UserSet WHERE eMail = @eMail RETURN @result END
你可以在我们从一个类继承的时候提供场景,它可以工作一段时间,但是其他东西会改变并引入一个bug吗?我想出了以下情况:
如果我选择在C#中使用对象继承,我应该注意哪些其他问题.
sql-server ×7
c# ×3
sql ×3
oop ×2
t-sql ×2
.net ×1
bulkinsert ×1
coding-style ×1
composite ×1
include ×1
indexing ×1
inheritance ×1
linq ×1
linq-to-sql ×1
rdlc ×1
readability ×1
sqlcmd ×1