标签: t-sql

从单行插入两行

我必须将usersToImport表中的用户导入userContact表中。usersToImport在一行中包含每个用户的电话和电子邮件信息,但userContact每行存储一种联系信息。

这是我目前的做法:http : //sqlfiddle.com/#!6/c9b2e/1(出于某种原因,它没有输出任何内容,但代码在 SSMS 中有效)。

有没有办法在不使用两个不同选择的情况下做到这一点?也许自加入usersToImport或以case某种方式使用。

sql-server insert t-sql sql-server-2012

4
推荐指数
1
解决办法
5102
查看次数

如何替换“设置行数”

目前在 SQL Server 2008/R2 上。我刚刚在这里读到“设置行数”在 2012 年发布的某些版本中已被弃用:http : //technet.microsoft.com/en-us/library/ms188774.aspx

我们有一些遗留代码可能使用它来删除小块数据并最大限度地减少我们每晚“数据清除”工作中的锁定。

如果没有行数,我将不得不使用“top xxx”来代替?

  set rowcount 1000 /* Only delete this number of rows at a time */;
  declare @short_time datetime2 = DATEADD(week,-1,SYSUTCDATETIME());


      SET @TotalRowCount = 0 
      while ( select COUNT(1) from FlightAudit with (nolock) ) > @min_row_count
      begin
            delete FlightAudit where CreatedUTC < @short_time;
            SET @SaveRowCount = @@ROWCOUNT 
            SET @TotalRowCount = @TotalRowCount + @SaveRowCount 
            if @SaveRowCount=0 break;
            print 'delete from FuelerCertificationAudit...' + convert(varchar(10),@SaveRowCount) + ' Time=' + dbo.DateOrNullToChar(getdate()) 
      end
      print …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

4
推荐指数
1
解决办法
2461
查看次数

如何从具有重复键的表中删除唯一行?

我有以下数据:

      road        |  ID  | other column  | other column | 
------------------+------+---------------+--------------+          
MAIN ST           |  1   |     ...       |     ...      |
MAIN ST           |  2   |     ...       |     ...      |        
MAIN ST           |  3   |     ...       |     ...      |
BERRY LN          |  4   |     ...       |     ...      |
BERRY LN          |  5   |     ...       |     ...      |
BERRY LN          |  6   |     ...       |     ...      |
JOHN RD           |  7   |     ...       |     ...      |
JOHN RD           |  8   | …
Run Code Online (Sandbox Code Playgroud)

sql-server duplication t-sql sql-server-2012

4
推荐指数
1
解决办法
4877
查看次数

character_maximum_length 和 character_octet_length 的区别

也许在某处有一个答案,但是,我在谷歌上找不到任何有效的答案,因此,我会在这里问这个。

我想动态地获取一些关于我的存储过程参数的信息,所以我写了这个脚本:

SELECT  PARAMETER_NAME,
        DATA_TYPE,
        CHARACTER_MAXIMUM_LENGTH,
        CHARACTER_OCTET_LENGTH
FROM    INFORMATION_SCHEMA.PARAMETERS
WHERE   SPECIFIC_NAME = @ProcName
Run Code Online (Sandbox Code Playgroud)

问题是 CHARACTER_MAXIMUM_LENGTH 和 CHARACTER_OCTET_LENGTH 之间的区别是什么。你能举个例子说明他们什么时候会有不同的结果吗?

在此处输入图片说明

提前致谢。

sql-server t-sql information-schema

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

如何仅从周末拉行?

我的表数据是这样的:

ID   Name salary   date
1     a    100     1/08/2014
2     b    200     2/08/2014
.
.
.
.
26     z   2600    26/8/2014
Run Code Online (Sandbox Code Playgroud)

现在我只想返回周六或周日的行,例如:

ID   Name salary   date
2    ------------------------
3     -----------------------
9
10
16
17
23
24
30
31 -------------------------
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql

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

使用 PIVOT 将单年列和多周列转换为单年/周列

我有一张大致像这样的桌子。

(Pk int, Year int, Week1, Week2, .., Week53)

每个“周”列中的值是销售数据。我想要做的是从第一个表格中创建一个新表格 -

(PK int, WeekYear, SalesData)

其中“WeekYear”是年份和周数的串联,SalesData 是前一个表中相应字段的相同 salesdata。(只是想暂时取消选择)

SELECT pk,
   [1],
   [2],
   ...
   [1000]
 FROM (SELECT * FROM SalesTable) st
