Showing posts with label returns. Show all posts
Showing posts with label returns. Show all posts

Monday, March 19, 2012

How to get schema name/ owner name ?

Hi,

I have an application that uses SQL-DMO to list object properties. Due to user-schema separation in Sql server 2005, sql-dmo returns owner name as schema. How to get the owner name or schema name of an object using SQL-dMO ?

Regards,
PraveenSQL-DMO has been made backward compatible, and does not know the difference between a SQL Server 2000 owner-schema and a SQL Server 2005 schema. As we do not plan to expose SQL Server 2005 features in SQL-DMO, this will not be possible.

In SMO the collection of schemas is exposed through which you can infer ownership.

Monday, March 12, 2012

How to get results back from a Stored procedure.

I have a stored procedure1 calling stored procedure 2. Stored
procedure 2 when it is finished returns a single row with 2 columns.
Is there a way to grab the return of column 1 from stored procedure 2
inside stored procedure 1?
Thank you in advance
http://www.sommarskog.se/share_data.html
"TheVillageCodingIdiot" <whosyodaddy1019@.hotmail.com> wrote in message
news:1651d138-de4e-49ac-928c-c2558468ef55@.s50g2000hsb.googlegroups.com...
>I have a stored procedure1 calling stored procedure 2. Stored
> procedure 2 when it is finished returns a single row with 2 columns.
> Is there a way to grab the return of column 1 from stored procedure 2
> inside stored procedure 1?
> Thank you in advance

How to get results back from a Stored procedure.

I have a stored procedure1 calling stored procedure 2. Stored
procedure 2 when it is finished returns a single row with 2 columns.
Is there a way to grab the return of column 1 from stored procedure 2
inside stored procedure 1?
Thank you in advancehttp://www.sommarskog.se/share_data.html
"TheVillageCodingIdiot" <whosyodaddy1019@.hotmail.com> wrote in message
news:1651d138-de4e-49ac-928c-c2558468ef55@.s50g2000hsb.googlegroups.com...
>I have a stored procedure1 calling stored procedure 2. Stored
> procedure 2 when it is finished returns a single row with 2 columns.
> Is there a way to grab the return of column 1 from stored procedure 2
> inside stored procedure 1?
> Thank you in advance

Friday, February 24, 2012

How to get indexes?

