Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
Ken Blum
Constraint Violating Yak Guru
383 Posts |
Posted - 2003-09-25 : 10:24:21
|
| How can I create a table based on a variable name?declare @tname varchar(20)SET @tname = 'Test1'drop table @tnamecreate table @tname (x int) |
|
|
jsmith8858
Dr. Cross Join
7423 Posts |
Posted - 2003-09-25 : 10:35:30
|
| Out of curiousity, why are you doing this? There's a reason SQL Server makes things like this more difficult than you might think they need to be.- Jeff |
 |
|
|
JustinBigelow
SQL Gigolo
1157 Posts |
Posted - 2003-09-25 : 10:35:56
|
| dynamic SQL. See Books On Line.Justin"Look at it out there orbiting like it's so cool, we will rule it with an army of replicants!" |
 |
|
|
mr_mist
Grunnio
1870 Posts |
Posted - 2003-09-25 : 10:45:39
|
| Unless you want a spaghetti system of tables everywhere, just say no to dynamically creating them.-------Moo. :) |
 |
|
|
Ken Blum
Constraint Violating Yak Guru
383 Posts |
Posted - 2003-09-25 : 11:01:18
|
| Thanks. Yeah, I know about Dynamic SQL and have already implemented it. The reason behind this is for debugging purposes. I need to take a snapshot of certain tables at certain time periods to determine past problems within an ERP Analytical system (COGNOS). So, I need to see what the table contents were yesterday, the day before, etc. Once I have figured out the problem then this SPROC will no longer be needed. |
 |
|
|
tkizer
Almighty SQL Goddess
38200 Posts |
Posted - 2003-09-25 : 12:22:30
|
| If you know about dynamic sql, then what is your question?Tara |
 |
|
|
Ken Blum
Constraint Violating Yak Guru
383 Posts |
Posted - 2003-09-26 : 09:29:50
|
| Just wondering if there was a better way. Guess not! |
 |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2003-09-26 : 11:08:57
|
A better way to track what was?How about History...it's better than a snapshot, because it's always up to date...Current rows stay in the base...just need to UNION HISTORY and BASE for a complete picture...USE NorthWindGO-- 1. CREATE A history table that looks identical to the base table SELECT * INTO Orders_H FROM Orders WHERE 1=0GO-- 2. Add three data administration columnsALTER TABLE Orders_H Add HIST_ADD_TS datetime not null DEFAULT GetDate(), HIST_ADD_TYPE char(1), HIST_ADD_BY varchar(25) DEFAULT UserGO-- 3. Create a trigger to track data changesCREATE TRIGGER Orders_UpdDelTr ON Orders FOR UPDATE, DELETE ASIf Exists (Select 1 From Inserted) And Exists (Select 1 From Deleted) BEGINInsert Into Orders_H ( HIST_ADD_TS, HIST_ADD_TYPE, HIST_ADD_BY, OrderID , CustomerID , EmployeeID , OrderDate , RequiredDate , ShippedDate , ShipVia , Freight , ShipName , ShipAddress , ShipCity , ShipRegion , ShipPostalCode , ShipCountry )SELECT GetDate(), 'U', User, OrderID , CustomerID , EmployeeID , OrderDate , RequiredDate , ShippedDate , ShipVia , Freight , ShipName , ShipAddress , ShipCity , ShipRegion , ShipPostalCode , ShipCountry FROM Deleted ENDIf Not Exists (Select 1 From Inserted) And Exists (Select 1 From Deleted) BEGINInsert Into Orders_H ( HIST_ADD_TS, HIST_ADD_TYPE, HIST_ADD_BY, OrderID , CustomerID , EmployeeID , OrderDate , RequiredDate , ShippedDate , ShipVia , Freight , ShipName , ShipAddress , ShipCity , ShipRegion , ShipPostalCode , ShipCountry )SELECT GetDate(), 'D', User, OrderID , CustomerID , EmployeeID , OrderDate , RequiredDate , ShippedDate , ShipVia , Freight , ShipName , ShipAddress , ShipCity , ShipRegion , ShipPostalCode , ShipCountry FROM Deleted ENDGODROP TABLE Orders_HGO I've got a "trigger generator" if you're interested...Brett8-)SELECT @@POST FROM Brain ORDER BY NewId()That's correct! It's an AlphaNumeric! |
 |
|
|
jsmith8858
Dr. Cross Join
7423 Posts |
Posted - 2003-09-26 : 14:50:46
|
quote: I've got a "trigger generator" if you're interested...
I think I've used that line before at bars- Jeff |
 |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2003-09-26 : 15:33:38
|
quote: Originally posted by jsmith8858
quote: I've got a "trigger generator" if you're interested...
I think I've used that line before at bars- Jeff
I hope you got a slap at least for your troubles...Brett8-)SELECT @@POST FROM Brain ORDER BY NewId()That's correct! It's an AlphaNumeric! |
 |
|
|
Ken Blum
Constraint Violating Yak Guru
383 Posts |
Posted - 2003-09-29 : 10:03:47
|
| That's a great idea. Any ballpark dea of how much of a performance hit we are looking at? Yes, I am interested in your Trigger Generator (without the slap, but rather a pat on the back!)Thanks. |
 |
