Why is ROW_NUMBER() not recognized in SQL Server 2008? - sql-server

Why is ROW_NUMBER() not recognized as a function name in SQL Server 2008?
I try this
SELECT
ROW_NUMBER() AS Row, Lname
FROM MEN
GO
and I get this error:
Msg 195, Level 15, State 10, Line 1
'ROW_NUMBER' is not a recognized
function name.

You appear to be using the wrong syntax. Here is an example using the AdventureWorks database.
select
row_number() over(order by Name),
Name
from HumanResources.Department

Extending the other 2 answers...
I've tried the exact same command on SQL 2005 with 2 databases.
For both compatibility levels 80 and 90, the error is:
Msg 1035, Level 15, State 10, Line 2
Incorrect syntax near 'ROW_NUMBER', expected 'OVER'.
I can only generate this error on a SQL 2000 box:
Msg 195, Level 15, State 10, Line 2
'ROW_NUMBER' is not a recognized function name.
What does SELECT ##version say? I'd make 100% sure that you are on the version you expect...
My other thought is compat level 65 which can't be set explicitly in SQL Server 2005 and above it seems. And I don't have any legacy databases lying around to test.

Check your database compatibility; ensure that it's set to 90 or higher.
It appears there are at least 2 things that are off the mark here.
The syntax in your question is incorrect, but wouldn't be producing the unrecognized function error.
SQL 2005 and 2008 do support the ROW_NUMBER OVER() keywords/command. Perhaps are you using SQL 2008 Management Studio to connect to a SQL 2000 machine? Double check with SELECT ##Version that your DB is indeed a SQL 2008 DB.

If you're using SSMS that says SQL Sever 2008, doesn't necessarily mean that you're connect to the respective DB. Using ##version to check the version of the DB you're connected to because SQL 2005 uses : [ROW_NUMBER() OVER (ORDER BY ColName)]

Related

SQL Server Emergency mode - Syntax incorrect

I dont know whats the problem with that sql query :
ALTER DATABASE myDB SET EMERGENCY;
i got that error :
Msg 102, Niveau 15, Etat 6, Ligne 1
Incorrect syntaxt near 'EMERGENCY';
I use Microsoft SQL Server 2000 - 8.00.760 and SSMD 2016.
I dont know whats the problem
The issue is that you are using SQL Server 2000. Paul Randal mentions here
I decided to add a new feature to SQL Server 2005 called EMERGENCY-mode repair that will do steps 2 and 3 as an atomic operation.
So the syntax you are trying to do does not exist in 2000.
The "hacking system tables" he mentions is described here.
But you should be restoring from backup as first resort here.

SQL Server 2016 Stored Procedure Syntax Error

I recently restored a SQL Server 2008 database into an instance of SQL Server 2016. Most of the functionality seems to work fine, but many of my stored procedures that include updates to an application database table called SYS_USER fails with the following error:
Msg 102, Level 15, State 1, Procedure SYS_USERupdate, Line 35 [Batch Start Line 0]
Incorrect Syntax near '#errorNumber'
The database does not have a stored procedure called SYS_Userupdate and none of the procedures' code includes the term #errorNumber. I attempted to run the SQL query from one of the failing procedures directly in SQL Server Management Studio and received the same error message. Here is the SQL query that is failing:
UPDATE SYS_USER
SET SYS_USER_LGF_DT = GETDATE()
WHERE SYS_USER_ID = #SYS_USER_ID
I plugged in a valid value for the #SYS_USER_ID variable. Similar queries in related to other tables run without an issue. All of the stored procedures work on a SQL Server 2008 instance with no errors. Also, the database compatibility_level to 100, which should be acceptable for SQL Server 2016.
This happens when you're not running on a correct version of SQL Server, or if the compatibility level of the database isn't set sufficiently. So change it to 130
To check compatibility level:
select compatibility_level
from sys.databases
where name = '<database name>'
To alter compatibility level:
alter database <database-name>
set compatibility level = 130 -- SQL Server 2016
Compatibility levels list for all SQL versions: ALTER DATABASE (Transact-SQL) Compatibility Level
Reposting the answer since it was proposed in a comment to the question. The solution to the problem was that there were triggers on the affected tables that I did not know were there. Syntax errors on these triggers were causing insert and update queries on the tables to fail.
Credit to Jeroen Mostert https://stackoverflow.com/users/4137916/jeroen-mostert for helping with this!

SQL Server 2017 - Msg 156, Level 15, State 1, Line 1 Incorrect syntax near the keyword 'IF'

I exhausted 2 hours on google searching for answers, without any solutions. I need serious help with this.
DROP TABLE IF EXISTS dbo.MySqlTable
that's the only line of code on my page, when I execute it, I get
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'IF'.
Here's a screenshot:
Drop Table
I just don't get why I can't drop the table.
What's weird is that it does drop on my PC, on this school laptop, nothing.I installed SQL Server 2017 on both. VS 2013 on my PC for later, hopefully, and VS 2015 on my Laptop. But, I haven't integrated those yet.
This feature is available only on SQL Server 2016 which is compatibility level of 130. Check your db on what compatibility level is.
select name, compatibility_level from sys.databases
If it is less than 130 you can alter it to 130 (2016) or 140 (2017) as below
alter database testdb set compatibility_level = 130
I seriously hate these things sometimes.
I removed IF EXISTS from my code, and simply did the usual DROP TABLE and it worked -_-
The first time I tried to drop a table on SQL Server 2017, it failed. After an hour on the internet, I learned that I had I had to use the IF EXISTS clause, and guess what, It worked.
When I got this laptop and installed the same SQL Server 2017, I obviously tried what took me an hour to find, DROP TABLE IF EXISTS, though that failed.
Thanks everyone.
Though, why did I use different DROP statements in the same version of SQL Server 2017?
I have a feeling I'm going to encounter more problems in the future.

syntax error on SQL Server

I'm receiving this error:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '90'.
when i tried to compile this t-sql:
ALTER DATABASE SGCT SET compatibility_level = 90
Does anyone know why?
For SQL SERVER – 2005 try to use:
EXEC sp_dbcmptlevel AdventureWorks, 80;
GO
More details
Sets certain database behaviors to be compatible with the specified version of SQL Server. You are already using 2005 and 90 is to set for 2005. If you need to do a backward COMPATIBILITY
You should try this.
ALTER DATABASE SGCT
SET COMPATIBILITY_LEVEL = 80;
GO

Invalid object name sysservers

I'm using SQL Server 2008 R2. This is my query:
SELECT * FROM sysservers
It works fine when I execute it in SQL Server but when I use the query in VB.net this error comes out:
Invalid object name 'syservers'
You shouldn't be using sysservers anymore - this is a 2000 system table that is only still provided for backward compatibility reasons. You should be using sys.servers and you might want to be explicit about where to find it as well:
SELECT * FROM master.sys.servers;

Resources