09-09-2022
09:34 AM
- last edited
3 weeks ago
by
JackLacava
Hi, I need to build some tables in the application database. I am using a extensibility rule with a StringBuilder and the BRAPi.Database.ExecuteActionQuery command to do that.
The "Create table" command is working fine. Eg:
sqlScript.AppendLine("CREATE TABLE [PayrollMapping](")
sqlScript.AppendLine("[Payroll] varchar(255),")
sqlScript.AppendLine("[Pay_Basis] varchar(255),")
sqlScript.AppendLine("[Salary_Annual_Factor] Int")
sqlScript.AppendLine(") On [PRIMARY]")
But I cannot make the "Create table as select" command work. Eg this does not work (Error: Incorrect syntax near the keyword 'Select')
sqlScript.AppendLine("CREATE TABLE [EBSRegister] As")
sqlScript.AppendLine("Select [RegisterID], [FirstName], [LastName]")
sqlScript.AppendLine("From XFW_PLP_Register")
Is the "Create table as select" not a valid command for the OneStream BRAPi.Database or is there simply something wrong with the syntax above?
Thank you
Solved! Go to Solution.
09-09-2022 10:53 AM
After testing many suggestions I found that the following line of code does what I was looking for, i.e. it creates a table which is a copy of the old table, without copying any data from the old table (because of the Where 1 = 2 condition):
sqlScript.AppendLine("Select * Into EBSRegister From XFW_PLP_Register Where 1 = 2")
09-09-2022 11:23 AM
Yes you're on the right track though the new table won't have the indexes/constraints copied over.
The "Create Table As Select (CTAS)" only works in Azure Synapse Analytics Platform System aka PDW. Also works in oracle but not in SQL Server.
09-09-2022 09:48 AM
Hello,
The "create table as select" looks correct but seems SQL system inside OneStream is not able to comprehend this.
Not all SQL queries, vb.net functions would work as is inside OneStream.
09-09-2022 10:34 AM
You can try and create the table first and then do the insert like...
Using dbConn As DbConnInfoApp = BRApi.Database.CreateApplicationDbConnInfo(si)
'Create the table, only need this once
Dim sqlDM As String = "Create table EBSRegister ([RegisterID] varchar(255),[FirstName] varchar(255),[LastName] varchar(255))"
BRApi.Database.ExecuteActionQuery(dbConn, sqlDM,False, True)
'Insert the records into the new table
Dim sql As String = "insert into EBSRegister (RegisterID,FirstName,LastName) select RegisterID,FirstName,LastName from XFW_PLP_Register"
BRApi.Database.ExecuteActionQuery(dbConn, sql,False, True)
End Using
09-09-2022 10:48 AM - edited 09-09-2022 10:54 AM
Hi and thank you for your replies. Yes your solution would work, but the reason why I was trying to avoid using the "Create table <table name> (<column1>, <column2>, etc.)" command is that the table I want to recreate has around 50 columns, so I was looking for a way to copy the structure from an existing table
09-09-2022 10:53 AM
After testing many suggestions I found that the following line of code does what I was looking for, i.e. it creates a table which is a copy of the old table, without copying any data from the old table (because of the Where 1 = 2 condition):
sqlScript.AppendLine("Select * Into EBSRegister From XFW_PLP_Register Where 1 = 2")
09-09-2022 11:23 AM
Yes you're on the right track though the new table won't have the indexes/constraints copied over.
The "Create Table As Select (CTAS)" only works in Azure Synapse Analytics Platform System aka PDW. Also works in oracle but not in SQL Server.
3 weeks ago
Insert into should work fine, did you try that?
3 weeks ago
Hi, yes the "insert into" command works in OneStream.
The command I've used to create the table is: "Select * Into NewTableName From OldTableName Where 1 = 2"