标签: sql-server-2012

如何创建带有输出参数的函数?

我正在将代码从 pl/sql 重写为 tsql,并希望在 tsql 中创建一个带有输出参数的函数,如下所示

CREATE FUNCTION [CALC_EXZ].[CALC_AZ_RESIST_FULL]
(
    @i_ukz_key        NUMERIC(20),
    @c_err_message    VARCHAR(1000) OUTPUT,
    @c_recommendation VARCHAR(1000) OUTPUT
)
RETURNS NUMERIC(20,6) 
AS 

BEGIN
DECLARE @result NUMERIC(20,6)


    EXECUTE [DB_LIB].[CALC_EXZ].[CALC_AZ_RESIST_FULL]
    @i_ukz_key, 
    @c_err_message    OUTPUT, 
    @c_recommendation OUTPUT, 
    @result           OUTPUT; 

    IF @result=-1 AND @c_err_message IS NULL 
    SET @result=NULL;   

    RETURN @result
END
Run Code Online (Sandbox Code Playgroud)

但我收到错误。

t-sql sql-server sql-server-2012

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

在CTE SQL Server 2012之前创建#temp

我需要在我的CTE列表之前创建一个#temp表:s,这样我最终可以用它来执行计算.

这是我到目前为止所写的:

SELECT DISTINCT

SUM(X+Y) AS Total

INTO #Summary
FROM Table

WITH CTE_START AS
(
  SELECT DISTINCT *
  FROM TableX
)
Run Code Online (Sandbox Code Playgroud)

....

我甚至尝试将我的#Summary创建为CTE,然后在FROM之前编写INTO.这是行不通的.

我看过类似的问题:CTE和临时表

我没有找到任何有用的东西.如何在WITH CTE_START开始处理之前创建一个#temp表?

sql sql-server sql-server-2012

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

如何在 SQL Server 2012 中替换 0 和 1

我有一个橄榄球数据库+球员表。在玩家表中,我有表现,我想将表现表示为

  • 0 = 低
  • 1 = 中等
  • 2 = 高

我不知道该列应该是什么数据类型。做到这一点的公式或函数是什么?

请帮忙

sql database sql-server sql-function sql-server-2012

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

找到最年轻的学生

我有下表:

name      id     DOB                        marks
rk         2     2006-02-03 00:00:00.000    30
mk         3     2006-07-07 00:00:00.000    30
pk         4     2006-04-09 00:00:00.000    30
sk         5     2006-05-03 00:00:00.000    30
fk         6     2006-08-09 00:00:00.000    30
nk         7     2007-08-06 00:00:00.000    30

我怎样才能找到最年轻的学生?

sql sql-server sql-server-2012

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

SQL SERVER STUFF FUNCTION SCENARIO

在SQL Server中,我有一个这样的表:

Col-1    Col-2    Col-3
------------------------
A         123     25.13
A         456     67.00
A         789     81.89
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出:

Col-1      Col-2            Col-3
-----------------------------------
A         123,456,789      174.02
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2012

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

使用group by为SQL过滤日期时间

我正在尝试制作一个sql,但它无法正常工作.

我有一张这样的桌子:

进入量| 什么电脑有访问| 什么日期和时间

  11                   computer 1             2013-12-30 09:00:00
  2                    computer 2             2013-12-30 10:00:00
  30                   computer 2             2013-12-30 10:11:00
  17                   computer 3             2013-12-30 17:30:00  
  200                  computer 4             2013-12-30 07:00:00
  150                  computer 1             2013-12-30 14:00:00
  19                   computer 1             2013-12-30 06:00:00
Run Code Online (Sandbox Code Playgroud)

我想要做的是一个结果,它只向我显示:在每台计算机中,有多少是最大访问次数和时间?上面的表的结果os SQL将是这样的:

进入量| 什么电脑有访问| 什么日期和时间

  30                   computer 2              2013-12-30 10:11:00
  17                   computer 3              2013-12-30 17:30:00  
  200                  computer 4              2013-12-30 07:00:00
  150                  computer 1              2013-12-30 14:00:00
Run Code Online (Sandbox Code Playgroud)

计算机2在2013-12-30 10:00:00 ........的确切时间内最多可以进行30次访问.

问题是如何在每个结果中显示exacly日期?有人帮忙吗?

谢谢

sql sql-server sql-server-2008 greatest-n-per-group sql-server-2012

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

当我在SQL Server 2012中执行我的过程时,为什么我的错误没有开始

这是我的代码:

IF OBJECT_ID('spUpdateProductDiscount') IS NOT NULL
    DROP PROC spUpdateProductDiscount
    GO

CREATE PROC spUpdateProductDiscount
    (@ProductID INT,    @DiscountPercent INT)
AS
BEGIN
    BEGIN TRY 
        UPDATE Products
        SET DiscountPercent = @DiscountPercent
        WHERE ProductID = @ProductID
    END TRY
    BEGIN CATCH
        IF @DiscountPercent <= 0
            PRINT 'The value for this column DiscountPercent must be a positive number';
    END CATCH
END;
Run Code Online (Sandbox Code Playgroud)
EXEC spUpdateProductDiscount 1999, -15.00
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我的PRINT陈述没有踢.我把它设置为if @DiscountPercent小于或等于0所以我不明白为什么PRINT声明没有踢但是它正在改变行到DiscountPercent- 15.00.