|
|
X002548
Not Just a Number
15586 Posts |
Posted - 2003-09-29 : 10:24:44
|
I've used the same methodology on various platforms, and have stressed the hell out of itIt assumes the following...1. Connection Pooling with application level logins2. All Updates require the update by id and datetime (otherwise the trigger will fail)3. Inserts are not tracked..they are kept in the base4. Deletes are tracked using stored procedures using the following:DECLARE @BinVar varbinary(128) SET @BinVar = CAST( REPLICATE( 0x20, 128 ) AS varbinary(128) ) select @BinVar = convert(varbinary(128),@User_Id) SET CONTEXT_INFO @BinVar 5. Any updates outside the application will track the login to the server...not the application login6. The predicates in the code generator will need to change to meet your needs...7. A mirror history table need to be created for each table9. Use at your own risk9. The Jets suck...SELECT SQL From ( SELECT 'DROP TRIGGER ' + TABLE_NAME + '_UpdDelTr' AS SQL , TABLE_NAME, 1 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'GO' AS SQL , TABLE_NAME, 2 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')) as xxxORDER BY TABLE_NAME, GROUPORDER,ROWORDERGOSELECT SQL From ( SELECT 'CREATE TRIGGER ' + TABLE_NAME + '_UpdDelTr ON ' + TABLE_NAME + ' FOR UPDATE, DELETE AS' AS SQL , TABLE_NAME, 1 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'If Exists (Select 1 From Inserted) And Exists (Select 1 From Deleted) BEGIN' AS SQL , TABLE_NAME, 1 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'Insert Into ' + TABLE_NAME +'_H (' AS SQL , TABLE_NAME, 1 AS GROUPORDER, 3 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ' HIST_ADD_TS'AS SQL , TABLE_NAME, 2 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_TYPE'AS SQL , TABLE_NAME, 2 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_BY'AS SQL , TABLE_NAME, 2 AS GROUPORDER, 3 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_SYSUSER_BY' AS SQL , TABLE_NAME, 2 AS GROUPORDER, 4 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', ' + COLUMN_NAME + ' ' AS SQL , TABLE_NAME, 3 As GROUPORDER, ORDINAL_POSITION AS ROWORDER FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ')' AS SQL , TABLE_NAME, 4 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'SELECT GetDate(), '+ '''' + 'U' + '''' AS SQL , TABLE_NAME, 5 AS GROUPORDER, 0 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ',(Select Inserted.Updated_By From Inserted Where Deleted.' + COLUMN_NAME + ' = Inserted.' + COLUMN_NAME AS SQL , TABLE_NAME, 5 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND ORDINAL_POSITION = 1UNION ALL SELECT ' And Deleted.' + COLUMN_NAME + ' = Inserted.' + COLUMN_NAME AS SQL , TABLE_NAME, 5 AS GROUPORDER, ORDINAL_POSITION AS ROWORDER FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND ORDINAL_POSITION <> 1UNION ALL SELECT ' )' AS SQL , TABLE_NAME, 5 AS GROUPORDER, 9999 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES o WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE i WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND i.TABLE_NAME = o.TABLE_NAME)UNION ALL SELECT ', User' AS SQL , TABLE_NAME, 5 AS GROUPORDER, 9999 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES o WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE i WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%') AND i.TABLE_NAME = o.TABLE_NAME)UNION ALL SELECT ', User' AS SQL , TABLE_NAME, 6 AS GROUPORDER, 0 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', ' + COLUMN_NAME + ' ' AS SQL , TABLE_NAME, 6 As GROUPORDER, ORDINAL_POSITION AS ROWORDER FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'FROM Deleted END' AS SQL , TABLE_NAME, 7 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'If Not Exists (Select 1 From Inserted) And Exists (Select 1 From Deleted) BEGIN' AS SQL , TABLE_NAME, 8 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'Declare @DelBY char(8)' AS SQL , TABLE_NAME, 9 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'SELECT @DelBY = CASE WHEN ASCII(context_info) <> 0 THEN convert(varchar(8),context_info) ELSE ' + '''' + 'EXTERNAL' + '''' + ' END' AS SQL , TABLE_NAME, 10 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'FROM master.dbo.sysprocesses WHERE spid = @@SPID' AS SQL , TABLE_NAME, 10 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'Insert Into ' + TABLE_NAME +'_H (' AS SQL , TABLE_NAME, 11 AS GROUPORDER, 3 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ' HIST_ADD_TS'AS SQL , TABLE_NAME, 12 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_TYPE'AS SQL , TABLE_NAME, 12 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_BY'AS SQL , TABLE_NAME, 12 AS GROUPORDER, 3 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', HIST_ADD_SYSUSER_BY' AS SQL , TABLE_NAME, 12 AS GROUPORDER, 4 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', ' + COLUMN_NAME + ' ' AS SQL , TABLE_NAME, 13 As GROUPORDER, ORDINAL_POSITION AS ROWORDER FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ')' AS SQL , TABLE_NAME, 14 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'SELECT GetDate(), '+ '''' + 'D' + '''' AS SQL , TABLE_NAME, 15 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', @DelBY' AS SQL , TABLE_NAME, 15 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', User' AS SQL , TABLE_NAME, 15 AS GROUPORDER, 2 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT ', ' + COLUMN_NAME + ' ' AS SQL , TABLE_NAME, 16 As GROUPORDER, ORDINAL_POSITION AS ROWORDER FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'FROM Deleted END' AS SQL , TABLE_NAME, 17 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')UNION ALL SELECT 'GO' AS SQL , TABLE_NAME, 18 AS GROUPORDER, 1 AS ROWORDER FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '%_H' AND (TABLE_NAME LIKE 'ETRS%S%' OR TABLE_NAME LIKE 'XLAT%' OR TABLE_NAME LIKE 'REPORT%')) as xxxORDER BY TABLE_NAME, GROUPORDER,ROWORDERGOBrett8-)SELECT @@POST FROM Brain ORDER BY NewId()That's correct! It's an AlphaNumeric! |
 |
|
|
Ken Blum
Constraint Violating Yak Guru
383 Posts |
Posted - 2003-09-29 : 16:58:23
|
| Thanks Brett! |
 |
|
|
|
|
|
|
|