小编Mos*_*han的帖子

CTE 表达式中的 TSQL-ORDER BY 子句?

我们可以ORDER BY在 CTE 表达式中使用子句吗?

;with y as
(
     select 
         txn_Date_Time, txn_time, card_No, batch_No, terminal_ID
     from 
         C1_Transaction_Information
     where 
         txn_Date_Time = '2017-10-31'
     order by 
         card_No
)
select * from y;
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息 1033,级别 15,状态 1,第 14 行
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。

消息 102,级别 15,状态 1,第 25 行
“,”附近的语法不正确。

sql t-sql sql-server stored-procedures

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

以精度和比例理解 MONEY() 数据类型

我正在此链接上查看一些示例考试问题:

http://www.elearningexams.com/70-461-notes/page/2

并遇到了下面的问题 1。

Which of the following datatypes has a fixed precision and a scale of six digits?

A. Double

B. Money

C. Int

D. Numeric

E. SmallInt

F. VarInt

G. Float

Answer is B. Money
Run Code Online (Sandbox Code Playgroud)

我不明白 Money() 如何具有固定的精度和六位数的比例。我浏览了这个 MSDN 文档但不明白:https : //docs.microsoft.com/en-us/sql/t-sql/data-types/money-and-smallmoney-transact-sql

有人可以用一些例子解释一下,以及如何在 MONEY() 中测量精度和规模。谢谢。

t-sql sql-server ssms sql-server-2008

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

SQL Server ISNUMERIC()澄清

我有一个表格X,上面有一个accountNo列表.该字段(accoutNo)是nvarchar(8).现在问题是我们有时会在这个字段中获得字符,我想将它转换为bigint.

对不起,我不能在这里用表格格式.

我能够检查accountNo是否是数字值:

select x.accountNo from x where ISNUMERIC(x.accountNo)=1
Run Code Online (Sandbox Code Playgroud)

但是当我尝试仅转换值时,如果accountNo是数字,我仍然不能,我很困惑:

select x.accountNo, convert(bigint,x.accountNo) from x where ISNUMERIC(x.accountNo)=1
Run Code Online (Sandbox Code Playgroud)

我收到的具体错误:

消息8114,级别16,状态5,行1错误将数据类型nvarchar转换为bigint.

样本数据

accountNo  A0001001  A0001002  A0001003  /0005856  !0005046  ~0005872     A.005698 A/005623 A./00578 ./214536
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server ssms

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

tsql sql具有相同名称的多个临时表

我正在使用RDL文件和存储过程来制作报告。RDL文件名是test.rdl,我有四个(4)存储过程连接到此test.rdl文件。因此该文件将具有四个数据集。

报告文件名:

test.rdl

存储过程名称:

  • sp_test_1
  • sp_test_2
  • sp_test_3
  • sp_test_4

这些存储过程中的每一个都有具有相同名称(#temp)的临时表。

create table #temp(
ID int,
Name varchar(max),
Location varchar(max)
)

insert into #temp

select * from anothertable where date between '20171001' and '20171031'
Run Code Online (Sandbox Code Playgroud)

一些额外的查询以获得所需的结果,然后最终删除临时表。

select . . . . . . . . . .

drop table #temp
Run Code Online (Sandbox Code Playgroud)

因此,这四个存储过程都具有使用一个名称(#temp)的临时表。

所以我的问题是,当运行RDL测试文件并且一次调用所有四个(4)存储过程时,此方法是否可以正常工作?我关心的是#temp表,所有四个存储过程在运行结束时都有drop table #temp。这会否在运行时影响临时表的填充,因为其中一个存储过程可能在另一个表正在运行时以drop table完成,从而导致查询取消或结果不完整?

能不能请解释一下。我希望这是一个有效的问题。

t-sql sql-server stored-procedures reporting-services sql-server-2012

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