sql sql-server sql-server-2012

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

Row_Number 函数中的 SQL Server 别名

select tmp.id, tmp.portfolio,
   ROW_NUMBER() OVER(order by tmp.id DESC) AS RowNum 
from 
  (select r.portfolio, r.id
   from research r 
   where r.created_by = 'Adam Cohen'
 ) as tmp 
WHERE RowNum BETWEEN 5 AND 10;
Run Code Online (Sandbox Code Playgroud)

我无法在 where 条件中引用 RowNum,因为它显示无效的列名“RowNum”。请帮助我使用正确的语法来获得结果。

编辑 - 更改要求

SELECT * FROM 
( 
     select id, portfolio, 
     CASE WHEN l.posted_on IS NULL 
          THEN CONVERT(VARCHAR(40),l.created_on,120) 
          ELSE CONVERT(VARCHAR(40),l.posted_on,120) 
     END AS sort_by, 
     ROW_NUMBER() OVER(order by sort_by DESC) AS RowNum 
     from research 
     where created_by = 'Adam Cohen' 
) x 
WHERE x.RowNum BETWEEN 5 AND 10 
Run Code Online (Sandbox Code Playgroud)

我试图包含 …

sql row-number sql-server-2012

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

带有选项重新编译的 CTE 不起作用

如果我做,

declare @Q varchar(10) = 'ab1';
SELECT * 
FROM   MyTable
WHERE  EXISTS(SELECT TOP 1 't' InnerTable O WHERE O.TId = P.Id)
AND (P.Name_EngLIKE @Per_Name + '%' OR P.PER_NAME_ARB LIKE @Per_Name +'%') 
Run Code Online (Sandbox Code Playgroud)

然后查询变得非常慢。如果我发表评论,EXISTS(SELECT TOP 1 't' InnerTable O WHERE O.TId = P.Id)那么它会很快,或者如果我添加,OPTION(RECOMPILE)那么它会很快。问题是我在 CTE(Common Table Expression) 中使用了这个 SQL,它不允许我把OPTION(RECOMPILE)

编辑: 这是我的 CTE,

WITH CTEPage AS
(
    SELECT  Top(@PageSize * @PageIndex)
            ROW_NUMBER() OVER (ORDER BY P.Id) AS RowNumber
    FROM    MyTable(NOLOCK) AS P
    WHERE   EXISTS(SELECT TOP 1 't' FROM OtherTable …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2012

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

无法在 SQL 中将超过 1K 的记录插入到临时表中

我是 SQL 新手,请帮助我。

我正在尝试向 SQL 临时表插入超过 1k 条记录,但出现此错误:

INSERT 语句中的行值表达式的数量超过了 1000 个行值的最大允许数量

请帮助我如何解决将记录插入临时表的问题。我需要插入 5k 条记录,请帮助我

这是我的脚本

use DatabaseName
SET NOCOUNT ON
Create Table TempRefundDetails (PolicyNumber NVARCHAR(10))

INSERT INTO @TempRefundDetails (PolicyNumber) 
VALUES 
(1),
(2),
(3)
.
.
.
.
(999),
(1000),
(1001),
(1002)
.
.
Run Code Online (Sandbox Code Playgroud)

sql sql-server-2012

-4
推荐指数
1
解决办法
144
查看次数

如何在表单中快速加载大约100万行数据?

我们有一个连接到sql server数据库的c#winforms应用程序.

我们使用RadGridView(选项卡式)控件来显示存储在sql server中的大约10个不同视图的数据.

我们为每个视图运行一个线程(Tab),抓取数据并填充每个radgridview选项卡.

我们的问题是加载时间过长.

我们如何加快数据检索?

这是控件的样子: 在此输入图像描述

.net c# sql sql-server sql-server-2012

-5
推荐指数
1
解决办法
1075
查看次数

SQL Server舍入问题

当我将数据存储在变量/列中时,我在数据准确性方面存在问题.

请考虑以下示例

DECLARE @w NUMERIC(38, 15) = 0.458441,
        @a NUMERIC(38, 15) = 10.000000,
        @p NUMERIC(38, 15) = 5.000000

select  (1+0.458441)*(1+    10.000000/100)*(1+  5.000000/100) 
Run Code Online (Sandbox Code Playgroud)

结果:( 1.68449935500000000000000000正确)

SELECT ( 1 + @w ) * ( 1 + @a / 100.0 ) * ( 1 + @p / 100.0 ) 
Run Code Online (Sandbox Code Playgroud)

结果:( 1.684499不正确)

当我将值存储在变量中以及如何修复它时,任何人都能说出近似的原因是什么?

sql sql-server rounding-error sql-server-2012

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

如何将所有表的数据和模式复制到同一服务器上的不同数据库中?

使用脚本 (但不使用数据导入/导出,不使用备份还原,不使用数据库副本) 如何将完整的表(模式和数据)从同一服务器上的一个数据库复制到同一服务器上的另一个数据库?

我已经尝试过做我上面用的斜体了; 但是,由于用户权限等原因,我无法使用这些方法.

也许这会奏效:

 SELECT *
 INTO newdb.dbo.newtable
 FROM olddb.dbo.oldtable
Run Code Online (Sandbox Code Playgroud)

但我想将它应用于每个表(大约100个表).

sql t-sql sql-server sql-server-2012

-8
推荐指数
1
解决办法
4962
查看次数