除了可读性之外,在SQL中防止除以0错误时使用CASE WHEN语句与ISNULL/NULLIF有什么显着的好处?
CASE WHEN (BeginningQuantity + BAdjustedQuantity)=0 THEN 0
ELSE EndingQuantity/(BeginningQuantity + BAdjustedQuantity) END
Run Code Online (Sandbox Code Playgroud)
VS
ISNULL((EndingQuantity)/NULLIF(BeginningQuantity + BAdjustedQuantity,0),0)
Run Code Online (Sandbox Code Playgroud) 我们有两个表与一对多的关系.我们希望强制执行约束,即给定父记录至少存在一个子记录.
这可能吗?
如果没有,您是否会更改模式以支持此类约束?如果是这样你会怎么做?
编辑:我正在使用SQL Server 2005
什么相当于TSQL中的MS-Access交叉表查询?还有更好的方法吗?
我有一个像这样组织的数据:
Fish
ID Name
---- ---------
1 Jack
2 Trout
3 Bass
4 Cat
FishProperty
ID FishID Property Value
---- ------ -------- -----
1 1 Length 10
2 1 Girth 6
3 1 Weight 4
4 2 Length 6
5 2 Weight 2
6 3 Girth 12
Run Code Online (Sandbox Code Playgroud)
我有许多用户需要对数据进行报告,并且(显然)如果他们能够像这样看到它会更容易:
Fish
ID Name Length Girth Weight
---- --------- ------ ----- ------
1 Jack 10 6 4
2 Trout 6 2
3 Bass 12
Run Code Online (Sandbox Code Playgroud)
我的计划是创建一个类似交叉表的视图,他们可以直接报告.
我想在Sql Server 2005的date列中使用自动递增日期来更新表。
我有下表用于存储用户数据:
例如
TABLE: users
COLUMNS:
...
maritalStatus (INT) - FK
gender (CHAR)
occupation (INT) - FK
...
Run Code Online (Sandbox Code Playgroud)
现在我想比较此表中的两个用户,看看有多少列匹配任何两个给定用户(比如用户X和用户Y)
我是通过mySQL存储过程实现的,分别获取每个值然后比较它们
例如
SELECT maritalStatus from users where userID = X INTO myVar1;
SELECT maritalStatus from users where userID = Y INTO myVar2;
IF myVar1 = myVar2 THEN
...
END IF;
Run Code Online (Sandbox Code Playgroud)
使用SQL查询是否有更短的方法,我可以比较表中的两行,看看哪些列不同?我不需要知道它们实际上有多少不同,只需要知道它们是否包含相同的值.此外,我只会比较选定的列,而不是比较用户表中的每一列.
sql查询的结果
select PayerDate,PaymentAmount from Payments
Run Code Online (Sandbox Code Playgroud)
PaymentAmount - 十进制
Date Amount
12/11/2012 34.31
12/11/2012 95.60
12/11/2012 34.31
Run Code Online (Sandbox Code Playgroud)
可以获得如下查询结果:
Date Amount
12/11/2012 $34.31
12/11/2012 $95.60
12/11/2012 $34.31
Run Code Online (Sandbox Code Playgroud)
我试过但是找不到太多关于此的信息.
我在C#中创建了一个WinForms应用程序.当我去创建我的数据库对象时,我有两个选项:
我想要的只是一个用于我的项目的简单本地数据库.
但是,如果我选择"本地数据库(精简版)",那么在创建表格并将它们拖到LINQ-To-SQL类创建者之后,它会说:
所选对象使用不受支持的数据提供程序.
因此,我不知道为什么在将表拖到对象关系设计器时,创建本地数据库将被视为不受支持的提供程序.
所以,我尝试了第二种类型,"基于服务的数据库".我在桌子上摆放了我想要的基本应用程序和制作表格.当拖动这些表时,LINQ-To-SQL设计器工作正常,我继续在我的应用程序中编写代码以插入和更新数据库条目.
但是,使用第二个"基于服务的数据库",只要应用程序正在运行,我的插入和更新就会起作用.然而,一旦我关闭它,它就会恢复到之前的状态.如果我通过服务器资源管理器手动添加数据,它会持续存在,但我执行的任何插入都不会保存.
为什么我不能使用LINQ创建和使用本地数据库?
如果这不是一个选项,那么为什么不是"基于服务的数据库"(无论是什么),超出应用程序关闭的持续时间?
谢谢你的时间!
编辑:显然LINQ-To-SQL对象设计器不适用于Compact Edition本地数据库.它仍然可以完成,但你必须使用SqlMetal来生成dmbl文件.
在SSRS中编辑和删除计划报告时,我当前收到以下错误:"只允许sysadmin角色的成员更新或删除其他登录所拥有的作业."
我已经尝试将作业的所有者更改为SSRS使用的服务帐户,我已将用户添加为sysadmin,并且我已检查Reporting Services本身的受限帐户的用户和密码.没有什么能有所作为.
报告服务日志只显示:
w3wp!library!a!06/03/2009-01:23:42:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details., ;
Info: Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details. ---> System.Data.SqlClient.SqlException: Only members of sysadmin role are allowed to update or delete jobs owned by a different login.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) …Run Code Online (Sandbox Code Playgroud) 对于某些上下文,记录类SaleAmount属性是
public decimal? SaleAmount
{
get;
set;
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会这样做
record.SaleAmount.Value =
sql.Reader.IsDBNull(IDX_SALEAMOUNT) ? null :
sql.Reader.GetDecimal(IDX_SALEAMOUNT);
Run Code Online (Sandbox Code Playgroud)
唉编译器,这不是朋友,因为......
无法确定条件表达式的类型,因为''和'decimal'之间没有隐式转换
那么你如何优雅地表达这一点,并且不要像下面那样玩明显的卡片......
if (!sql.Reader.IsDBNull(IDX_SALEAMOUNT))
record.SaleAmount = sql.Reader.GetDecimal(IDX_SALEAMOUNT);
Run Code Online (Sandbox Code Playgroud)
或者是最佳解决方案?
我有一个包含数百万行的表,我需要做大量的查询,如下所示:
select max(date_field)
where varchar_field1 = 'something'
group by varchar_field2;
Run Code Online (Sandbox Code Playgroud)
我的问题是: