Why is EXEC required to execute procedures? [closed] - sql-server

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Why is EXEC or EXECUTE required when calling a stored procedure? Both Oracle and SQL Server have cases when EXEC is required and when it's not required or necessary. What's the point of ever requiring it?

This makes the syntax more distinct and unambiguous. Since statement separators (semicolons) are not mandatory in T-SQL, it makes it clearer to find where statements begin.
On a sidenote, I recomment to strictly use semicolons after each statement because there are ambiguity problems (especially often encountered when using the WITH keyword, which can either start the definitions of common table expressions before DML statements, or be used at the end of DML statement for defining hints; without a semicolon, the parser cannot know which one to pick really).

It's undoubtedly a parser problem/challenge. If a call to a stored proc can be anywhere in a body of text, you'll kill yourself trying to write a universal "thing" that can understand it all. Instead, the designers publish the BNF for the language and you, the user, are responsible for understanding how to speak it.
Or, in the SQL Server world always use EXEC/EXECUTE and never have to worry about the finer points of when it is needed. As noted by #alex, that doesn't hold true for Oracle.

In Oracle, EXECUTE (or EXEC) is used in SQL*Plus as a shortcut for an anonymous PL/SQL block. EXECUTE will not work in PL/SQL. You could do either:
SQL> execute my_proc;
Or, as a fully specified anonymous block:
SQL> DECLARE
BEGIN
my_proc;
END;
/
It's entirely client syntax in Oracle.

Related

What is the difference between a row, record and tuple? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am studying in a database development course at the moment and I am having trouble getting my head this!
My course notes describe a tuple as:
A tuple is a row of a relation
From what I have understood since working with MySQL you search for row(s). Or when browsing through a database you are looking through rows in a table.
And from what I understood a record is information within a row.
Is there any distinct differences between the three?
I know someone has posted something similar but I couldn't really understand his answer.
Thanks for all help in advnce!
Peter
In your context they are different words to mean exactly the same thing.
A tuple, in general, means an ordered list with possibly repeated elements (as contrasted to a set, which has all unique elements and is not ordered)
They are the same.
A row—also called a record or tuple—represents a single, implicitly structured data item in a table.
They mean exactly same thing: tuple, rows or records.
Your SELECT query will generate results that may contain 0 or more rows/records or tuples.
A SELECT query can span 1 or more tables

Best Practices on naming Views [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have for example a table name of Cars_Import
I need a view that will be called that grabs the data to be imported and that view is run and does the work to import the data into the Cars_Import table.
My problem is, I can't name the view the same, I have to differentiate it because I guess SQL server look at same name objects as a conflict no matter what type of object it is.
So for best practices in naming conventions that are generally accepted, when you have 2 objects that really relate to each other, and I know it's not good practice to append stuff like tbl, vw for view, etc. in the name, what would you suggest here as the view name related to Cars_Import?
I wouldn't want the view to have it for example switched around which would work but just seems messy to me such as Import_Cars
So what's the advice here on naming the table and its related view which will grab all data from that table that we need? There is no business logic, it's just grabbing the data and we're gonna import it into a data warehouse, all the data as is initially.
Views are actually the one place where I don't mind a prefix or suffix that describes what it is. Unlike when comparing a table or a stored procedure, which are quite obvious because they are used differently, tables and views are largely interchangeable. So I find that this differentiation can be helpful when reverse engineering or troubleshooting code (and I'm talking about when you come across the name in a piece of code, not browsing the objects through Object Explorer, which makes things much more obvious by definition).
Your naming scheme is up to you, and you're largely not going to get a "correct" answer here, other than that you should apply your convention consistently and unilaterally, and do what you can to make sure your entire time buys into it and follows it as well. But I will say that I wouldn't balk at something like this:
Table: dbo.Cars_Import
View: dbo.View_Cars_Import
But to me, this seems to imply that the view may just be something that sits over the table (say prettifying output, adding or hiding columns, etc.), not something that feeds the table. So I kind of agree with #HABO that maybe there is a better way to name this view that describes what it does.

Please help me to find answer for some SQL questions [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have few questions which i have been asked in interview:
Performance difference between delete and truncate?
Delete duplicate data from a table which is not having any id column and should not use CTE.
Why we are able to delete data using CTE?
DELETE logs each individual deletion, whereas TRUNCATE is a bulk logged operation, hence is faster.
You could SELECT DISTINCT data into a temp table, TRUNCATE the first then reinsert.
Not a scooby...
here are some pointers to solve your issues:
Since TRUNCATE doesn't actually delete data, but deallocate the data by removing pointers to the indexes it will be much faster than DELETE, when you use DELETE everything is stored in the transaction log row by row, hence it's much slower.
http://www.codeproject.com/Tips/159881/How-to-remove-duplicate-rows-in-SQL-Server-2008-wh
http://blog.sqlauthority.com/2009/06/23/sql-server-2005-2008-delete-duplicate-rows/

Normalizing too much vs too little, examples? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I don't usually design databases, so I'm having some doubts about how to normalize (or not) a table for registering users. The fields I'm having doubts are:
locationTown: I plan to normalize for countries, and have a separate table for it, but should I do the same for towns? I guess users would type this in when registering, and not choosing from a dropdown. Can one normalize when the input may be coming from users?
maritalStatus: I would have a choice of about 5 or so different statuses.
Also, does anyone know of a good place to find real world database schema/normalizing examples?
Thanks
locationTown - just store it directly inside user table. Otherwise you will have to search for existing town, taking typos and code case into account. Also some people use non-standard characters and languages (Kraków vs. Krakow vs. Cracow, see also: romanization). If you really want to have a table with towns, at least provide auto-complete box so the users are more likely choosing existing town. Otherwise prepare for lots of duplicates or almost duplicates.
maritalStatus - this in the other hand should be in a separate table. Or more accurately: use single character or a number to represent marital status. An extra table mapping this to human-readable form is just for convenience (remember about i18n) and foreign key constraint makes sure incorrect status aren't used.
I wouldn't worry about it too much - database normalization (3NF, et al) has been over-emphasized in academia and isn't overly practical in industry. In addition, we would need to see your whole schema in order to judge where these implementations are appropriate. Focus on indexing commonly-used columns before you worry about normalization.
You might want to take a look at this SO question before you dive in any further.

Join slows down sql [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 12 years ago.
We have a discussion over SQL Server 2008 and join. One half says the more joins the slower you sql runs. The other half says ihat it does not matter because SQL server takes care of business so you wil not notice any performance loss. What is true?
Instead of asking the question the way you have, consider instead:
Can I get the data I want without the join?
No => You need the join, end of discussion.
It is also a matter of degree. It is impossible for a join not to add additional processing. Even if the Query Optimizer takes it out (e.g. left join with nothing used from the join) - it still costs CPU cycles to parse it.
Now if the question is about comparing joins to another technique, such as one special case of LEFT JOIN + IS NULL vs NOT EXISTS for a record in X not in Y scenario, then let's discuss specifics - table sizes (X vs Y), indexes etc.
It will slow it down: the more complicated a query, the more work the database server has to do to execute it.
But about that "performance loss": over what? Is there another way to get at the same data? If so, then you can profile the various options against each other to see which is fastest.

Resources