标签: sql-server-2012

SQL Server 2012 中的 FMTONLY 问题

我支持使用 CodeSmith 和 NetTiers 模板生成 C# 代码的应用程序。CodeSmith 检查数据库并使用SET FMTONLY ON设置来确定应为其生成代码的列。

不幸的是,在从 SQL Server 2005 迁移到 2012 的过程中,在某些特定情况下,这不再起作用。有一个在链接服务器上执行存储过程的存储过程,并且为该存储过程生成的代码不正确。

我已经设法将问题EXECSET FMTONLY ON. 以下(仅示例)SELECT适用于 2005 和 2012 实例:

SET FMTONLY ON
SELECT TOP(10) [MCMCU]
              ,[MCSTYL]
              ,[MCDC]
FROM [JDE].[JDE_CRP].[CRPDTA].[F0006]
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,这仅返回列标题。以下仅适用于 2005 实例:

SET FMTONLY ON
EXEC('SELECT TOP(10) [MCMCU]
                    ,[MCSTYL]
                    ,[MCDC]
      FROM [JDE_CRP].[CRPDTA].[F0006]') AT [JDE]
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)

在 2012 实例上运行时,SSMS 显示消息“命令成功完成”,但不显示列标题。

有什么我在这里想念的吗?也许是我需要更改的设置?链接服务器定义是相同的,包括用于连接的身份。是的,我知道这FMTONLY已被弃用,但我无法更改 CodeSmith 询问数据库的方式。

sql-server linked-server sql-server-2012

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

在循环中动态创建查询

我正在遍历一个表,试图创建一个动态的 sql 查询。它似乎工作正常,除非我连接结果以制作实际语句。伪代码如下

WHILE (Data is in the table)
BEGIN
SELECT TOP 1 @result = result from table

@sql = @sql + ', ' + @result

END
Run Code Online (Sandbox Code Playgroud)

如果我查看@sql每个循环,我会看到预期的结果,但是当循环完成时@sql是空的。有人可以解释为什么吗?

sql-server t-sql sql-server-2012

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

数据库邮件是否值得冒险/标准做法

我启用Database Mail XPs并在我的开发机器上测试它。我只是想知道这是否DB Mail是一个糟糕的安全选择,以及通过应用程序服务器(ColdFusion 或 PHP)发送这种消息是否更安全(或标准做法)?我将使用Database Mail数据库备份/恢复消息、错误或错误检查消息(我能想到的)。我知道启用功能总是会增加风险。

使用:

  • 在防火墙后面等。
  • 视窗 2012 r2
  • 微软 SQL Server 2012
  • Exchange 在单独的服务器上
  • 使用 Windows 身份验证
  • 启用需要安全连接

提前致谢。

security sql-server sql-server-2012 database-mail

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

如何在不重新启动服务的情况下减少 SQL Server 2012 的 RAM 使用量

有没有办法在不重新启动 SQL Server 2012 的情况下减少它的 RAM 使用量?

设置 MAX 内存使用率不是一个选项,因为它会迅速增加到我设置的限制,然后基于此 SQL Server 实例的应用程序正在运行,没有响​​应或工作非常缓慢。

memory sql-server-2012

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

尝试使用 SMO 传输对象将数据库从一个实例传输到另一个实例

架构表归 dbo 和另一个架构名称所有。下面的代码没有在任何表格上移动。我还需要添加其他东西才能传输表格吗?没有需要移动的存储过程或视图。

$xfr1 = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Transfer($prodServerDB.Databases[$devDatabase])

#Set this objects properties
$xfr1.DestinationLoginSecure           = $false
$xfr1.DestinationServer                = $devServer
$xfr1.DestinationLogin                 = $devUsername
$xfr1.DestinationPassword              = $devPassword
$xfr1.DestinationDatabase              = $devDatabase
$xfr1.BatchSize                        = 10485760
$xfr1.CopyData                         = $true
$xfr1.CopyAllTables                    = $true
$xfr1.CopyAllObjects                   = $true
$xfr1.CopyAllDatabaseTriggers          = $true
$xfr1.CopyAllLogins                    = $false
$xfr1.CopyAllRoles                     = $false
$xfr1.CopyAllUsers                     = $false
$xfr1.CopySchema                       = $true
$xfr1.PreserveDbo                      = $true
$xfr1.PreserveLogins                   = $true

$xfr1.Options.AllowSystemObjects       = $false
$xfr1.Options.ContinueScriptingOnError = $true
$xfr1.Options.Indexes                  = $true
$xfr1.Options.IncludeIfNotExists       = $true
$xfr1.Options.DriAll                   = $true
$xfr1.Options.SchemaQualify            = $true
$xfr1.Options.ScriptSchema             = …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell sql-server-2012 smo amazon-rds

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

sql server 数据仓库中维度的排序

构建并部署了一个具有日期维度的简单多维数据集。该维度具有诸如月份中的某天之类的内容。我该如何排序?它总是在报告中显示为 1, 10, 11, 12, ... 19, 2, 20, 21

设计。

DimDate(3 列)

  • 日期 ID 键
  • 日期 DATETIME {值 1/1/2000、1/2/2000 等}
  • DAY VARCHAR(2) {值 1,2,3,4,5,6,7,ect}

FactAppointment(一栏)

  • DateID {值键变暗}

我将 dims 排序列设置为键或日期,但两者都不起作用。

