标签: sql-server-2014

SQL 包含精确短语

我尝试在 SQL Server 2014 上使用“CONTAINS()”实现搜索机制。

我在这里阅读了https://technet.microsoft.com/en-us/library/ms142538%28v=sql.105%29.aspx和我需要的“SQL Server 2008 中的专业全文搜索”一书使用双引号来搜索精确的短语。

但是 eq 如果我使用它,CONTAINS(*, '"test"')我也会收到包含“numerictest”之类的词的结果。如果我尝试CONTAINS(*, '" test "')它是一样的。我注意到,结果较少,就像我会搜索CONTAINS(*, '*test*')前缀、后缀搜索一样,因此搜索之间肯定存在差异。

我没想到第一个语句中的“numerictest”。这种行为有解释吗?

sql-server full-text-search contains sql-server-2014

6
推荐指数
2
解决办法
5934
查看次数

为什么SQL Server会改变操作顺序和装箱方式呢?

四个简单的SELECT语句:

SELECT 33883.50 * -1;
SELECT 33883.50 / -1.05;
SELECT 33883.50 * -1 / 1.05;
SELECT (33883.50 * -1) / 1.05;
Run Code Online (Sandbox Code Playgroud)

但结果并不如我所料:

-33883.50
-32270.000000
-32269.96773000
-32270.000000
Run Code Online (Sandbox Code Playgroud)

第三个结果似乎是值得怀疑的结果.我可以看到发生了什么,首先SQL Server评估这个:

SELECT -1 / 1.05;
Run Code Online (Sandbox Code Playgroud)

得到答案:

-0.952380
Run Code Online (Sandbox Code Playgroud)

然后它接受该答案并使用它来执行此计算:

SELECT 33883.50 * -0.952380;
Run Code Online (Sandbox Code Playgroud)

得到(错误的)答案:

-32269.96773000
Run Code Online (Sandbox Code Playgroud)

但为什么这样做呢?

sql sql-server sql-server-2014

6
推荐指数
1
解决办法
338
查看次数

为什么我在 BCP 中收到“输入、输出或格式需要有效的表名”错误?

我想在保留标识列的同时导入一个表。

在cmd中,我输入:

bcp database.edg.Hello in C:\Users\Tech\Downloads\p.csv -c -E 
       -S 349024ijfpok.windows.net\MSSQLSERVER -T
Run Code Online (Sandbox Code Playgroud)

返回:

输入、输出或格式选项需要有效的表名

这是语法问题吗?

import identity cmd bcp sql-server-2014

6
推荐指数
1
解决办法
6442
查看次数

如何比较 datetime2 和 datetime

我需要将一个数据库的属性 datetime2 与其他数据库的属性 datetime 进行比较,因为我找不到将 datetime 转换为 datetime2 的方法。

我测试一下这句话:

select CAST(FechaAlta AS datetime) from tutors
Run Code Online (Sandbox Code Playgroud)

但返回此错误消息:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。

sql-server datetime datetime2 sql-server-2014

6
推荐指数
1
解决办法
6525
查看次数

构建项目时,VS 2015 Native编译器在.rdlc文件上返回值-1073741511

我收到了这个错误:

rsUnexpectedCompilerError:编译表达式时发生意外错误.本机编译器返回值:' - 10373741511'

,在现有项目的盒子rdlc上的新盒子上编译时Visual Studio 2015Windows 8.1

这发生在具有表达式的项目中的每个现有r d lc文件上.

我查了一下.我安装了最新的sql服务器数据工具(ssdt).

我还创建了一个全新的控制台应用程序,其中包含没有表达式的空报表,它编译得很好.当我向该空报表添加表达式时,如下例所示,它拒绝编译.

有谁知道我怎么能用表达式Visual Studio编译rdlcs?计算机在重新成像之前用于执行此操作windows 8.1.

