|
It works now. Some 'Rob Farley' from microsoft.public.sqlserver.programming group got the idea to put everything in a .bat file and that helped!
Thanks to Rob Farley.
phi
phimix.com
|
|
|
|
|
I want to do a project in Sql Server. Iam new to Sql server and actually i dont know Oracle also.But The Ray of Hope is I know the Database concepts.
1.Is it Oracle Really necessary to learn Sql Server ?
2.What are the books I need to read for this ?
krishna
|
|
|
|
|
Krishnatv wrote: 1.Is it Oracle Really necessary to learn Sql Server ?
No. Oracle is just another database system - It has nothing to do with SQL Server.
Krishnatv wrote: 2.What are the books I need to read for this ?
There are many books and I couldn't really recommend one because all the books I have are reference books rather than teaching books. Also, everyone learns differently: Go to your local bookshop and see what they have, flick through the pages and see if it is the type of thing you would feel comfortable with.
"On two occasions, I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able to rightly apprehend the kind of confusion of ideas that could provoke such a question."
--Charles Babbage (1791-1871)
My: Website | Blog
|
|
|
|
|
|
Hi
I have a report for printing order delivery labels. Each order can have multiple delivery addresses, so this is a nested report with the order report running first and then the delivery address report running as a sub-report.
The problem is that I want to set the labels so that up to 4 different delivery addresses for the same order could be printed on a single page.
I am not sure how to set the layout of the sub report, currently it prints each delivery address 4 times on a page as opposed to 4 different delivery addresses.
If the order had 5 different delivery addresses, I would need the first page to show the first 4 and the second page to just show 1 with 3 blank labels.
Has anyone any experience of this or does anyone know how to set this up?
|
|
|
|
|
Go to report layout and set it to break the page (Page Break) after every "parent" record.
Its much possible with reporting services. I dont have it installed rite now, but i know its possible. Try to search in properties box for the layout items.
Best Regards,
Darpan Gogia
|
|
|
|
|
Hi.
I want to retrieve the list of indexes against a table, and the fields in the index. Also if posible the ordinal of that index.
I know that sp_helpindex, will retrieve that information, but I want to do it through TSQL. Does anyone know the query or queries to retrieve this information, please post it here. Also performance is an issue, so this info must be retrieved fast.
:->:->:->
.NET Rules
|
|
|
|
|
Sk8tzz wrote: I know that sp_helpindex, will retrieve that information, but I want to do it through TSQL.
sp_helpindex is using TSQL. I suspect you mean you don't want to use a stored procedure?
You may want to take a look at the sysindexes[^] table. This will be the fastest way to retrieve the information you want - however, you'll have to join it to some of the other system tables to get the names of the columns and so on.
"On two occasions, I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able to rightly apprehend the kind of confusion of ideas that could provoke such a question."
--Charles Babbage (1791-1871)
My: Website | Blog
|
|
|
|
|
I know that, I looked at that sp and I'm still fuzzy about what exactly its doing. Is there a simpler way of quering this info.
.NET Rules
|
|
|
|
|
Why not use sp_helpindex?
DECLARE tnames_cursor CURSOR
FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
CREATE TABLE #TempIndexes (table_name varchar(255),index_name varchar(255),index_description varchar(255),index_keys nvarchar(2126))
CREATE TABLE #TempHoldIndexes (index_name varchar(255),index_description varchar(255),index_keys nvarchar(2126))
DECLARE @tablename sysname
FETCH NEXT FROM tnames_cursor INTO @tablename
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @tablename = RTRIM(@tablename)
INSERT #TempHoldIndexes EXEC sp_helpindex @tablename
INSERT #TempIndexes SELECT @tablename, index_name,index_description,index_keys FROM #TempHoldIndexes
DELETE FROM #TempHoldIndexes
END
FETCH NEXT FROM tnames_cursor INTO @tablename
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor
SELECT * FROM #TempIndexes
DROP TABLE #TempIndexes
DROP TABLE #TempHoldIndexes
----------
There go my people. I must find out where they are going so I can lead them.
- Alexander Ledru-Rollin
|
|
|
|
|
Or, here is a modified version of sp_helpindex that you can run from the query analyzer:
-- create temp table
create table #spindtab
(
table_name sysname,
index_name sysname collate database_default NOT NULL,
stats int,
groupname sysname collate database_default NOT NULL,
index_keys nvarchar(2126) collate database_default NOT NULL -- see @keys above for length descr
)
DECLARE tnames_cursor CURSOR
FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
OPEN tnames_cursor
declare @objname nvarchar(776) -- the table to check for indexes
FETCH NEXT FROM tnames_cursor INTO @objname
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
SELECT @objname = RTRIM(@objname)
-- PRELIM
set nocount on
declare @objid int, -- the object id of the table
@indid smallint, -- the index id of an index
@groupid smallint, -- the filegroup id of an index
@indname sysname,
@groupname sysname,
@status int,
@keys nvarchar(2126), --Length (16*max_identifierLength)+(15*2)+(16*3)
@dbname sysname
-- Check to see that the object names are local to the current database.
select @dbname = parsename(@objname,3)
if @dbname is not null and @dbname <> db_name()
begin
raiserror(15250,-1,-1)
--return (1)
end
-- Check to see the the table exists and initialize @objid.
select @objid = object_id(@objname)
if @objid is NULL
begin
select @dbname=db_name()
raiserror(15009,-1,-1,@objname,@dbname)
--return (1)
end
-- OPEN CURSOR OVER INDEXES (skip stats: bug shiloh_51196)
declare ms_crs_ind cursor local static for
select indid, groupid, name, status from sysindexes
where id = @objid and indid > 0 and indid < 255 and (status & 64)=0 order by indid
open ms_crs_ind
fetch ms_crs_ind into @indid, @groupid, @indname, @status
-- IF NO INDEX, QUIT
if @@fetch_status < 0
begin
deallocate ms_crs_ind
--raiserror(15472,-1,-1) --'Object does not have any indexes.'
insert into #spindtab values (@objname, '', '', '','')
CONTINUE
--return (0)
end
-- Now check out each index, figure out its type and keys and
-- save the info in a temporary table that we'll print out at the end.
while @@fetch_status >= 0
begin
-- First we'll figure out what the keys are.
declare @i int, @thiskey nvarchar(131) -- 128+3
select @keys = index_col(@objname, @indid, 1), @i = 2
if (indexkey_property(@objid, @indid, 1, 'isdescending') = 1)
select @keys = @keys + '(-)'
select @thiskey = index_col(@objname, @indid, @i)
if ((@thiskey is not null) and (indexkey_property(@objid, @indid, @i, 'isdescending') = 1))
select @thiskey = @thiskey + '(-)'
while (@thiskey is not null )
begin
select @keys = @keys + ', ' + @thiskey, @i = @i + 1
select @thiskey = index_col(@objname, @indid, @i)
if ((@thiskey is not null) and (indexkey_property(@objid, @indid, @i, 'isdescending') = 1))
select @thiskey = @thiskey + '(-)'
end
select @groupname = groupname from sysfilegroups where groupid = @groupid
-- INSERT ROW FOR INDEX
insert into #spindtab values (@objname,@indname, @status, @groupname, @keys)
-- Next index
fetch ms_crs_ind into @indid, @groupid, @indname, @status
end
deallocate ms_crs_ind
-- SET UP SOME CONSTANT VALUES FOR OUTPUT QUERY
declare @empty varchar(1) select @empty = ''
declare @des1 varchar(35), -- 35 matches spt_values
@des2 varchar(35),
@des4 varchar(35),
@des32 varchar(35),
@des64 varchar(35),
@des2048 varchar(35),
@des4096 varchar(35),
@des8388608 varchar(35),
@des16777216 varchar(35)
select @des1 = name from master.dbo.spt_values where type = 'I' and number = 1
select @des2 = name from master.dbo.spt_values where type = 'I' and number = 2
select @des4 = name from master.dbo.spt_values where type = 'I' and number = 4
select @des32 = name from master.dbo.spt_values where type = 'I' and number = 32
select @des64 = name from master.dbo.spt_values where type = 'I' and number = 64
select @des2048 = name from master.dbo.spt_values where type = 'I' and number = 2048
select @des4096 = name from master.dbo.spt_values where type = 'I' and number = 4096
select @des8388608 = name from master.dbo.spt_values where type = 'I' and number = 8388608
select @des16777216 = name from master.dbo.spt_values where type = 'I' and number = 16777216
end
FETCH NEXT FROM tnames_cursor INTO @objname
end
CLOSE tnames_cursor
DEALLOCATE tnames_cursor
-- DISPLAY THE RESULTS
select
'table_name' = table_name,
'index_name' = index_name,
'index_description' = convert(varchar(210), --bits 16 off, 1, 2, 16777216 on, located on group
case when (stats & 16)<>0 then 'clustered' else 'nonclustered' end
+ case when (stats & 1)<>0 then ', '+@des1 else @empty end
+ case when (stats & 2)<>0 then ', '+@des2 else @empty end
+ case when (stats & 4)<>0 then ', '+@des4 else @empty end
+ case when (stats & 64)<>0 then ', '+@des64 else case when (stats & 32)<>0 then ', '+@des32 else @empty end end
+ case when (stats & 2048)<>0 then ', '+@des2048 else @empty end
+ case when (stats & 4096)<>0 then ', '+@des4096 else @empty end
+ case when (stats & 8388608)<>0 then ', '+@des8388608 else @empty end
+ case when (stats & 16777216)<>0 then ', '+@des16777216 else @empty end
+ ' located on ' + groupname),
'index_keys' = index_keys
from #spindtab
order by index_name
--return (0) -- sp_helpindex
DROP TABLE #spindtab
----------
There go my people. I must find out where they are going so I can lead them.
- Alexander Ledru-Rollin
|
|
|
|
|
Thanks, will test, trying to write a unique little DAL that does not require any generated code, strongly typed as well.
.NET Rules
|
|
|
|
|
I need to integrate the 2 results of the following query
select suppliers.sname, count(*) i from failures,devices,suppliers where devices.suppid=suppliers.suppid and failures.deviceid=devices.deviceid group by suppliers.sname
output:
sname i
***** **
select suppliers.sname, count(*) j from devices,suppliers where devices.suppid=suppliers.suppid group by suppliers.sname
output:
sname j
***** **
I need the output to be in the following form:
sname i j
***** ** **
Please help. Thanks
|
|
|
|
|
You can put them in subqueries and join the result set of the subqueries together. Like this:
SELECT supplier.sname, failures.count, supplier.count
FROM
(
select suppliers.sname, count(*) AS count
from failures,devices,suppliers
where devices.suppid=suppliers.suppid
and failures.deviceid=devices.deviceid
group by suppliers.sname
) AS supplier
INNER JOIN
(
select suppliers.sname, count(*) AS count
from devices,suppliers
where devices.suppid=suppliers.suppid
group by suppliers.sname
) AS failure ON supplier.sname = failure.sname
The above query can be could be optimised further, but I wanted to show as much of your original SQL as possible so you can see how it fits together. It also assumes that sname is unique.
Does this help?
"On two occasions, I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able to rightly apprehend the kind of confusion of ideas that could provoke such a question."
--Charles Babbage (1791-1871)
My: Website | Blog
|
|
|
|
|
Colin Angus Mackay wrote: Does this help?
Thank you , Mr. Colin, The SQL query provided by you is working fine. That solves my problem.
|
|
|
|
|
But wait !! inner join needs both queries to have common records existent for display.
Replace Inner Join with Full Outer Join so that even of any record doesnt have a matching record in other query, still it comes in display.
Best Regards,
Darpan Gogia
|
|
|
|
|
Thanks.
The failure count is returning null value instead of that i need to display it as numeric value 0.
|
|
|
|
|
you can use the coalesce function to get 0's.
|
|
|
|
|
Is the following is the format of coalesce?
coalesce(colname,0)
Please tell me how to display decimal value for the following query?
select 1/2
Thanks
|
|
|
|
|
yes this is correct form of coalesce.
in the second question, you are performing calculation on integer so it returns integer. you need to cast/convert the result to decimal/float to get the decimal value of the query as:
CAST(1/2 as double), convert check the Books online for syntax help!!
Best Regards,
Darpan Gogia
|
|
|
|
|
Thanks
The CAST(1/2 as double) is displaying an error
I've tried CAST(1 as float)/CAST(2 as float) it is working.
Thank you very much again.
|
|
|
|
|
Hi,
The following code is displaying "[Microsoft][ODBC SQL Server Driver]Syntax error or access violation" error
SELECT failure.locid,device.count [devices],failure.count [failures]<br />
FROM<br />
{<br />
select locality.locid,count(*) from allotment,locality where allotment.locid=locality.locid group by locality.locid<br />
} AS device<br />
FULL OUTER JOIN<br />
{<br />
select locid,count(deviceid) from failures group by locid<br />
} AS failure ON device.locid = failure.locid
device is used to find number of device in a particular locality
failure is to find the number of failures in the particular location
All localities are stored in locality table. the alloted devices are in allotment table, failures are in failures table
Thanks
-- modified at 9:43 Wednesday 19th April, 2006
|
|
|
|
|
check the syntax in query as well as your servers.
Example, dont use reserved words as "count" in your query directly as "device.count [devices],"
Most probably you will end up getting some silly mistake with your query, or else with permissions.
|
|
|
|
|
There is no problem with the server and the permissions. Please help same error.
SELECT failure.locid,device.count,failure.count
FROM
{
select locality.locid,count(*) AS count
from allotment,locality
where allotment.locid=locality.locid
group by locality.locid
} AS device
FULL OUTER JOIN
{
select locid,count(deviceid) AS count
from failures
group by locid
} AS failure ON device.locid = failure.locid
|
|
|
|
|
There is a syntax error in the query. I have to use normal brackets () instead of braces {}
Thanks
|
|
|
|
|