I want to get a list of indexes for a certain table. I like the
sp_helpindex [table_name], but it also returns the primary key index.
How can I get what sp_helpindex returns without the primary key index?
Hi,
Query either SYSINDEXES table or use sp_help <tablename>
Thanks
Hari
SQL Server MVP
"Frank Rizzo" <none@.none.com> wrote in message
news:upXtVEmvFHA.3756@.tk2msftngp13.phx.gbl...
>I want to get a list of indexes for a certain table. I like the
>sp_helpindex [table_name], but it also returns the primary key index. How
>can I get what sp_helpindex returns without the primary key index?
|||I have created one procedure named "Proc_helpindex_without_pk". 99%
code is copied from sp_helpindex procedure and i added 1% piece of code
to meet your requirments.
Do not update sql server system tables and system procedure.
The Customizied Code is as follows.
create proc Proc_helpindex_without_pk
@.objname nvarchar(776)-- the table to check for indexes
as
-- 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)
@.dbnamesysname
-- 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
and name not in (select constraint_name
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where table_name = object_name(@.objid) and
constraint_type = 'primary key')
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.'
return (0)
end
-- create temp table
create table #spindtab
(
index_namesysnamecollate database_default NOT NULL,
statsint,
groupnamesysname collate database_default NOT NULL,
index_keysnvarchar(2126)collate database_default NOT NULL -- see
@.keys above for length descr
)
-- 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 (@.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 @.des1varchar(35),-- 35 matches spt_values
@.des2varchar(35),
@.des4varchar(35),
@.des32varchar(35),
@.des64varchar(35),
@.des2048varchar(35),
@.des4096varchar(35),
@.des8388608varchar(35),
@.des16777216varchar(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
-- DISPLAY THE RESULTS
select
'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
exec Proc_helpindex_without_pk 'authors'
try. all the best
|||Thank you. This is great.
Praveen wrote:

>I have created one procedure named "Proc_helpindex_without_pk". 99%
>code is copied from sp_helpindex procedure and i added 1% piece of code
>to meet your requirments.
>Do not update sql server system tables and system procedure.
>The Customizied Code is as follows.
>create proc Proc_helpindex_without_pk
>@.objname nvarchar(776)-- the table to check for indexes
>as
>-- 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)
>@.dbnamesysname
>-- 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
>and name not in (select constraint_name
> from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
> where table_name = object_name(@.objid) and
> constraint_type = 'primary key')
>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.'
>return (0)
>end
>-- create temp table
>create table #spindtab
>(
>index_namesysnamecollate database_default NOT NULL,
>statsint,
>groupnamesysname collate database_default NOT NULL,
>index_keysnvarchar(2126)collate database_default NOT NULL -- see
>@.keys above for length descr
>)
>-- 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 (@.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 @.des1varchar(35),-- 35 matches spt_values
>@.des2varchar(35),
>@.des4varchar(35),
>@.des32varchar(35),
>@.des64varchar(35),
>@.des2048varchar(35),
>@.des4096varchar(35),
>@.des8388608varchar(35),
>@.des16777216varchar(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
>-- DISPLAY THE RESULTS
>select
>'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
>--
>exec Proc_helpindex_without_pk 'authors'
>try. all the best
>
>

How to get indexes?

I want to get a list of indexes for a certain table. I like the
sp_helpindex [table_name], but it also returns the primary key index.
How can I get what sp_helpindex returns without the primary key index?Hi,
Query either SYSINDEXES table or use sp_help <tablename>
Thanks
Hari
SQL Server MVP
"Frank Rizzo" <none@.none.com> wrote in message
news:upXtVEmvFHA.3756@.tk2msftngp13.phx.gbl...
>I want to get a list of indexes for a certain table. I like the
>sp_helpindex [table_name], but it also returns the primary key index. How
>can I get what sp_helpindex returns without the primary key index?|||I have created one procedure named "Proc_helpindex_without_pk". 99%
code is copied from sp_helpindex procedure and i added 1% piece of code
to meet your requirments.
Do not update sql server system tables and system procedure.
The Customizied Code is as follows.
create proc Proc_helpindex_without_pk
@.objname nvarchar(776) -- the table to check for indexes
as
-- 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
and name not in (select constraint_name
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where table_name = object_name(@.objid) and
constraint_type = 'primary key')
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.'
return (0)
end
-- create temp table
create table #spindtab
(
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
)
-- 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 (@.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
-- DISPLAY THE RESULTS
select
'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
--
exec Proc_helpindex_without_pk 'authors'
try. all the best|||Thank you. This is great.
Praveen wrote:
>I have created one procedure named "Proc_helpindex_without_pk". 99%
>code is copied from sp_helpindex procedure and i added 1% piece of code
>to meet your requirments.
>Do not update sql server system tables and system procedure.
>The Customizied Code is as follows.
>create proc Proc_helpindex_without_pk
> @.objname nvarchar(776) -- the table to check for indexes
>as
> -- 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
> and name not in (select constraint_name
> from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
> where table_name = object_name(@.objid) and
> constraint_type = 'primary key')
> 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.'
> return (0)
> end
> -- create temp table
> create table #spindtab
> (
> 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
> )
> -- 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 (@.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
> -- DISPLAY THE RESULTS
> select
> '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
>--
>exec Proc_helpindex_without_pk 'authors'
>try. all the best
>
>

How to get indexes?

I want to get a list of indexes for a certain table. I like the
sp_helpindex [table_name], but it also returns the primary key index.
How can I get what sp_helpindex returns without the primary key index?Hi,
Query either SYSINDEXES table or use sp_help <tablename>
Thanks
Hari
SQL Server MVP
"Frank Rizzo" <none@.none.com> wrote in message
news:upXtVEmvFHA.3756@.tk2msftngp13.phx.gbl...
>I want to get a list of indexes for a certain table. I like the
>sp_helpindex [table_name], but it also returns the primary key index.
How
>can I get what sp_helpindex returns without the primary key index?|||I have created one procedure named "Proc_helpindex_without_pk". 99%
code is copied from sp_helpindex procedure and i added 1% piece of code
to meet your requirments.
Do not update sql server system tables and system procedure.
The Customizied Code is as follows.
create proc Proc_helpindex_without_pk
@.objname nvarchar(776) -- the table to check for indexes
as
-- 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
and name not in (select constraint_name
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where table_name = object_name(@.objid) and
constraint_type = 'primary key')
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.'
return (0)
end
-- create temp table
create table #spindtab
(
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
)
-- 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 (@.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
-- DISPLAY THE RESULTS
select
'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
exec Proc_helpindex_without_pk 'authors'
try. all the best|||Thank you. This is great.
Praveen wrote:

>I have created one procedure named "Proc_helpindex_without_pk". 99%
>code is copied from sp_helpindex procedure and i added 1% piece of code
>to meet your requirments.
>Do not update sql server system tables and system procedure.
>The Customizied Code is as follows.
>create proc Proc_helpindex_without_pk
> @.objname nvarchar(776) -- the table to check for indexes
>as
> -- 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
> and name not in (select constraint_name
> from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
> where table_name = object_name(@.objid) and
> constraint_type = 'primary key')
> 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.'
> return (0)
> end
> -- create temp table
> create table #spindtab
> (
> 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
> )
> -- 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 (@.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
> -- DISPLAY THE RESULTS
> select
> '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
>--
>exec Proc_helpindex_without_pk 'authors'
>try. all the best
>
>

Sunday, February 19, 2012

how to get host_name in .net programming for subscribers

Hi all...
While setting up my merge replication through the replication wizard in I
read that the use of HOST_NAME() in the dynamic filter returns the
Subscriber's Machine Name. How to get host_name() value in .net code can
anyone give or suggest the code
how to write to get host_name and where i have to use it . I already defined
the host_name in sql server under dynamic filter for merge replication.
I have 50 subscribers and 1 publisher. I use merge replication. The
distributor runs on publisher. The publisher and distributer server name is
creativesoft.How do I set the dynamic filter that every subscriber would get
only his data?
yours truly,
Pramod Renikindi,
creativesoft,
australia
system.dns.gethostname()
Hilary Cotter
Looking for a SQL Server replication book?
http://www.nwsu.com/0974973602.html
Looking for a FAQ on Indexing Services/SQL FTS
http://www.indexserverfaq.com
"pramod" <pramod@.discussions.microsoft.com> wrote in message
news:AE2A49CF-B76F-4719-9D60-984E9FB6D085@.microsoft.com...
> Hi all...
> While setting up my merge replication through the replication wizard in I
> read that the use of HOST_NAME() in the dynamic filter returns the
> Subscriber's Machine Name. How to get host_name() value in .net code can
> anyone give or suggest the code
> how to write to get host_name and where i have to use it . I already
defined
> the host_name in sql server under dynamic filter for merge replication.
> I have 50 subscribers and 1 publisher. I use merge replication. The
> distributor runs on publisher. The publisher and distributer server name
is
> creativesoft.How do I set the dynamic filter that every subscriber would
get
> only his data?
> --
> yours truly,
> Pramod Renikindi,
> creativesoft,
> australia