这是一个无法编译的文件示例:

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <Body>
    <ReportItems>
      <Textbox Name="Textbox1">
        <CanGrow>true</CanGrow>
        <KeepTogether>true</KeepTogether>
        <Paragraphs>
          <Paragraph>
            <TextRuns>
              <TextRun>
                <Value>="goo"</Value>
                <Style />
              </TextRun>
            </TextRuns>
            <Style />
          </Paragraph>
        </Paragraphs>
        <rd:DefaultName>Textbox1</rd:DefaultName>
        <Top>0.62375in</Top>
        <Left>2.88417in</Left>
        <Height>0.25in</Height>
        <Width>1in</Width>
        <Style>
          <Border>
            <Style>None</Style>
          </Border>
          <PaddingLeft>2pt</PaddingLeft>
          <PaddingRight>2pt</PaddingRight>
          <PaddingTop>2pt</PaddingTop>
          <PaddingBottom>2pt</PaddingBottom>
        </Style>
      </Textbox>
    </ReportItems>
    <Height>2in</Height>
    <Style />
  </Body>
  <Width>6.5in</Width>
  <Page> …
Run Code Online (Sandbox Code Playgroud)

visual-studio reporting-services sql-server-2014 sql-server-data-tools visual-studio-2015

6
推荐指数
1
解决办法
5327
查看次数

TSQL可以使用命名行进行多列unpivot?

我知道这里有几个unpivot/cross apply讨论,但我找不到任何涵盖我的问题的讨论.到目前为止我得到的是以下内容:

SELECT Perc, Salary
FROM (
    SELECT jobid, Salary_10 AS Perc10, Salary_25 AS Perc25, [Salary_Median] AS Median
    FROM vCalculatedView
    WHERE JobID = '1'
    GROUP BY JobID, SourceID, Salary_10, Salary_25, [Salary_Median]
) a
UNPIVOT (
    Salary FOR Perc IN (Perc10, Perc25, Median)
) AS calc1
Run Code Online (Sandbox Code Playgroud)

现在,我想要添加其他几个列,例如.一个名为Bonus,我也想放入Perc10,Perc25和Median Rows.

作为替代方案,我也使用交叉应用进行了查询,但是在这里,似乎你不能像强制转换那样"强制"对行进行排序.换句话说,我不能有一个自定义排序,但只有一个根据表中的数字排序,如果我是正确的?至少,在这里我得到的结果就像我希望的那样,但是行的顺序是错误的,而且我没有像Perc10那样的行名称,这样会很好.

SELECT crossapplied.Salary,
       crossapplied.Bonus
FROM vCalculatedView v
CROSS APPLY (
    VALUES
          (Salary_10, Bonus_10)
        , (Salary_25, Bonus_25)
        , (Salary_Median, Bonus_Median)
) crossapplied (Salary, Bonus)
WHERE JobID = '1'
GROUP BY crossapplied.Salary,
         crossapplied.Bonus
Run Code Online (Sandbox Code Playgroud)

Perc在这里代表Percentile.

输出意图是这样的: …

t-sql sql-server unpivot cross-apply sql-server-2014

6
推荐指数
1
解决办法
275
查看次数

为什么SQL Server代理无法启动?

我刚刚在Windows Server 2012的顶部安装了我的SQL Server 2014.但是安装后SQL Agent没有启动.有人可以告诉我,我可以做些什么来解决这个问题?PFA截图同样如此.

在此输入图像描述

sql-server-2014

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

从JAVA插入SQL Server时,我可以获得"BULK INSERT"般的速度吗?

在寻找从JAVA到SQL Server获取数据的最快方法的过程中,我注意到我能想到的最快的JAVA方法,仍然比使用BULK INSERT慢12倍.

我的数据是从JAVA中生成的,而BULK INSERT只支持从文本文件中读取数据,因此除非我将数据输出到临时文本文件,否则不能使用BULK INSERT.反过来,这当然会成为巨大的性能打击.

从JAVA插入时,插入速度约为每秒2500行.即使当我测量时间的该则ExecuteBatch for循环,和之前.因此,"创建"内存中的数据不是瓶颈.

使用BATCH INSERT插入时,插入速度约为每秒30000行.

两个测试都在服务器上完成.所以网络也不是瓶颈.有关为什么BATCH INSERT更快的任何线索?而且,如果在JAVA内可以获得相同的性能?

