标签: sql-server-2012

SQL Server - 链接服务器 - 将 OPENROWSET 与 Windows 集成安全性结合使用

我看过很多关于使用集成安全性(Windows 身份验证)的 OPENROWSET 的文章,但我无法让它为我工作。

使用 SQL Server 身份验证工作正常:

 select *
 FROM
 OPENROWSET('SQLOLEDB',
 'myserver';'monitor';'#J4g4nn4th4#',
 'SELECT GETDATE() AS [RADHE]')
Run Code Online (Sandbox Code Playgroud)

但我尝试使用 Windows 身份验证运行相同的查询,但它不起作用:

select *
 FROM
 OPENROWSET('SQLOLEDB',
'myserver';'Integrated Security=SSPI',
 'SELECT GETDATE() AS [RADHE]')
Run Code Online (Sandbox Code Playgroud)

有人可以发布一个有效的示例吗?

这是一篇描述 OPENROWSET 用法的好文章。

使用 OPENROWSET 的工作脚本示例 - 请阅读评论

 ----------------------------------------------------------------
 -- this works - linked server REPLON1
 ----------------------------------------------------------------

select *
 FROM
 OPENROWSET('SQLOLEDB',
'Server=REPLON1;Trusted_Connection=yes;',
 'SELECT GETDATE() AS [RADHE]')

 select *
 FROM
 OPENROWSET('SQLOLEDB',
'Server=REPLON1;Trusted_Connection=yes;',
 'SET FMTONLY OFF select * from sys.dm_exec_requests')


 SELECT a.*
