我一直在CROSS / OUTER APPLY和同事一起看,我们正在努力寻找现实生活中使用它们的例子.
我花了很多时间看看我何时应该使用Cross Apply而不是Inner Join?和谷歌搜索但主要(唯一)的例子似乎很奇怪(使用表中的行数来确定从另一个表中选择多少行).
我认为这种情况可能会受益于OUTER APPLY:
联系人表(每个联系人包含1条记录)通讯条目表(每个联系人可以包含n个电话,传真,电子邮件)
但是使用子查询,公共表表达式,OUTER JOIN与RANK()和OUTER APPLY似乎都同样执行.我猜这意味着该方案不适用于APPLY.
请分享一些现实生活中的例子并帮助解释这个功能!
这个问题接近我的需要,但我的情况略有不同.源表和目标表是相同的,主键是uniqueidentifier(guid).当我尝试这个:
insert into MyTable
select * from MyTable where uniqueId = @Id;
Run Code Online (Sandbox Code Playgroud)
我显然遇到了主键约束违规,因为我试图复制主键.实际上,我根本不想复制主键.相反,我想创建一个新的.另外,我想有选择地复制某些字段,并将其他字段留空.为了使事情变得更复杂,我需要获取原始记录的主键,并将其插入副本中的另一个字段(PreviousId字段).
我确信有一个简单的解决方案,我只是不知道足够的TSQL知道它是什么.
我对以下几点感到困惑:
存储过程和视图之间有什么区别?
我应该何时使用存储过程,何时应该在SQL Server中使用视图?
视图是否允许创建我们可以传递参数的动态查询?
哪一个最快,哪个基于哪一个比另一个快?
视图或存储过程是否永久分配内存?
如果有人说视图创建虚拟表,而程序创建材料表,这意味着什么?
如果有的话,请告诉我更多的要点.
我已经针对2008数据库构建了一个实体框架模型.一切都适用于2008数据库.当我尝试更新2005数据库上的实体时,我收到此错误.
The version of SQL Server in use does not support datatype 'datetime2
我在构建数据库时没有使用任何2008功能.我在代码中找不到对datetime2的任何引用.并且,是的,该列在数据库中被定义为"datetime".
datetime entity-framework sql-server-2005 datetime2 sql-server-2008
我想列出所有销售,并按天分组.
Sales (saleID INT, amount INT, created DATETIME)
Run Code Online (Sandbox Code Playgroud)
更新 我正在使用SQL Server 2005
我创建了一个关于开发环境的表用于测试目的,并且很少有sp正在重写这个表.现在我必须删除此表以及识别引用此表的所有sp.我很难找到所有sp的列表.请通过假设表名为"x"并且数据库是sql server 2005来建议一些查询.
我想编写一个T-SQL查询,我将字符串编码为Base64字符串.令人惊讶的是,我找不到任何用于执行Base64编码的本机T-SQL函数.是否存在本机功能?如果没有,在T-SQL中进行Base64编码的最佳方法是什么?
如何使用查询语句更改表名?
我使用了以下语法,但在SQL Server 2005中找不到rename关键字.
Alter table Stu_Table rename to Stu_Table_10
Run Code Online (Sandbox Code Playgroud) 我知道这几乎是重复的:错误"登录失败,用户NT AUTHORITY\IUSR""在ASP.NET和SQL Server 2008和用户登录失败"用户名" -在外部System.Data.SqlClient.SqlException与LINQ项目/类库但有些东西与我服务器上的其他应用程序相比并没有加起来,我不知道为什么.
正在使用的盒子:
Web Box
SQL框
SQL测试框
我的应用程序:
我有一个ASP.NET Web应用程序,它引用了一个使用LINQ-to-SQL的类库.连接字符串在类库中正确设置.按照在外部项目/类库System.Data.SqlClient.SqlException与LINQ -用户登录失败"用户名"我还添加了此连接字符串的Web应用程序.
连接字符串使用SQL凭据(在Web应用程序和类库中):
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
此连接通过将其添加到服务器资源管理器确认为正常工作.这是我的.dbml文件正在使用的连接字符串.
问题:
我收到以下错误:
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
Run Code Online (Sandbox Code Playgroud)
现在引用ASP.NET和SQL Server 2008中的错误"登录失败的用户'NT AUTHORITY\IUSR'"它说真的是本地网络服务并且使用任何其他非域名都不起作用.
但我很困惑,因为我检查了SQL Box和SQL Test Box SQL Management Studio,并且都NT AUTHORITY/NETWORK SERVICE在安全 - >登录,在数据库级别,未列在安全 - >用户下,但在数据库级别安全 - >用户我将用户显示在连接字符串中.
在Web服务器上的NTFS级别,权限使NETWORK SERVICE具有完全控制权.
我之所以感到困惑,是因为我的Web服务器上有许多其他Web应用程序,它们在SQL Box和SQL Test Box上引用数据库,它们都可以工作.但除了我使用类库之外,我找不到它们和我当前的应用程序之间的区别.那会有关系吗?检查NTFS权限,服务器和数据库级别的安全登录设置,连接字符串和连接方法(SQL Server凭据)以及IIS应用程序池和其他文件夹选项都是相同的.
为什么这些应用程序在没有将machinename $添加到我的任何一个SQL框的权限的情况下工作?但这就是一个链接告诉我要解决这个问题的方法.
可能有人给我时,我应该使用一些指导WITH (NOLOCK),而不是SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
每个的优点/缺点是什么?是否有任何意外的后果,你使用一个而不是另一个?