当连接 excel 或任何其他双工具并且日期 dim 是一列时,一个简单的计数是日期未排序的值。

图片:列标题未正确排序。1, 10,11,12,...,19,2,20

在此处输入图片说明

data-warehouse ssas sql-server-2012 dimensional-modeling

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

在sql中将日期平均值转换为日期时转换失败

我已经从日期中取平均日期并试图获得平均日期的结果,但它引发了如下错误: Conversion failed when converting date and/or time from character string.

sql查询执行为:

select 
CONVERT
(
    DATE,
    LEFT(
          convert(
                  varchar(10),
                  AVG(
                        convert(
                                 int, 
                                 convert(
                                           varchar(10), 
                                           OnMarkDate, 
                                           112
                                         )
                                 )
                       )
                  ),8
          )
)
from @tbl_XMLResult
Run Code Online (Sandbox Code Playgroud)

列值如下:

   '2001-10-11',
   '2001-10-03',
   '2001-09-24',
   '2000-05-31',
   '2001-10-15',
   '2008-01-01'
Run Code Online (Sandbox Code Playgroud)

数据类型为日期。

sql-server sql-server-2012 date

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

使用游标改进基于 SET 的方法的查询

我仍然是查询优化的新手,我有一个存储过程,它使用游标遍历表中的每一行,并执行以下操作:

  1. 计算每行之间的时间差
  2. 计算每行之间的距离
  3. 如果距离 < 5 AND TimeDifference > 3 分钟,则添加到 TEMP 表

我尝试将此 Cursor 转换为 WHILE 循环,但性能下降。所以我需要帮助将其转换为SET BASED方法而不是Procedural Based方法

所以 Cursor 执行这个逻辑:

-- READ Current Row into Cursor Variables
FETCH NEXT FROM crAssetIgnitionOnOff INTO
              @current_iVehicleMonitoringID
            , @current_iAssetID
            , @current_dtUTCDateTime
            , @current_sptGeoLocationPoint
            , @current_fLatitude
            , @current_fLongitude
            , @current_fAngle
            , @current_fSpeedKPH 
            , @current_sIgnitionStatus
            , @current_eEventCode
            , @current_sEventCode

IF(@current_iAssetID = @prev_iAssetID)
    BEGIN

        ---- Calculate Time Difference from previous Point
    DECLARE @diffInSeconds INT
        SET @diffInSeconds = DATEDIFF(SECOND, @prev_dtUTCDateTime, @current_dtUTCDateTime) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server optimization cursors sql-server-2012 query-performance

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

在 WHERE 子句中引用 SELECT 子查询值

完整查询

SET @vSelect = 
    '
    SELECT                       
        T1.BranchShortName AS BranchShortName,
        (
            SELECT TT1.EmployeeName
            FROM [dbo].[Tb_OPL_Employee] AS TT1
            JOIN [dbo].[Tb_MKT_SKD] AS TT2
                ON TT2.IdTb_OPL_Branch = TT1.IdTb_OPL_Branch
            JOIN [dbo].[Tb_SYS_Approval] AS TT3
                ON TT3.TaskId = TT2.TaskId
            WHERE
                TT3.IdTb_OPL_JobTitles = TT1.IdTb_OPL_JobTitles
                AND TT3.IdTb_OPL_JobTitles = 
                (
                    SELECT MAX(TTT3.IdTb_OPL_JobTitles) 
                    FROM [dbo].[Tb_SYS_Approval] AS TTT3 
                    WHERE 
                        TTT3.IsPassed = 1 
                        AND TTT3.ApprovalLevelCode = ''Approve'' 
                        AND TTT3.TaskId =TT2.TaskId
                )
                AND TT3.IdTb_OPL_Branch = TT1.IdTb_OPL_Branch
                AND TT2.IdTb_MKT_SKD = T2.IdTb_MKT_SKD
        ) AS LastApproval,
        (
            SELECT TT1.EmployeeName 
            FROM [dbo].[Tb_OPL_Employee] AS TT1
            JOIN [dbo].[Tb_MKT_SKD] AS TT2 …
Run Code Online (Sandbox Code Playgroud)

sql-server subquery sql-server-2012 alias

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

为什么SQL函数总是返回空结果集?

下面function我写了接受xml并返回table结果。

CREATE FUNCTION FunctionTest(@ID INT,@XML_Details xml)
RETURNS @RESULT TABLE
(
    Value1 INT,
    Value2 INT
)
AS
BEGIN
    DECLARE @tbl_Xml_Result Table
    (
        Value1 INT,
        Value2 INT
    )

    INSERT INTO @RESULT(Value1,Value2)
    SELECT 
        l.v.value('Value2[1]','INT'),
        l.v.value('Value1[1]','INT')
    FROM @XML_Details.nodes('/Listings/listing')l(v)
    RETURN
END
Run Code Online (Sandbox Code Playgroud)

以下是我用来运行上面的代码,function但它总是返回Empty结果。

DECLARE @tbl_Xml_Result Table
(
        Value1 INT,
        Value2 INT
)
INSERT INTO @tbl_xml_Result
values(1,2),(2,3),(3,4),(4,5),(5,6)


DECLARE @xml_Temp xml

SET @xml_Temp = (   SELECT * 
                    FROM @tbl_xml_Result
                    FOR XML PATH('Listing'),ROOT('Listings')
                )

DELETE FROM @tbl_xml_Result
INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2012

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