FROM OPENROWSET('SQLOLEDB', 'server=replon1;Trusted_Connection=yes;', 'SET
FMTONLY OFF select * …
Run Code Online (Sandbox Code Playgroud)

security sql-server linked-server sql-server-2012 openrowset

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

将链接服务器从 SQL Server 11.0.5058 添加到 SQL Server 10.50.4000

我尝试从 SQL Server 2012 (11.0.5058) 添加在 SQL Server 2008 R2 (10.50.4000) 上运行的链接服务器。

我不断收到此错误:

链接服务器已创建,但连接测试失败。您想保留链接服务器吗?

在此输入图像描述

有谁知道如何解决这个问题?

不同版本数据库之间搭建链接服务器有没有限制?

好的,使用 tsql 代码创建了这个链接服务器

EXEC sp_addlinkedserver
@server='xxxLinkedServer', -- here you can specify the name of the linked server
@srvproduct='',     
@provider='sqlncli', -- using SQL Server Native Client
@datasrc='xxxxxx',   -- add here your server name
@location='',
@provstr='',
@catalog='smpro5'  -- add here your database name as initial catalog (you cannot connect to the master database)
-- Add credentials and options to this linked server
EXEC sp_addlinkedsrvlogin
@rmtsrvname = …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 linked-server sql-server-2012

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

SQL Server - 链接服务器错误 - 无法连接到服务器 XYZ,因为

正在使用的服务器:SQL Server 2012 SP3
我刚刚收到一个奇怪的错误(很奇怪,因为它之前工作过)

could not connect to server LNK_SRV because sa is not defined as a remote login
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 不知道为什么我们会收到错误。

sys.servers 说 LNK_SRV 的 is_linked = 0 - 不知道为什么。返回结果如下

select top 10 * from LNK_SRV.DBName.dbo.TblName
Run Code Online (Sandbox Code Playgroud)

但手续却失败了

exec LNK_SRV.DBName.dbo.ProcName
Run Code Online (Sandbox Code Playgroud)

在我们删除链接服务器并重新添加它之前,它工作正常。
此外,LNK_SRV 也用于复制。

注意:我知道 sa 很糟糕。很快就会得到处理。

linked-server sql-server-2012 transactional-replication

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

如何识别默认邮件配置

在 SQL Server 中,我们可以设置多个电子邮件配置,其中只有一些设置为默认值。

我尝试使用以下查询来获取帐户列表:

select *
from msdb.dbo.sysmail_profile p 
    join msdb.dbo.sysmail_profileaccount pa on p.profile_id = pa.profile_id 
    join msdb.dbo.sysmail_account a on pa.account_id = a.account_id 
    join msdb.dbo.sysmail_server s on a.account_id = s.account_id
Run Code Online (Sandbox Code Playgroud)

有什么方法可以识别默认邮件配置文件吗?

sql-server sql-server-2012 database-mail

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

sys.database_files 和 SQL Server Management Studio 中的数据库属性对话框之间的可用空间不同

我现在看着这个几分钟,找不到提到这个的线程。

我想从 SQL Server 上的数据库查询当前使用的空间和可用空间。当我在 SQL Server Management Studio 中打开数据库上的属性对话框时,我查询的数字应该与我看到的数字相匹配,如下所示:

示例数据库属性显示大小:17689,00MB 和可用空间:16795,77MB

所以我浏览了一下,发现我可以sys.database_files像这样查询(从这里):

SELECT
        DB_NAME() AS DbName, 
        name AS FileName, 
        size/128.0 AS CurrentSizeMB, 
        size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB 
    FROM sys.database_files; 
Run Code Online (Sandbox Code Playgroud)

这让我得到这个结果:

DbName 文件名 CurrentSizeMB FreeSpaceMB
数据库名称 数据库名称 17338.000000 16795.312500
数据库名 数据库名_日志 351.000000 331.234375

试图从上一个对话框中识别我的号码:

  • 好的,添加17338351让我达到17689对话框列出的大小
  • 但是对于可用空间,我找不到它,16795.312500几乎减少了半 MB

我该怎么做才能获得与属性对话框显示的可用空间完全相同的数字?

我是否以错误的方式使用了查询/公式,或者由于某些舍入(将页面/范围转换为 MB...),此时根本不可能?

sql-server ssms sql-server-2012

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

我怎样才能摆脱这个 Lazy Spool,或者以其他方式提高这个查询的性能?

这是计划:https : //www.brentozar.com/pastetheplan/?id=rkM8d7ONS

我最感兴趣的是如何摆脱懒惰的线轴?

这是查询:

SELECT DISTINCT 
        SM.Security_ID 'Security_ID',  
        Leg.Leg_Type 'Leg_Type', 
        Leg.Leg_Side 'Leg_Side',
        Ct.Security_Type AS 'Swap_Type',
        Leg.CDX_Indicator AS 'CDS_CDX_Flag',
        SM.Currency AS 'Notional_Currency',
        Ct.Cross_Currency_Flag AS 'Cross_Currency_Flag',
        Ct.Custom_Overrides AS 'Special_Instructions',
        Leg.Protection_Indicator AS 'Buy_Sell_Protection',
        Leg.Commission_Direction AS 'Commission_Direction',
        Leg.Dividend_Payment_Indicator AS 'Undl_Asset_Dividend_Flag',
        SM.Issue_Date AS 'Effective_Date',
        SM.Maturity_Date AS 'Maturity_Date',
        Leg.Settlement_Frequency 'Settlement_Frequency',
        Leg.Reset_Frequency 'Reset_Frequency',
        Leg.Roll_Day AS 'Roll_Day',
        Leg.Reset_Business_Day_Convention AS 'Reset_Business_Day_Convn',
        Leg.Settlement_Business_Day_Convention AS 'Settlement_Business_Day_Convn',
        Leg.First_Payment_Date AS 'First_Period_End_Date',
        Leg.Day_Count AS 'Day_Count_Basis',
        Leg.Interest_Rate AS 'Interest_Rate',
        Leg.Spread AS 'Spread',
        Leg.CDX_Attachment AS 'CDX_Attachment',  
        Leg.CDX_Detachment AS 'CDX_Detachment',  
        Leg.Factor AS 'Factor',
        Leg.Commission AS …
Run Code Online (Sandbox Code Playgroud)

sql-server execution-plan sql-server-2012

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

使用 ADO.NET 增加 Sql 服务器睡眠状态?

我们有一个实时的 ASP.Net 应用程序,它被大约 1000 个并发用户使用。在这个应用程序中,我们使用了连接池。在 web.config 中定义了 2 个不同名称的连接字符串,但我们正在调用相同的数据库。

<add key="connection1" value="server=1.1.1.1;USER ID=**;pwd=**;database=test;Max Pool Size=500;Min Pool Size=50;Connection Timeout = 300; Pooling='true'" />

<add key="connection2" value="server=1.1.1.1;USER ID=**;pwd=**;database=test;Max Pool Size=500;Min Pool Size=50;Connection Timeout = 300; Pooling='true'"/>
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我们正在打开一个关闭连接的每个地方,如下所示

try{
    if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }
}
catch(Exception ex)
{
}
finally{connection.close()}
Run Code Online (Sandbox Code Playgroud)

