我正在将代码从 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)
但我收到错误。
我需要在我的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表?
我有一个橄榄球数据库+球员表。在玩家表中,我有表现,我想将表现表示为
我不知道该列应该是什么数据类型。做到这一点的公式或函数是什么?
请帮忙
我有下表:
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 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,但它无法正常工作.
我有一张这样的桌子:
进入量| 什么电脑有访问| 什么日期和时间
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
这是我的代码:
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.
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)
我试图包含 …
如果我做,
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 新手,请帮助我。
我正在尝试向 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 server数据库的c#winforms应用程序.
我们使用RadGridView(选项卡式)控件来显示存储在sql server中的大约10个不同视图的数据.
我们为每个视图运行一个线程(Tab),抓取数据并填充每个radgridview选项卡.
我们的问题是加载时间过长.
我们如何加快数据检索?
这是控件的样子:
当我将数据存储在变量/列中时,我在数据准确性方面存在问题.
请考虑以下示例
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
不正确)
当我将值存储在变量中以及如何修复它时,任何人都能说出近似的原因是什么?
使用脚本 (但不使用数据导入/导出,不使用备份还原,不使用数据库副本) 如何将完整的表(模式和数据)从同一服务器上的一个数据库复制到同一服务器上的另一个数据库?
我已经尝试过做我上面用的斜体了; 但是,由于用户权限等原因,我无法使用这些方法.
也许这会奏效:
SELECT *
INTO newdb.dbo.newtable
FROM olddb.dbo.oldtable
Run Code Online (Sandbox Code Playgroud)
但我想将它应用于每个表(大约100个表).
sql-server-2012 ×13
sql ×12
sql-server ×11
t-sql ×3
.net ×1
c# ×1
database ×1
row-number ×1
sql-function ×1