标签: sql-server

Linq to SQL DateTime值是本地的(Kind = Unspecified) - 如何使其成为UTC?

是不是有一种(简单)方法告诉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序列化).

c# sql-server datetime linq-to-sql

58
推荐指数
4
解决办法
2万
查看次数

将列值连接到逗号分隔列表中

什么是格式化输出的TSQL语法,以便列值显示为字符串,用逗号分隔.

例如,我的表CARS具有以下内容:

CarID    CarName  
----------------
    1    Porsche  
    2    Mercedes  
    3    Ferrari  
Run Code Online (Sandbox Code Playgroud)

我如何获得汽车名称: Porsche, Mercedes, Ferrari

t-sql sql-server

58
推荐指数
8
解决办法
12万
查看次数

删除表中的所有行

Normaly我会做一个,delete * from XXX但是在这个表上非常慢,它通常有大约500k到1m的行(如果相关,则一个是varbinary(MAX)).

基本上我想知道是否有一个快速的方法来emty所有内容的表,它的实际更快删除并重新创建它然后通过删除sql语句删除内容

我不想重新创建表的原因是因为它的重用和删除/重新创建我认为会破坏sql server收集的索引和统计信息

我也希望有一种方法可以做到这一点,因为有一种"聪明"的方式来通过sys.sysindexes获取行数,所以我希望有一种同样聪明的方法来删除内容

t-sql sql-server

58
推荐指数
5
解决办法
11万
查看次数

查找SQL临时表的数据类型

我需要从使用#temp表切换到@table变量,以便我可以在函数中使用它.

我的查询使用insert到#temp(来自多个表),如下所示:

SELECT 
  a.col1, 
  a.col2, 
  b.col1... 
INTO #temp
FROM ...
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以找到#temp表中列的数据类型,这样我就可以使用与#temp相同的列和数据类型创建@table变量?

sql sql-server

58
推荐指数
5
解决办法
7万
查看次数

SQL Server FOR EACH循环

我有以下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次,就好像我需要回来添加额外的列一样,这将是非常耗时的.

sql t-sql sql-server

58
推荐指数
5
解决办法
45万
查看次数

从CTE更新表中的记录

我有以下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值列.

我知道不会工作,我知道我错过了什么,它是什么?

sql t-sql sql-server common-table-expression

58
推荐指数
3
解决办法
11万
查看次数

如何修改表添加具有命名默认约束和命名外键约束的列?

我有两个现有的表(TableA和TableB),我需要向TableA添加一个新列,该列具有TableB的外键并且具有非null的默认值...并且这两个约束都需要命名.我怎样才能做到这一点?

sql-server

58
推荐指数
1
解决办法
5万
查看次数

如何使用Entity Framework锁定读取表?

我有一个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序列原子化以避免这种冲突?

c# sql-server entity-framework multiprocessing

58
推荐指数
3
解决办法
5万
查看次数

如何在SQL Server中回滚或提交事务

在我的存储过程中,我有三个插入语句.

在重复键值插入时,前两个查询会生成错误

违反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)

sql sql-server sql-server-2005 sql-server-2008

58
推荐指数
1
解决办法
26万
查看次数

不喜欢和喜欢不会返回相反的结果

我有一张包含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条记录.

sql t-sql sql-server sql-like

58
推荐指数
2
解决办法
5253
查看次数