小编gbn*_*gbn的帖子

为什么rownum上的sql查询都给出了不同的结果

>SELECT instmax  
FROM  
  (SELECT instmax,  
     rownum r  
  FROM  
    ( SELECT * FROM pswlinstmax ORDER BY instmax DESC NULLS LAST  
    )   
  )  
WHERE r = 2;  

INSTMAX  
-------  
1049  

>SELECT instmax  
FROM  
  (SELECT instmax,  
    rownum  
  FROM  
    (SELECT * FROM pswlinstmax ORDER BY instmax DESC  
    )  
  )  
WHERE rownum=2;  


**NO RETURNED ROW**  
Run Code Online (Sandbox Code Playgroud)

为什么会给出不同的结果?我想对此进行详细解释.

sql oracle plsql max rownum

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

SQL - 过滤后的顺序

如何订购数据然后在TSQL(SQL Server)中过滤?

我尝试过这样的事情:

SELECT [Job].*, 
    ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum 
FROM [Job] 
ORDER BY Rank 
WHERE RowNum >= @Start AND RowNum < @End
Run Code Online (Sandbox Code Playgroud)

不行.我也尝试使用子查询,抛出:

除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.

我不想使用TOP或FOR XML.

怎么解决这个?

sql t-sql sql-server sql-server-2005 sql-order-by

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

有没有办法使用pyodbc将scope_identity()插入sql server 2005

我有这个伟大的pyodbc lib.我尝试下面的代码,它应该插入一行并返回行ID但它不起作用.顺便说一句,我在服务器上使用sql server 2005,客户端是windows os

...
con = pyodbc.connect('conectionString', autocommit = True)
cur = con.execute(
                  "insert into sometable values('something');
                  select scope_identity() as id"
                  )
for id in cur:
   print id
...
Run Code Online (Sandbox Code Playgroud)

一些想法?

python sql-server pyodbc

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

使用if语句删除SQL记录

update dbo.tblMessages
set messageFlags = (messageFlags + 1)
where messageId = @messageId
Run Code Online (Sandbox Code Playgroud)

这就是我的proc中的更新。我希望能够在更新后删除该记录,如果更新后该记录messageFlags变为'10'。

我该怎么做?

t-sql

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

两个日期时间字段之间的SQL Server,无法正常工作

SQL Server 2005:

以下观点

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/01/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

截止日期为2011年3月2日至2011年3月31日.

如果我将第一个日期更改为03/00/2011

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/00/2011' And '03/31/2011')  
ORDER BY KeyedDate
Run Code Online (Sandbox Code Playgroud)

它现在提供2011年3月1日至2011年3月31日的数据

KeyedTimestamp字段是DateTime,并且有时间与这些记录相关联.2011年3月31日的所有记录都已计算在内.我知道我可以通过在第二个日期之间提供最大时间来实现这一点,所以我不是在寻找替代where子句,而是要理解为什么它忽略了第一个的记录,即使它合并了从31日开始.

它几乎就像它在3月1日23:59:59检查,我希望我可以消除这种检查,我只关心日期,而不是时间

sql-server between

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

与GO语句,未提交的事务和更改过程混淆

我想深究这一点,因为这让我感到困惑.任何人都可以解释我何时应该在我的脚本中使用GO语句?

据我所知,GO语句不是T-SQL语言的一部分,而是用于将一批语句发送到SQL服务器进行处理.

当我在查询分析器中运行以下脚本时,它似乎运行正常.然后我关闭窗口,它会显示一个警告:

"有未提交的交易.您是否希望在关闭窗口之前提交这些交易?"

BEGIN TRANSACTION;
GO 

ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

但是,如果我在ALTER语句的末尾添加一个GO就可以了(如下所示).怎么会?

BEGIN TRANSACTION;
GO



ALTER PROCEDURE [dbo].[pvd_sp_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

我想删除所有的GO,但是它抱怨alter procedure语句必须是查询批处理中的第一个语句?这只是我必须坚持的要求吗?

这看起来很奇怪,因为如果我BEGIN TRANSACTION和GO ....该语句被发送到服务器进行处理并开始一个事务.

接下来是ALTER过程,一个COMMIT TRANSACTION和一个GO(因此将这些语句发送到服务器进行处理,提交完成之前开始的事务),当我关闭窗口时它是怎么回事?当然,我已经满意alter procedure语句是批处理中的第一个.怎么抱怨未提交的交易.

任何帮助将非常感谢!

sql sql-server-2005 sql-server-2008

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

如何查询记录包含SQL Server 2008中的双字节字符

在SqlServer中,我们有1个表 - 产品.它的一些记录包含双字节字符(如中文)和单字节字符(如英语).问题是如何查询包含双字节字符的记录.非常感谢你.

sql sql-server-2008

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

SQL Server批处理错误处理问题

如何让这批SQL最终到达RollBack Transaction部分?SQL只是停止在坏代码行上停止脚本执行.我知道我可以使用try/catch构造但是我更感兴趣的是在SQL添加try/catch之前这是如何处理的.

BEGIN TRAN

CREATE TABLE TempTable (c1 INT NULL)

INSERT INTO TempTable (c1) SELECT 1

INSERT INTO TempTable (c1) SELECT 'ABS'

IF (@@ERROR = 0) 
BEGIN
    PRINT 'no error'
    COMMIT TRAN
END
    ELSE
BEGIN
    PRINT 'error' -- Why does it never get here???????
    ROLLBACK TRAN
END
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server error-handling transactions

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

Sql Server中的数据应该使用Unicode吗?

我想在Sql Server 2005数据库中存储英语,法语,德语,意大利语和西班牙语,以便与.NET应用程序一起使用.我可以逃避不使用Unicode吗?这些语言会有问题吗?

.net sql sql-server unicode database-design

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

如何解码sys.syslogins表中的密码

我有一个程序,用户需要使用用户名和密码登录.我正在检查sys.sysloginsmaster db中的表名.但是对于密码,我收到一个字符串,其中包含(可能)编码字符(1 ????????????).现在我该怎么做才能解码该字符串并获取密码以便与输入该字符串进行比较?

sql-server security sql-server-2005 sql-server-2008

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