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'附近的语法不正确.
更换THROW用PRINT @ErrorMessage作品.
@ErrorMessage用文字字符串替换变量有效.
然而,根据文档,THROW应该能够采用变量.不知道该怎么做.
我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) 在开发过程中遇到了相当奇怪的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
我从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
我有一个数据仓库数据库,我遇到了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的基数估算结果错误?
这个触发器有问题.我希望它只将所请求的信息更新到有问题的行(我刚刚更新的那个)而不是整个表.
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 Server 2014,想知道如何检查我的活动交易?
在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
使用内联函数时,我得到奇怪的结果.这是代码:
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) 最近我将Windows从8更新到10,突然我的SQL Server 2014停止工作.当我打开Management Studio并尝试连接到服务器(本地)时,我收到以下错误:
你们中间有没有类似的问题?在更新Windows之前,一切都运行得很好.
sql-server-2014 ×10
sql-server ×9
sql ×4
t-sql ×4
apply ×1
c# ×1
outer-apply ×1
performance ×1
server ×1