PIVOT
(
AGGREGATE(pk) -- no idea what to use here
FOR pk IN [1],
   [2],
   ...
   [1000]
 );
Run Code Online (Sandbox Code Playgroud)

我目前的尝试毫无意义,因为我不确定要在我的数据集上应用哪个聚合函数。我在辨别创建新专栏 YearWeek 的最佳方式时也遇到了一些麻烦。

这似乎是PIVOT 的一个明显用途(我需要转置表格)。但是,我在思考如何正确完成它时遇到了很多麻烦。这样做的最佳方法是什么?

sql-server t-sql unpivot

4
推荐指数
1
解决办法
695
查看次数

帮助将 SQL 查询转换为 XML 输出

我有以下查询:

SELECT    
    [ID] AS [NewID]
    , (
       CASE WHEN LEN([MiddleName]) > 0 THEN
          [LastName] + ', ' + [FirstName] + ' ' + LEFT([MiddleName],1) + '.'
       ELSE
          [LastName] + ', ' + [FirstName]
       END
    ) AS [Name]
    , [Title] AS [ProfTitle]
    , CONVERT(CHAR(10),[DepartureDate],111) AS [BorDepart]
    , [LocationOfficeNumber] AS [OfficePhone]
    , [Location]
    , [LocationSection] AS [Sec]
    , [PracticeGroup] AS [PracticeTL]
    , [Email]         
FROM [dbo].[Borrowers]
Run Code Online (Sandbox Code Playgroud)

有了这个,我想知道如何编写一个转换为这个输出的 FOR XML 查询:

<sydney>
    <import>
        <template id="Borrower" name="Borrowers">
            <record searchfield="NewID" searchvalue="NewID">
                <field id="NewID">
                    <![CDATA[NEWID]]>
                </field>                
                <field …
Run Code Online (Sandbox Code Playgroud)

xml sql-server t-sql

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

如何列出所有过去的远程登录信息

我和我的同事没有使用“远程桌面”连接到 SQL Server,而是使用 SQL Server Management Studio 将更改应用于远程服务器(每个用户都有自己的凭据)。

我们中的一个人对 SQL 表进行了一些更改,这使所有数据都处于危险之中。我很确定我们中的一个人是有罪的。我的问题是这个。我怎样才能证明这一点?是否有任何类型的查询来显示从客户端到远程 SQL Server 实例的所有过去的远程连接?也许有 IP 地址、计算机名称、凭据。

SQL Server Management Studio 是否有某种日志文件或任何查询来显示远程服务器登录?

PS 远程 SQL Server 实例上没有完整备份。日志很干净。

这是我们登录 SQL Server 的方式:

这就是我们登录SQL的方式

sql-server audit logs t-sql sql-server-2008-r2

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

相同 SQL 语句的执行计划不同

作为此问题的背景,可以在此链接中找到详细信息。

简而言之:除了RIGHT表之外,我有 2 个几乎相同的 SQL 语句。该LEFT JOIN是相同的,并且返回的列不同,因为该表是不同的。数据库从 2008 年移至 SQL Server 2012 实例。在 2012 实例上,1 个查询在 3 秒内执行,而另一个则需要将近 2 小时才能执行。执行计划有所不同,并发布在链接上。

但是,我可以接受这两个查询并在 SQL Server 2008 服务器上执行它们,它们都在 3 秒内完成。2008 服务器上的两个执行计划与 2012 服务器上的“良好”执行计划相同。

我有一个可以工作的新语句,但它所使用的应用程序是一个使用内联 SQL 的 C# windows 应用程序。我不想打破这个 1 语句的模式。任何人都可以阐明这个问题吗?

sql-server t-sql execution-plan sql-server-2008-r2 sql-server-2012

4
推荐指数
1
解决办法
3854
查看次数

如何创建 SQL 触发器以在表更新时执行存储过程

我需要一些帮助来创建触发器以在创建 qf.table 时运行 qf.stored_procedure。目前,我有一项工作是每 15 分钟运行一次存储过程,但不能进行更改。

这个想法是让触发器在表更新时运行存储过程,而不管它是单行还是全部。以及不确定是否在表下的触发器或数据库触发器中创建它?。我希望脚本检查触发器是否存在,如果不存在则创建它。

表名:qf.customer_working_hours 列:WHours_id,DayOFW

存储过程: qf.ServiveRefreshCustomer_WH

我是 SQL 脚本和 SQL 触发器的新手,任何帮助将不胜感激

trigger sql-server stored-procedures t-sql

4
推荐指数
1
解决办法
7万
查看次数