Click here to Skip to main content
15,888,454 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
I want to create script the uniue constraints to table by creating cursor through
T-Sql.
Below my T-Sql code is given.
But when i run this code, it is generate the error msg(i.e.-Incorrect syntax near '@ColName')
How can i solve this below code through Cursor creating?????
please anybody help me in ant instruction....

My T-Sql code:--
-------------
SQL
DECLARE @cONSNAME VARCHAR(50), @ColName sysname, @kEYTYPE VARCHAR(10)

DECLARE objCONS CURSOR FOR 
	(select name, ColName = COL_NAME (OBJECT_ID('table_name'), colid)
	from sysindexes	idx
	inner join sysindexkeys ik on ik.id = idx.id and idx.indid = ik.indid
	where idx.id = 485576768)
OPEN objCONS
FETCH NEXT FROM objCONS INTO @cONSNAME, @ColName, @kEYTYPE
WHILE @@FETCH_STATUS = 0
BEGIN
	IF (@kEYTYPE = 'UNIQUE')
		BEGIN
		IF NOT EXISTS(SELECT * FROM SysObjects WHERE id = 485576768 AND xtype = 'UQ')
			ALTER TABLE ['table_name'] WITH NOCHECK ADD CONSTRAINT [@cONSNAME] UNIQUE NONCLUSTERED
			(@ColName) ON [PRIMARY]
		END

FETCH NEXT FROM objCONS INTO @cONSNAME, @ColName, @kEYTYPE
END
CLOSE objCONS
DEALLOCATE objCONS
Posted
Updated 4-Jun-12 22:08pm
v2

1 solution

Try this

SQL
DECLARE @cONSNAME VARCHAR(50), @ColName sysname, @kEYTYPE VARCHAR(10)
 DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)

DECLARE objCONS CURSOR FOR 
	(select name, ColName = COL_NAME (OBJECT_ID('table_name'), colid)
	from sysindexes	idx
	inner join sysindexkeys ik on ik.id = idx.id and idx.indid = ik.indid
	where idx.id = 485576768)
OPEN objCONS
FETCH NEXT FROM objCONS INTO @cONSNAME, @ColName, @kEYTYPE
WHILE @@FETCH_STATUS = 0
BEGIN
	IF (@kEYTYPE = 'UNIQUE')
		BEGIN
		IF NOT EXISTS(SELECT * FROM SysObjects WHERE id = 485576768 AND xtype = 'UQ')		
			SET @SQLString = N'ALTER TABLE [''table_name''] WITH NOCHECK ADD CONSTRAINT [@cONSNAME] UNIQUE NONCLUSTERED
			(@ColName) ON [PRIMARY]'
                   
			SET @ParmDefinition = N'@ColName sysname'
			
			EXECUTE sp_executesql
			@SQLString,
			@ParmDefinition,
			@ColName = @ColName
			
		END
 
FETCH NEXT FROM objCONS INTO @cONSNAME, @ColName, @kEYTYPE
END
CLOSE objCONS
DEALLOCATE objCONS



Hope this helps , If yes then plz accept and vote the answer. Any queries / questions on this are always welcome.

Thanks & Regards
RDBurmon.Sr.Software Engineer
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900