现在的问题是当我使用 sp_who2 检查数据库时,我看到大约 1000 或更多的睡眠会话,并且每个记录程序名称是“.Net sql server Provider”。我浏览了 MSDN,发现如果我们使用连接池,那么连接会保持打开状态直到 4-8 分钟。所以我现在有点困惑,如果我只使用 2 个连接字符串和连接池,那么为什么我们看到这么多休眠连接,我想它应该只有 2 个?有人可以在这种情况下帮助我并提出正确的建议吗?我们怎样才能最大限度地减少睡眠时间。也不确定是应用程序池(IIS 服务器)错误还是应用程序错误?请帮忙。

谢谢,

sql-server ado.net sql-server-2012 connection-pooling

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

需要帮助来了解调优慢速 SQL 服务器查询

对于我们的一个数据库,如下所示的查询非常慢。

由于安全原因,我无法分享实际的查询或计划,但只是想知道如何编写查询如下

SELECT [Id]
      ,[AboutMe]
      ,[Age]
      ,[CreationDate]
      ,[DisplayName]
      ,[DownVotes]
      ,[EmailHash]
      ,[LastAccessDate]
      ,[Location]
      ,[Reputation]
      ,[UpVotes]
      ,[Views]
      ,[WebsiteUrl]
      ,[AccountId]
  FROM [StackOverflow2010].[dbo].[Users]
  WHERE DisplayName IN (

 SELECT DisplayName from dbo.Users
 WHERE CAST(LastAccessDate AS DATE) = CAST ('20160814' AS DATE)
 AND CreationDate>= DATEADD (DAY, -30,LastAccessDate)
 AND CreationDate<= LastAccessDate)
Run Code Online (Sandbox Code Playgroud)

在 stackoverflow 数据库中,这不会返回任何行,但对于我们现有的 6 TBS 数据库,它真的很慢。

CreationDateLastAccessdate列都是日期时间 (10)

DisplayName是VARCHAR(50)

如果以上可以重写,请建议我如何提高性能

sql-server sql-server-2012 query-performance performance-tuning

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

为什么 SSMS 的行数计算经常出错?

我试图让一些代码运行经过时间测试的“执行,谷歌搜索红色文本,做SO所说的,重复”方法,我注意到错误处理程序的行计数通常是错误的。

例如,在这个存储过程中它是正确的:

    create procedure why_it_be_like_dis

    as

    select * from INFORMATION_SCHEMA.tables where column_name like '%bananna%'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但在现实世界的例子中,它将关闭:

在此处输入图片说明

问题:为什么行号总是不匹配?

错误信息:

消息 207,级别 16,状态 1,过程删除 from_and_load,第 21 行 [批处理开始第 7 行] 列名“SRGY_STM_LKP_ID”无效。

完整版:

    USE [SRGRY_DMART_ETL]
    GO
    /****** Object:  StoredProcedure [dbo].[delete from_and_load]    Script Date: 7/22/2020 8:20:28 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER PROCEDURE [dbo].[delete from_and_load]
    AS
    BEGIN

    DECLARE @btch_start DATETIME
        ,@btch_end DATETIME

    SELECT @btch_start = getdate()
    EXEC [dbo].[snapshot_constraints]
    EXEC dbo.drop_all_constraints
    delete from [dbo].[CASE_2_PAT_CASE_BRG];
    delete from  [dbo].[CASE_2_PVDR_BRG];
    delete from [dbo].[CASE_2_DGNS_BRG]; …
Run Code Online (Sandbox Code Playgroud)

sql-server-2012

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

SSMS 处理换行符的方式不一致

可能更多的是 SQL Management Studio 问题而不是 SQL 本身,但是当我运行以下简单查询时:

SELECT results = 'Foo' + CHAR(13) + CHAR(10) + 'Bar'
Run Code Online (Sandbox Code Playgroud)

根据我选择“结果到网格”还是“结果到文本”,我似乎会得到不同的结果。

将 SSMS 设置为“结果到文本”后,我得到(如预期):

results
--------
Foo
Bar

(1 row affected)
Run Code Online (Sandbox Code Playgroud)

但是将 SSMS 设置为“结果到网格”,然后复制并粘贴结果,我得到

Foo  Bar
Run Code Online (Sandbox Code Playgroud)

sql-server ssms sql-server-2012

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