>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)
为什么会给出不同的结果?我想对此进行详细解释.
如何订购数据然后在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.
怎么解决这个?
我有这个伟大的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)
一些想法?
update dbo.tblMessages
set messageFlags = (messageFlags + 1)
where messageId = @messageId
Run Code Online (Sandbox Code Playgroud)
这就是我的proc中的更新。我希望能够在更新后删除该记录,如果更新后该记录messageFlags变为'10'。
我该怎么做?
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检查,我希望我可以消除这种检查,我只关心日期,而不是时间
我想深究这一点,因为这让我感到困惑.任何人都可以解释我何时应该在我的脚本中使用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语句是批处理中的第一个.怎么抱怨未提交的交易.
任何帮助将非常感谢!
在SqlServer中,我们有1个表 - 产品.它的一些记录包含双字节字符(如中文)和单字节字符(如英语).问题是如何查询包含双字节字符的记录.非常感谢你.
如何让这批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 Server 2005数据库中存储英语,法语,德语,意大利语和西班牙语,以便与.NET应用程序一起使用.我可以逃避不使用Unicode吗?这些语言会有问题吗?
我有一个程序,用户需要使用用户名和密码登录.我正在检查sys.sysloginsmaster db中的表名.但是对于密码,我收到一个字符串,其中包含(可能)编码字符(1 ????????????).现在我该怎么做才能解码该字符串并获取密码以便与输入该字符串进行比较?
sql ×6
sql-server ×6
t-sql ×3
.net ×1
between ×1
max ×1
oracle ×1
plsql ×1
pyodbc ×1
python ×1
rownum ×1
security ×1
sql-order-by ×1
transactions ×1
unicode ×1