标签: sql-server-2014

"THROW"附近的语法不正确

IF @SQL IS NOT NULL
BEGIN
    BEGIN TRY 
        EXEC sp_executesql @SQL
        PRINT 'SUCCESS: ' + @SQL
    END TRY 
    BEGIN CATCH
        SET @ErrorMessage = 
                    N'Error dropping constraint' + @CRLF
                    + 'Table ' + @TableName + @CRLF
                    + 'Script: ' + @SQL + @CRLF
                    + 'Error message: ' + ERROR_MESSAGE() + @CRLF
        THROW  50100, @ErrorMessage, 1;
    END CATCH
END
Run Code Online (Sandbox Code Playgroud)

CATCH执行时,我得到以下错误:

消息102,级别15,状态1,行
257'THROW'附近的语法不正确.

更换THROWPRINT @ErrorMessage作品.

@ErrorMessage用文字字符串替换变量有效.

然而,根据文档,THROW应该能够采用变量.不知道该怎么做.

t-sql sql-server sql-server-2014

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

根据字符串值搜索int列

View_Booking在sql server 2014中有一个View :

bkID    bkSlot    bkStatus
----    ------    --------
2       Lunch     1
4       Lunch     1
6       Dinner    0
7       Lunch     1
Run Code Online (Sandbox Code Playgroud)

在c#中,我使用了gridview并将其bkStatus转换为字符串,如:

<asp:Label ID="lblStatus" Text='<%# (Eval("bkStatus")+"" == "1") ? "Booked" : "Pending" %>'
    ... ></asp:Label>

bkID    bkSlot    bkStatus
----    ------    --------
2       Lunch     Booked
4       Lunch     Booked
6       Dinner    Pending
7       Lunch     Booked
Run Code Online (Sandbox Code Playgroud)

现在我正在使用此查询搜索View:

SELECT * FROM View_Booking 
WHERE CAST(bkID AS NVARCHAR(MAX)) LIKE '%" + keyword + "%' 
OR bkSlot LIKE '%"+keyword+"%' 
OR bkStatus LIKE …
Run Code Online (Sandbox Code Playgroud)

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

22
推荐指数
2
解决办法
3017
查看次数

SQL Server错误或功能?十进制数转换

在开发过程中遇到了相当奇怪的SQL Server行为.在这里,绝对相同的数字我们有完全相同的公式.唯一的区别是我们如何得到这个数字(4.250).从表,临时表,变量表或硬编码值.在所有情况下,圆角和铸造都是完全相同的.

-- normal table
CREATE TABLE [dbo].[value]
(
[val] [decimal] (5, 3) NOT NULL
) 
INSERT INTO [value] VALUES (4.250 )
SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr

-- inline query from normal table
SELECT * FROM (SELECT ROUND(CAST(val * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val FROM [value] AS pr) a

-- record without table
SELECT ROUND(CAST(4.250 * 0.01 / 12 AS DECIMAL(15, 9)), 9) AS val …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008-r2 sql-server-2014 sql-server-2016

20
推荐指数
3
解决办法
1975
查看次数

Visual Studio 2013与MS SQL Server 2014不兼容

我从MSDN下载了MS SQL Server 2014企业版.我想在C#和MS SQL中做一个服务器后端,但问题是,每当我想在Visual Studio 2013 Ultimate中用DB做某事时它就告诉我这个

===================================

An incompatible SQL Server version was detected. (Microsoft.VisualStudio.Data.Tools.SqlEditor)
------------------------------
Program Location:

   at Microsoft.VisualStudio.Data.Tools.SqlEditor.DataModel.SqlConnectionStrategy.ValidateConnectionForEditor(UIConnectionInfo ci, IServerType server)
   at Microsoft.SqlServer.Management.UI.ConnectionDlg.Connector.ConnectionThreadUser()
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道发生了什么,或者为什么告诉我VS与SQL服务器不兼容.

sql-server visual-studio-2013 sql-server-2014 sql-server-data-tools

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

新的基数估算器(SQL Server 2014)已经过时了

我有一个数据仓库数据库,我遇到了SQL Server 2014的新基数估算器的问题.

将数据库服务器升级到SQL Server 2014后,我发现查询性能有很大差异.有些查询的执行速度要慢得多(SQL 2012中为30秒,SQL 2014中为5分钟).在研究执行计划之后,我已经看到SQL Server 2014上的基数估计已经过时了,我无法找到它的原因.

以下是SQL 2012与SQL 2014中的查询执行计划(左上角运算符)的示例:

经过调整的行数

一些细节:

  • 我的查询是典型的数据仓库事实表加载查询.我查询一个事务表并加入很多(15-20)维度表(总是从维表中加入0或1个记录).

  • 我已更新所有表的统计信息(使用FULLSCAN)以确保统计信息是最新的.

  • 维度表的业务键被索引(唯一的非clusted索引).在我看来,由于这个索引的唯一性,旧的基数估计(SQL 2012)正确地假设有最大值.1个连接记录(估计的记录数量在执行计划中没有变化).

我试图将问题缩小到最简单的例子 - 使用2个连接的SELECT:

加入

以下是SQL 2012与SQL 2014中运算符1和2的基数估计:

           | Est.rows - SQL2012 | Est.rows - SQL2014
Operator 1 |               7653 |               7653
Operator 2 |               7653 |              10000
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,SQL Server 2014错过了超过30%的估计(10000对7653).因为我有cca.15-20连接在一个典型的查询中,最终估计结束了.

我可以将数据库置于较低的兼容模式(110),然后它可以正常工作(与SQL Server 2012上的相同),但我真的想知道这种行为的原因是什么.为什么SQL Server 2014的基数估算结果错误?

sql-server sql-server-2014

19
推荐指数
1
解决办法
4836
查看次数

更新触发器后的SQL Server

这个触发器有问题.我希望它只将所请求的信息更新到有问题的行(我刚刚更新的那个)而不是整个表.

CREATE TRIGGER [dbo].[after_update] 
    ON [dbo].[MYTABLE]
    AFTER UPDATE
    AS 
    BEGIN
          UPDATE MYTABLE 
          SET mytable.CHANGED_ON = GETDATE(),
          CHANGED_BY=USER_NAME(USER_ID())
Run Code Online (Sandbox Code Playgroud)

如何告诉触发器这仅适用于相关行?

sql t-sql sql-server sql-server-express sql-server-2014

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

如何在SQL Server 2014中检查活动事务?

我正在使用SQL Server 2014,想知道如何检查我的活动交易?

sql sql-server-2014

17
推荐指数
3
解决办法
6万
查看次数

为什么SQL Server不使用计算列上的索引?

在SQL Server 2014 DB中给出以下内容:

create table t 
(
    c1 int primary key,
    c2 datetime2(7),
    c3 nvarchar(20),
    c4 as cast(dbo.toTimeZone(c2, c3, 'UTC') as date) persisted
);

create index i on t (c4);

declare @i int = 0;

while @i < 10000 
begin
    insert into t (c1, c2, c3) values
        (@i, dateadd(day, @i, '1970-01-02 03:04:05:6'), 'Asia/Manila');
    set @i = @i + 1;
end;
Run Code Online (Sandbox Code Playgroud)

toTimeZone是一个CLR UDF,它将datetime2时区转换为datetime2另一个时区.

当我运行以下查询时:

select c1 
from t 
where c4 >= '1970-01-02'
    and c4 <= …
Run Code Online (Sandbox Code Playgroud)

sql-server performance query-optimization database-performance sql-server-2014

16
推荐指数
1
解决办法
1209
查看次数

使用OUTER APPLY函数时返回的值而不是NULL

使用内联函数时,我得到奇怪的结果.这是代码:

IF EXISTS (
SELECT * FROM sys.objects AS o WHERE name = 'vendor_relation_users'
) DROP FUNCTION dbo.vendor_relation_users;
GO
CREATE FUNCTION [dbo].[vendor_relation_users]
(
    @user_name CHAR(12)
)
RETURNS TABLE
AS
    RETURN (SELECT @user_name AS user_name WHERE @user_name NOT LIKE '06%');
GO

DECLARE @u CHAR(12) = '066BDLER'
SELECT a.user_name, is_v.user_name 
FROM (SELECT @u AS user_name) a
OUTER APPLY [dbo].[vendor_relation_users](@u) AS is_v

SELECT a.user_name, is_v.user_name 
FROM (SELECT @u AS user_name) a
OUTER APPLY (SELECT @u AS user_name WHERE @u NOT LIKE '06%') AS …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server apply sql-server-2014 outer-apply

16
推荐指数
2
解决办法
350
查看次数

Sql Server 2014 - 更新到Windows 10,无法连接到本地服务器

最近我将Windows从8更新到10,突然我的SQL Server 2014停止工作.当我打开Management Studio并尝试连接到服务器(本地)时,我收到以下错误:

获得消息

你们中间有没有类似的问题?在更新Windows之前,一切都运行得很好.

sql-server sql-server-2014 server

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