是不是有一种(简单)方法告诉Linq To SQL类特定的DateTime属性应该被视为UTC(即默认情况下将DateTime类型的Kind属性设置为Utc),或者是否存在"干净"的解决方法?
我的app-server上的时区与SQL 2005 Server不同(不能更改任何),没有一个是UTC.当我将类型为DateTime的属性保留为dB时,我使用UTC值(因此db列中的值为UTC),但是当我读回值时(使用Linq To SQL),我得到DateTime的.Kind属性值为'未指定'.
问题是,当我将它'转换为UTC时,它是4小时关闭.这也意味着当它被序列化时,它最终在客户端以4小时的错误偏移(因为它使用UTC序列化).
什么是格式化输出的TSQL语法,以便列值显示为字符串,用逗号分隔.
例如,我的表CARS具有以下内容:
CarID CarName
----------------
1 Porsche
2 Mercedes
3 Ferrari
Run Code Online (Sandbox Code Playgroud)
我如何获得汽车名称: Porsche, Mercedes, Ferrari
Normaly我会做一个,delete * from XXX但是在这个表上非常慢,它通常有大约500k到1m的行(如果相关,则一个是varbinary(MAX)).
基本上我想知道是否有一个快速的方法来emty所有内容的表,它的实际更快删除并重新创建它然后通过删除sql语句删除内容
我不想重新创建表的原因是因为它的重用和删除/重新创建我认为会破坏sql server收集的索引和统计信息
我也希望有一种方法可以做到这一点,因为有一种"聪明"的方式来通过sys.sysindexes获取行数,所以我希望有一种同样聪明的方法来删除内容
我需要从使用#temp表切换到@table变量,以便我可以在函数中使用它.
我的查询使用insert到#temp(来自多个表),如下所示:
SELECT
a.col1,
a.col2,
b.col1...
INTO #temp
FROM ...
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以找到#temp表中列的数据类型,这样我就可以使用与#temp相同的列和数据类型创建@table变量?
我有以下SQL查询:
DECLARE @MyVar datetime = '1/1/2010'
SELECT @MyVar
Run Code Online (Sandbox Code Playgroud)
这自然会返回'2010年1月1日'.
我想要做的是有一个日期列表,比如说:
1/1/2010
2/1/2010
3/1/2010
4/1/2010
5/1/2010
Run Code Online (Sandbox Code Playgroud)
然后我想通过数字FOR FOR EACH并运行SQL Query.
像(伪代码)的东西:
List = 1/1/2010,2/1/2010,3/1/2010,4/1/2010,5/1/2010
For each x in List
do
DECLARE @MyVar datetime = x
SELECT @MyVar
Run Code Online (Sandbox Code Playgroud)
所以这会回来: -
1/1/2010 2/1/2010 3/1/2010 4/1/2010 5/1/2010
我希望这将数据作为一个结果集而不是多个结果集返回,因此我可能需要在查询结束时使用某种联合,因此循环的每次迭代都会联合到下一个结果集.
编辑
我有一个接受'到期'参数的大型查询,我需要运行24次,每次都需要能够提供特定的日期(这些日期将是动态的)我想避免使用union alls重复我的查询24次,就好像我需要回来添加额外的列一样,这将是非常耗时的.
我有以下CTE,它将为我提供整个发票的DocTotal.
;WITH CTE_DocTotal
AS
(
SELECT SUM(Sale + VAT) AS DocTotal
FROM PEDI_InvoiceDetail
GROUP BY InvoiceNumber
)
UPDATE PEDI_InvoiceDetail
SET DocTotal = CTE_DocTotal.DocTotal
Run Code Online (Sandbox Code Playgroud)
现在有了这个结果,我想在PEDI_InvoiceDetail中输入DocTotal值列.
我知道不会工作,我知道我错过了什么,它是什么?
我有两个现有的表(TableA和TableB),我需要向TableA添加一个新列,该列具有TableB的外键并且具有非null的默认值...并且这两个约束都需要命名.我怎样才能做到这一点?
我有一个SQL Server(2012),我使用Entity Framework(4.1)访问.在数据库中,我有一个名为URL的表,一个独立的进程在其中提供新的URL.URL表中的条目可以处于"新建","处理中"或"已处理"状态.
我需要从不同的计算机访问URL表,检查状态为"新"的URL条目,取第一个并将其标记为"正在处理".
var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New);
if(newUrl != null)
{
newUrl.StatusID = (int) URLStatus.InProcess;
dbEntity.SaveChanges();
}
//Process the URL
Run Code Online (Sandbox Code Playgroud)
由于查询和更新不是原子的,我可以读取两个不同的计算机并更新数据库中的相同URL条目.
有没有办法让select-then-update序列原子化以避免这种冲突?
在我的存储过程中,我有三个插入语句.
在重复键值插入时,前两个查询会生成错误
违反PRIMARY KEY约束
和第三个查询像往常一样运行.
现在我想要,如果任何查询生成任何异常,一切都应该回滚.
如果任何查询都没有生成任何异常,则应该提交它.
declare @QuantitySelected as char
set @QuantitySelected = 2
declare @sqlHeader as varchar(1000)
declare @sqlTotals as varchar(1000)
declare @sqlLine as varchar(1000)
select @sqlHeader = 'Insert into tblKP_EstimateHeader '
select @sqlHeader = @sqlHeader + '(CompanyID,CompanyName,ProjectName,EstimateID,EstimateHeader,QuoteDate,ValidUntil,RFQNum,Revision,Contact,Status,NumConfigurations) '
select @sqlHeader = @sqlHeader + ' select CompanyID,CompanyName,ProjectName,EstimateID,EstimateHeader,QuoteDate,ValidUntil,RFQNum,Revision,Contact,Status,NumConfigurations '
select @sqlHeader = @sqlHeader + 'from V_EW_Estimate_Header where EstimateID = 2203'
select @sqlTotals = 'Insert into tblKP_Estimate_Configuration_Totals '
select @sqlTotals = @sqlTotals + '(ConfigRecId,RecId,SellQty,ConfigNum,ConfigDesc,SortOrder,OptionsInMainPrice,MarkupPctQty,'
select @sqlTotals = @sqlTotals + ' …Run Code Online (Sandbox Code Playgroud) 我有一张包含200条记录的表格,其中10条记录的文字包含"TAX"字样.
当我执行时
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'
Run Code Online (Sandbox Code Playgroud)
然后我正确地得到了这10条记录的结果集.
但是,当我试图排除那些记录
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'
Run Code Online (Sandbox Code Playgroud)
它仅返回100条记录,而不是190条记录.