这只是一个需要加载一次的大数据集.因此可以临时禁用任何类型的日志记录(已经尝试过简单的日志记录),禁用索引(表没有),锁定,等等,...

到目前为止我的测试设置

数据库:

CREATE TABLE TestTable   
   (  Col1 varchar(50)
    , Col2 int);  
Run Code Online (Sandbox Code Playgroud)

JAVA:

// This seems to be essential to get good speeds, otherwise batching is not used.
conn.setAutoCommit(false);

PreparedStatement prepStmt = conn.prepareStatement("INSERT INTO TestTable (Col1, Col2) VALUES (?, ?)");
for (int i = 1; i <= 10000; i++) {
    prepStmt.setString(1,"X");            
    prepStmt.setInt(2,100);
    prepStmt.addBatch();
}
prepStmt.executeBatch();
conn.commit();
Run Code Online (Sandbox Code Playgroud)

BULK INSERT:

// A text file containing "X …
Run Code Online (Sandbox Code Playgroud)

java sql-server performance bulkinsert sql-server-2014

6
推荐指数
1
解决办法
6000
查看次数

如何将逗号分隔的列值与另一个表作为行连接

我试图通过首先从我正在成功执行的"SupplierId"列转换逗号分隔值来加入两个表.但是,当我尝试通过外键"DCLink"连接到具有供应商名称的另一个表"供应商"时,问题就出现了.

这就是我的意思:

原始表的select语句,

  SELECT  InquiryId, SupplierId FROM Procure_InquiryDetails
Run Code Online (Sandbox Code Playgroud)

给出了这个结果

InquiryId   SupplierId

1           2,3
2           175
3           170,280
5           
7           12
8           5,9
Run Code Online (Sandbox Code Playgroud)

我可以使用此sql语句从SupplierId拆分列

;WITH CTE
    AS
    (
        SELECT  InquiryId,
                [xml_val] = CAST('<t>' + REPLACE(SupplierId,',','</t><t>') + '</t>' AS XML)
        FROM Procure_InquiryDetails
    )

SELECT  InquiryId,
        [SupplierId] = col.value('.','VARCHAR(100)')
FROM CTE
CROSS APPLY [xml_val].nodes('/t') CA(col) 
Run Code Online (Sandbox Code Playgroud)

并获得这些结果

InquiryId   SupplierId
    1           2
    1           3
    2           175
    3           170
    3           280
    5   
    7           12
    8           5
    8           9 
Run Code Online (Sandbox Code Playgroud)

当我应用这段代码将InquiryDetails表加入供应商名称上的供应商表时,

;WITH CTE
AS
(
    SELECT  InquiryId,
            [xml_val] …
Run Code Online (Sandbox Code Playgroud)

c# sql t-sql sql-server sql-server-2014

6
推荐指数
2
解决办法
648
查看次数

如何使用 INSERT INTO OPENROWSET 导出到 Excel,而无需成为目标服务器上的管理员

我正在尝试授予用户使用 OPENROWSET 将数据从 SQL Server 导出到 Excel 文件的权限。

用户收到以下错误:

无法为链接服务器“(null)”初始化 OLE DB 访问接口“Microsoft.ACE.OLEDB.12.0”的数据源对象。

我们可以重现运行以下代码块的问题,我可以成功运行而用户不能:

    INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml; HDR=YES;IMEX=0; Database=\\servername\exportdirectory\exportfile.xlsx', 'Select ExcelColumn from [TabName$]')
    SELECT TOP 1 SQLColumn FROM SQLTable
Run Code Online (Sandbox Code Playgroud)

我在用户之间看到的唯一区别是,能够成功运行此命令并将数据导入 Excel 的用户是托管 SQL 实例和目标目录的 Windows 服务器上的管理员。

无法运行代码的用户对excel文件所在的目标文件目录具有完全控制权限,对SQL实例具有sysadmin权限。

有没有办法允许这个用户写入这个文件而不授予 Windows 服务器本身的完整服务器管理员权限?

windows sql-server file-permissions sql-server-2014

6
推荐指数
1
解决办法
3171
查看次数