Click here to Skip to main content
15,908,776 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I am facing one issue.i have to create one table using proc input parameter value in syntax.so how can we do that without giving any hardcode value.

What I have tried:

CREATE PROC UPDATE_AUDIT_HISTORIC
(@table_name varchar(50))
as
begin
--CHECKING AUDIT FLAG VALUE FOR GIVEN TABLE NAME
if (select audit_flag from config_table where table_name=@table_name)='Y'
BEGIN
--CHECKING AUDIT COLUMNS EXIST OR NOT IN THE TABLE

IF(SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@table_name) NOT IN ('crt_dt', 'crt_by', 'mod_dt', 'mod_by')

ALTER TABLE @table_name ADD crt_dt DATE,crt_by VARCHAR(50),mod_dt DATE,mod_by DATE
END

--CHECKING hist_flag VALUE FOR GIVEN TABLE NAME
if (select hist_flag from config_table where table_name=@table_name)='Y'
BEGIN
--CHECKING HISTORY TABLE IS EXIST OR NOT IN THE DATABASE AND CREATE IT
IF(SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=@table_name)=0
BEGIN
CREATE TABLE Tbl_History
(
table_name_hist_ID int primary key,
Table_name varchar(50),
column_s varchar(max)
)
END
END
END


this my proc if run this proc i would be getting error like Msg 102, Level 15, State 1, Procedure UPDATE_AUDIT_HISTORIC, Line 12
Incorrect syntax near '@table_name'.

So how we can pass the value in create table syntax..

this is the error line ALTER TABLE @table_name ADD crt_dt DATE,crt_by VARCHAR(50),mod_dt DATE,mod_by DATE.

Here i can't use varible name how can create a table same name of variale value..please assist me.any answer would be greatly appreciated...
Posted
Updated 15-Jun-16 20:04pm
v2

1 solution

You can accomplish this using dynamic query bellow is a sample SQL

SQL
DECLARE @table_name nvarchar(50);
DECLARE @CreateTable_SQL nvarchar(MAX);

SET @table_name='Sorry';
SET @CreateTable_SQL='CREATE TABLE '+@table_name+'(id int identity not null,toWhom nvarchar(50),why nvarchar(MAX),[Status] nvarchar(50) )';

EXEC(@CreateTable_SQL)

-- table created check it
INSERT INTO Sorry VALUES('S','that reason','Pending')

SELECT * FROM Sorry
 
Share this answer
 
Comments
Member 11337367 16-Jun-16 2:17am    
Thanks for your answer..
Anisuzzaman Sumon 16-Jun-16 2:19am    
:)

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