Syntax error in SQL statement running JPA query - spring-mvc

I have this JPA query in a Spring MvC project
#Query(value = "with\n"
+ " jupiter_courante ( \n"
+ " jupiter_id\n"
+ ")"
+ "as (\n"
+ " select pa.jupiter_id from\n"
+ "jupiter_microfusa pa\n"
+ "inner join jupiter_composition pc on pa.JUPITER_ID = pc.JUPITER_ID\n"
+ "inner join jupiter_composition_type pct on pc.TYPEJUPITERCOMPOSITION_ID = pct.TYPEJUPITERCOMPOSITION_ID\n"
+ "inner join donnees_contact dc on pc.microfusa_id = dc.microfusa_Id\n"
+ "inner join donnees_contact_type dct on dc.TYPE_DONNEE_CONTACT_ID = dct.TYPE_DONNEE_CONTACT_ID\n"
+ "where pct.code = 'kimi'\n"
+ "),\n"
+ "aquarius_du_menage_courant as (\n"
+ "select microfusa_id from jupiter_composition ac\n"
+ "inner join jupiter_composition_type act on ac.TYPEJUPITERCOMPOSITION_ID = act.TYPEJUPITERCOMPOSITION_ID\n"
+ "where jupiter_id = (select jupiter_id from jupiter_courante)\n"
+ "),\n"
+ "parents_du_menage_courant as (\n"
+ "select microfusa_id from jupiter_composition ac\n"
+ "inner join jupiter_composition_type act on ac.TYPEJUPITERCOMPOSITION_ID = act.TYPEJUPITERCOMPOSITION_ID\n"
+ "where jupiter_id = (select jupiter_id from jupiter_courante)\n"
+ "and act.code in ('oko', 'aqa')\n"
+ "),\n"
+ "toutes_autorisations as\n"
+ "(\n"
+ "select aut.dt_debut, aut.dt_Fin, aut.AQUARIUS_ID, aut.autorisation_id, aut_p.*, decode(aut_ty.desc_long, 'interdiction', 1, 0) as interdiction from autorisation aut\n"
+ "inner join autorisation_microfusa aut_p on aut.AUTORISATION_PERSONNE_ID = aut_p.AUTORISATION_PERSONNE_ID\n"
+ "inner join autorisation_type aut_ty on aut.autorisation_type_id = aut_ty.autorisation_type_id\n"
+ "),\n"
+ "phone as (\n"
+ "select microfusa_id, contenu as telephone from (\n"
+ "select dc.microfusa_id, dc.contenu, row_number() over (partition by microfusa_id order by (case when code = 'W' then 1 when code = 'ER' then 2 when code = 'FG' then 3 when code = 'TES' then 4 else 10 end) ) rown from donnees_contact dc\n"
+ "inner join donnees_contact_type dct on dc.TYPE_DONNEE_CONTACT_ID = dct.TYPE_DONNEE_CONTACT_ID\n"
+ "where microfusa_id in (select microfusa_id from parents_du_menage_courant)\n"
+ "and dct.code in ('AW', 'GSSM','TMNB', 'TPOL')\n"
+ ") where rown = 1\n"
+ "),\n"
+ "email as (\n"
+ "select microfusa_id, contenu as email from (\n"
+ "select dc.microfusa_id, dc.CONTENU, dct.CODE, row_number() over (partition by microfusa_id order by (case when code = 'EMAIL' then 1 when code = 'EMAIL PRIVE' then 2 else 10 end) ) rown from donnees_contact dc\n"
+ "inner join donnees_contact_type dct on dc.TYPE_DONNEE_CONTACT_ID = dct.TYPE_DONNEE_CONTACT_ID\n"
+ "where microfusa_id in (select microfusa_id from parents_du_menage_courant)\n"
+ "and dct.code in ('EMAIL', 'EMAIL2')\n"
+ ") where rown = 1\n"
+ ")\n"
+ " \n"
+ "select * from\n"
+ "(\n"
+ "select distinct p.microfusa_Id as aquarius_id, p.nom as aquarius_nom, p.prenom as aquarius_prenom , tas.nom as authorised_nom\n"
+ ", tas.prenom as authorised_prenom , tas.interdiction as IPerAut_interdiction, tas.telephone, tas.email, tas.AUTORISATION_PERSONNE_ID as microfusaautoriseeID, 1 as modifiable\n"
+ ", tas.interdiction as IPerAutEx_interdiction, tas.dt_debut, tas.dt_Fin, tas.autorisation_id as autorisationID\n"
+ "from aquarius_du_menage_courant emc\n"
+ "inner join microfusa p on emc.microfusa_id = p.microfusa_id\n"
+ "inner join toutes_autorisations tas on p.microfusa_Id = tas.aquarius_id\n"
+ " \n"
+ "union\n"
+ " \n"
+ "select distinct p.microfusa_Id as aquarius_id, p.nom as aquarius_nom, p.prenom as aquarius_prenom , par.nom as authorised_nom\n"
+ ", par.prenom as authorised_prenom , 0 as IPerAut_interdiction, par.telephone, par.email, null as microfusaautoriseeID, 0 as modifiable\n"
+ ", 0 as IPerAutEx_interdiction, null as dt_debut, null as dt_Fin, null as autorisationID\n"
+ "from aquarius_du_menage_courant emc\n"
+ "inner join microfusa p on emc.microfusa_id = p.microfusa_id\n"
+ "inner join (\n"
+ "select p.NOM, p.PRENOM, ph.telephone, e.* from microfusa from microfusa p\n"
+ "left outer join phone ph on p.microfusa_id = ph.microfusa_id\n"
+ "left outer join email e on p.microfusa_id = e.microfusa_id\n"
+ "where p.microfusa_id in (select * from parents_du_menage_courant)\n"
+ ") par on 1 = 1\n"
+ ")\n"
+ "order by aquarius_id;")
but when I run the query in a test I have this error, but no message:
EL Warning]: 2020-10-17 20:16:38.297--UnitOfWork(522173599)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.7.v20200504-69f2c2b80d): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "with....
at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
at org.h2.message.DbException.getSyntaxError(DbException.java:243)
at org.h2.command.Parser.getSyntaxError(Parser.java:1053)
at org.h2.command.Parser.read(Parser.java:4995)
at org.h2.command.Parser.readTableFilter(Parser.java:1893)
at org.h2.command.Parser.readJoin(Parser.java:2412)
at org.h2.command.Parser.parseJoinTableFilter(Parser.java:2839)
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2828)
at org.h2.command.Parser.parseSelect(Parser.java:2959)
at org.h2.command.Parser.parseQuerySub(Parser.java:2817)
at org.h2.command.Parser.parseSelectUnion(Parser.java:2666)
at org.h2.command.Parser.readTableFilter(Parser.java:1892)
at org.h2.command.Parser.parseSelectFromPart(Parser.java:2827)
at org.h2.command.Parser.parseSelect(Parser.java:2959)
at org.h2.command.Parser.parseQuerySub(Parser.java:2817)
at org.h2.command.Parser.parseSelectUnion(Parser.java:2649)
at org.h2.command.Parser.parseWithQuery(Parser.java:6800)
at org.h2.command.Parser.parseWith1(Parser.java:6752)
at org.h2.command.Parser.parseWith(Parser.java:6722)
at org.h2.command.Parser.parseWithStatementOrQuery(Parser.java:2633)
at org.h2.command.Parser.parsePrepared(Parser.java:872)
at org.h2.command.Parser.parse(Parser.java:843)
at org.h2.command.Parser.parse(Parser.java:819)
at org.h2.command.Parser.prepareCommand(Parser.java:738)
at org.h2.engine.Session.prepareLocal(Session.java:657)
at org.h2.engine.Session.prepareCommand(Session.java:595)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:352)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1595)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1544)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:806)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:628)
... 85 more

You have a typo in
+ "and dct.code in ('EMAIL', 'EMAIL2)\n"
it should be
+ "and dct.code in ('EMAIL', 'EMAIL2')\n"
It is possible that there are other problems, but you need to post a complete error message, in your question it is truncated and almost useless. For example, you can try to execute this query (with fixed typo) by using the JDBC directly.
In the edited question you have another error. from microfusa from microfusa p should be from microfusa p.

Related

I am getting android.database.sqlite.SQLiteException "SELECTamountFROMnilanjan_tableWHEREName": syntax error (code 1):

I am getting android.database.sqlite.SQLiteException "SELECTamountFROMnilanjan_tableWHEREName": syntax error (code 1):
public Cursor getItemID(String name)
{
SQLiteDatabase db =this.getWritableDatabase();
String query = "SELECT" + COL_3 + "FROM" + TABLE_NAME +"WHERE" + COL_2 + " = '" + name + "'" ;
Cursor data = db.rawQuery(query,null);
return data;
}
"SELECTamountFROMnilanjan_tableWHEREName" from your error message is the result of your concatination to be executed as query.
you need to add spaces between your keywords to create a valid query.:
"SELECT " + COL_3 + " FROM " + TABLE_NAME + " WHERE " + COL_2 + " = '" + name + "'" ;

Converting ASP script to TSQL Stored Procedure

I am trying to convert this to a stored procedure in SQL Server from an ASP script. I have tried to follow the procedures outlined at http://www.sommarskog.se/dyn-search.html, but due to lack of understanding; I can't figure out what is needed to create the search string. Once I can figure that out, then I can attach the string to the rest of the dynamic sql. I have the list to table function, and the intList_tabletype defined in the database, as well as the rest of the SP. The searchArr variable can be one keyword, a delimited list of keywords or a phrase. Any help will be greatly appreciated. Thanks
'SQL - Keywords
If Len(strSearch) > 0 Then
'Create array of keywords. If we're doing a PHRase
'search, an array with only one position is created
'containing the entire search string. If an AND or
'an OR "keyword" search is being performed, each word
'is put into it's own array position.
If strSearchType = "PHR" Then
searchArr(0) = Trim(strSearch)
Else
searchArr = strSearch.Split(" "c)
End If
'Keyword search SQL
tmpSQL1 = "(Brewery.BreweryName LIKE "
tmpSQL2 = "(Products.description LIKE "
tmpSQL3 = "(Products.Notes LIKE "
tmpSQL4 = "(Products.SKU LIKE "
For i = 0 To UBound(searchArr)
If i = UBound(searchArr) Then
tmpSQL1 = tmpSQL1 & "'%" & searchArr(i) & "%')"
tmpSQL2 = tmpSQL2 & "'%" & searchArr(i) & "%')"
tmpSQL3 = tmpSQL3 & "'%" & searchArr(i) & "%')"
tmpSQL4 = tmpSQL4 & "'%" & searchArr(i) & "%')"
Else
tmpSQL1 = tmpSQL1 & "'%" & searchArr(i) & "%' " & strSearchType & " Brewery.BreweryName LIKE "
tmpSQL2 = tmpSQL2 & "'%" & searchArr(i) & "%' " & strSearchType & " Products.description LIKE "
tmpSQL3 = tmpSQL3 & "'%" & searchArr(i) & "%' " & strSearchType & " Products.Notes LIKE "
tmpSQL4 = tmpSQL4 & "'%" & searchArr(i) & "%' " & strSearchType & " Products.SKU LIKE "
End If
Next
'Put it all together
searchSQL = searchSQL & "AND (" & tmpSQL1 & " OR " & tmpSQL2 & " OR " & tmpSQL3 & " OR " & tmpSQL4 & ") "
End If
When i run this script on the web page, I get this string.
Single keyword Or Phrase
AND ((Brewery.BreweryName LIKE '%Bud%') OR (Products.description LIKE '%Bud%') OR (Products.Notes LIKE '%Bud%') OR (Products.SKU LIKE '%Bud%') OR (Brands.Brand LIKE '%Bud%'))
Multiple Keywords
AND ((Brewery.BreweryName LIKE '%Bud%' OR Brewery.BreweryName LIKE '%Busch%') OR (Products.description LIKE '%Bud%' OR Products.description LIKE '%Busch%') OR (Products.Notes LIKE '%Bud%' OR Products.Notes LIKE '%Busch%') OR (Products.SKU LIKE '%Bud%' OR Products.SKU LIKE '%Busch%') OR (Brands.Brand LIKE '%Bud%' OR Brands.Brand LIKE '%Busch%'))
This is the Procedure I have come up so far.
ALTER PROCEDURE [dbo].[GetProductsBySearch]
#idProduct int = NULL,
#sku nvarchar(20) = NULL,
#breweryname nvarchar(40) = NULL,
#brand nvarchar(40) = NULL,
#country nvarchar(15) = NULL,
#prodname nvarchar(40) = NULL,
#searchStr nvarchar(MAX) = NULL,
--#PHRtbl intlist_tbltype READONLY,
#sortExpression nvarchar(50) = NULL,
#startRowIndex int,
#maximumRows int,
#idLocation int = NULL,
#idBrand int = NULL,
#strSearchType nvarchar(5) = ' OR ',
#debug bit = 0
AS
DECLARE #sql nvarchar(MAX),
#paramlist nvarchar(4000),
#nl char(2) = char(13) + char(10)
DECLARE #PHRtbl TABLE
( PK INT IDENTITY(1,1) PRIMARY KEY,
item NVARCHAR (MAX)
)
IF #sortExpression IS NULL
SET #sortExpression = 'sku'
INSERT INTO #PHRtbl
SELECT item FROM [dbo].[udf_List2Table](#searchStr,',')
DECLARE #i INT
SELECT #i = MIN(PK) FROM #PHRtbl
DECLARE #max INT
SELECT #max = MAX(PK) FROM #PHRtbl
DECLARE #SearchSQL AS NVARCHAR(MAX) = ''
DECLARE #item AS NVARCHAR(MAX) = NULL
DECLARE #tmpSQL1 AS NVARCHAR(MAX) = '(Brewery.BreweryName LIKE '
DECLARE #tmpSQL2 AS NVARCHAR(MAX) = '(Products.description LIKE '
DECLARE #tmpSQL3 AS NVARCHAR(MAX) = '(Products.Notes LIKE '
DECLARE #tmpSQL4 AS NVARCHAR(MAX) = '(Products.SKU LIKE '
DECLARE #tmpSQL5 AS NVARCHAR(MAX) = '(Brands.Brand LIKE '
SELECT #sql =
'SELECT SKU, productName, imgUrlThumb, Size, ProdType, CanType,
CanManufacturer, breweryName, locName, CountryFlag, Brand
FROM
(SELECT Products.SKU, Products.Description as productName, Products.imgUrlThumb, LookupSize.Size, ProdType.ProdType, CanTypes.Description AS CanType,
CanManufacturer.CanManufacturer, brewery.breweryName, Locations.locName, Locations.CountryFlag, Brands.Brand,
ROW_NUMBER() OVER(ORDER BY ' + #sortExpression + ') AS RowNum
FROM Products INNER JOIN
brewery ON Products.idBrewery = brewery.idBrewery INNER JOIN
CanManufacturer ON Products.idCanManufacturer = CanManufacturer.idCanManufacturer INNER JOIN
CanTypes ON Products.idCanType = CanTypes.idCanType INNER JOIN
Locations ON brewery.idLocation = Locations.idLocation INNER JOIN
LookupSize ON Products.idSize = LookupSize.idSize INNER JOIN
ProdType ON Products.idProdType = ProdType.idProdtype INNER JOIN
CatProd ON Products.idProduct = CatProd.idProduct INNER JOIN
Categories ON CatProd.idCategory = Categories.idCategory INNER JOIN
Brands ON Brands.idBrand = Products.idBrand
WHERE 1 = 1 ' + #nl
IF #searchStr IS NOT NULL
WHILE #i <= #max
BEGIN
SELECT #item = item FROM #PHRtbl WHERE PK = #i
IF (#i = #max)
BEGIN
SET #tmpSQL1 += ''%'' & #item + ''%')'
SET #tmpSQL2 += ''%'' & #item + ''%')'
SET #tmpSQL3 += ''%'' & #item + ''%')'
SET #tmpSQL4 += ''%'' & #item + ''%')'
SET #tmpSQL5 += ''%'' & #item + ''%')'
END
ELSE
BEGIN
SET #tmpSQL1 += ''%'' & #item + ''%')' + #strSearchType + ' Brewery.BreweryName LIKE '
SET #tmpSQL2 += ''%'' & #item + ''%')' + #strSearchType + ' Products.description LIKE '
SET #tmpSQL3 += ''%'' & #item + ''%')' + #strSearchType + ' Products.Notes LIKE '
SET #tmpSQL4 += ''%'' & #item + ''%')' + #strSearchType + ' Products.SKU LIKE '
SET #tmpSQL5 += ''%'' & #item + ''%')' + #strSearchType + ' Brands.Brand LIKE '
END
SELECT #item = NULL
SET #i = #i + 1
END
--moved this out of the while loop
-- put it all together
SET #SearchSQL = #SearchSQL + 'AND (' + #tmpSQL1 + ' OR ' + #tmpSQL2 + ' OR ' + #tmpSQL3 + ' OR ' + #tmpSQL4 + ' OR ' + #tmpSQL5 + ') ' + #nl
-- Uncommend below to check the SQL
PRINT #SearchSQL
SELECT #sql += ' #SearchSQL' + #nl
IF #idProduct IS NOT NULL
SELECT #sql += ' AND Products.idProduct = #idProduct' + #nl
IF #idBrand IS NOT NULL
SELECT #sql += ' AND Products.idBrand = #idBrand' + #nl
IF #idLocation IS NOT NULL
SELECT #sql += ' AND Brewery.idLocation = #idLocation' + #nl
IF #brand IS NOT NULL
SELECT #sql += ' AND Brands.brand LIKE ''%'' + #brand + ''%''' + #nl
IF #breweryname IS NOT NULL
SELECT #sql += ' AND Brewery.breweryName LIKE ''%'' + #breweryname + ''%''' + #nl
IF #prodname IS NOT NULL
SELECT #sql += ' AND Products.Description LIKE ''%'' + #prodname + ''%''' + #nl
IF #searchStr IS NOT NULL
SELECT #sql += ' #searchStr' + #nl
SELECT #sql += ') AS myData
WHERE RowNum BETWEEN (' + CONVERT(nvarchar(10), #startRowIndex) +
' - 1) * ' + CONVERT(nvarchar(10),#MaximumRows) + ' AND (((' + CONVERT(nvarchar(10), #startRowIndex) + ' - 1) * '
+ CONVERT(nvarchar(10), #maximumRows) + ' + 1) + ' + CONVERT(nvarchar(10), #maximumRows) + ') - 1'
--IF EXISTS (SELECT * FROM #PHRtbl)
-- SELECT #sql += ' AND o.EmployeeID IN (SELECT val FROM #employeetbl)' + #nl
--SELECT #sql += ' ORDER BY o.OrderID' + #nl
IF #debug = 1
PRINT #sql
SELECT #paramlist = '#idProduct int,
#sku nvarchar(20) ,
#breweryname nvarchar(40) ,
#brand nvarchar(40) ,
#country nvarchar(15) ,
#prodname nvarchar(40) ,
#searchStr nvarchar(MAX) ,
#PHRtbl intlist_tbltype READONLY,
#sortExpression nvarchar(50),
#startRowIndex int,
#maximumRows int,
#idLocation int,
#idBrand int,
#strSearchType nvarchar(5)'
EXEC sp_executesql #sql, #paramlist,
#idProduct,#sku,#breweryname,#brand,#country,#prodname,#searchStr,#PHRtbl,#sortExpression,
#startRowIndex,#maximumRows,#idLocation,#idBrand
Now when I try to execute the procedure I am getting the following errors. Due to the While loop to build the string. Know I have to figure out what is causing the error, and build the string and attach it #SQL that is being built.
**Msg 402, Level 16, State 1, Procedure GetProductsBySearch, Line 75
The data types varchar and varchar are incompatible in the modulo operator.
**
I was able to get the procedure to compile in the database by changing the quotes in this part.
IF (#i = #max)
BEGIN
SET #tmpSQL1 += '''%' + #item + '%'')'
SET #tmpSQL2 += '''%' + #item + '%'')'
SET #tmpSQL3 += '''%' + #item + '%'')'
SET #tmpSQL4 += '''%' + #item + '%'')'
SET #tmpSQL5 += '''%' + #item + '%'')'
END
ELSE
BEGIN
SET #tmpSQL1 += '''%' + #item + '%'')' + #strSearchType + ' Brewery.BreweryName LIKE '
SET #tmpSQL2 += '''%' + #item + '%'')' + #strSearchType + ' Products.description LIKE '
SET #tmpSQL3 += '''%' + #item + '%'')' + #strSearchType + ' Products.Notes LIKE '
SET #tmpSQL4 += '''%' + #item + '%'')' + #strSearchType + ' Products.SKU LIKE '
SET #tmpSQL5 += '''%' + #item + '%'')' + #strSearchType + ' Brands.Brand LIKE '
END
Now when I execute it I get this error.
Msg 206, Level 16, State 2, Line 0
Operand type clash: table is incompatible with nvarchar
I suspect the above section is the culprit. I have a Print Statement to Print the Strings as they are built, the error comes up first. Where or how do I see what the #SearchStr variable looks like?
I have extracted that section of code into a new window. With one value in the searchStr variable I get the the correct build of the searchSQL.
AND ((Brewery.BreweryName LIKE '%Bud%')
OR (Products.description LIKE '%Bud%')
OR (Products.Notes LIKE '%Bud%')
OR (Products.SKU LIKE '%Bud%')
OR (Brands.Brand LIKE '%Bud%')
)
However when I add another item to the list I get this:
AND ((Brewery.BreweryName LIKE '%Bud%') OR Brewery.BreweryName LIKE
OR (Products.description LIKE '%Bud%') OR Products.description LIKE
OR (Products.Notes LIKE '%Bud%') OR Products.Notes LIKE
OR (Products.SKU LIKE '%Bud%') OR Products.SKU LIKE
OR (Brands.Brand LIKE '%Bud%') OR Brands.Brand LIKE
)
I am almost there. Just need to figure what part of the string needs readjusting to get it right
AND ((Brewery.BreweryName LIKE '%Bud%') OR Brewery.BreweryName LIKE
'%Busch%')
OR (Products.description LIKE '%Bud%') OR Products.description LIKE
'%Busch%')
OR (Products.Notes LIKE '%Bud%') OR Products.Notes LIKE
'%Busch%')
OR (Products.SKU LIKE '%Bud%') OR Products.SKU LIKE
'%Busch%')
OR (Brands.Brand LIKE '%Bud%') OR Brands.Brand LIKE
'%Busch%')
)

Syntax error (missing operator) in query expression for date in asp.net

the date in excel is of the date time format and the selected date is also date time format but wots the problem
OleDbDataAdapter da1 = new OleDbDataAdapter("SELECT [ProjectId],[ProjectName],[ManagerID],[ManagerName],[AllocationStartDate],[AllocationEndDate],[horizontalshortname] FROM [" + getExcelSheetName + #"] where [horizontalshortname]="+ "'" + TextBox_Horizontal.Text + "'"
+ " AND [Isonsite]=" + "'" + DropDownList_Location.SelectedItem.Text + "'"
+ " AND [AllocationStartDate]>="+Calendar1.SelectedDate
+ " AND [AllocationEndDate]<="+Calendar2.SelectedDate
, conn);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
//if (ds.Tables[0] != null )
if (ds1.Tables[0].Rows.Count > 0)
{
GridView_Utilization_Search.Visible = true;
GridView_Utilization_Search.DataSource = ds1.Tables[0];
GridView_Utilization_Search.DataBind();
}
else
{
GridView_Utilization_Search.Visible = false;
}

Export data from database

I have few tables in database that are having huge amount of data. My need is
1 : To query data exist for more than one year.
2 : Export and archive them to some file.
3 : At any point of time I can insert those data back to database.
The data may or may not contain COMMA, so not sure if I should export them to csv format.
Which is the best file format I should go for ??
What should be the file size limitation here ??
This script exports rows from specified tables to INSERT statement for any tables structure. So, you'll just need to copy the result and run it in sql document of SSMS -
DECLARE
#TableName SYSNAME
, #ObjectID INT
, #IsImportIdentity BIT = 1
DECLARE [tables] CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT
'[' + s.name + '].[' + t.name + ']'
, t.[object_id]
FROM (
SELECT DISTINCT
t.[schema_id]
, t.[object_id]
, t.name
FROM sys.objects t WITH (NOWAIT)
JOIN sys.partitions p WITH (NOWAIT) ON p.[object_id] = t.[object_id]
WHERE p.[rows] > 0
AND t.[type] = 'U'
) t
JOIN sys.schemas s WITH (NOWAIT) ON t.[schema_id] = s.[schema_id]
WHERE t.name IN ('<your table name>')
OPEN [tables]
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
DECLARE
#SQLInsert NVARCHAR(MAX)
, #SQLColumns NVARCHAR(MAX)
, #SQLTinyColumns NVARCHAR(MAX)
WHILE ##FETCH_STATUS = 0 BEGIN
SELECT
#SQLInsert = ''
, #SQLColumns = ''
, #SQLTinyColumns = ''
;WITH cols AS
(
SELECT
c.name
, datetype = t.name
, c.column_id
FROM sys.columns c WITH (NOWAIT)
JOIN sys.types t WITH (NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
WHERE c.[object_id] = #ObjectID
AND (c.is_identity = 0 OR #IsImportIdentity = 1)
AND c.is_computed = 0
AND t.name NOT IN ('xml', 'geography', 'geometry', 'hierarchyid')
)
SELECT
#SQLInsert = 'INSERT INTO ' + #TableName + ' (' + STUFF((
SELECT ', [' + c.name + ']'
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + ')'
, #SQLTinyColumns = STUFF((
SELECT ', ' + c.name
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
, #SQLColumns = STUFF((SELECT CHAR(13) +
CASE
WHEN c.datetype = 'uniqueidentifier'
THEN ' + '', '' + ISNULL('''''''' + CAST([' + c.name + '] AS VARCHAR(MAX)) + '''''''', ''NULL'')'
WHEN c.datetype IN ('nvarchar', 'varchar', 'nchar', 'char', 'varbinary', 'binary')
THEN ' + '', '' + ISNULL('''''''' + CAST(REPLACE([' + c.name + '], '''''''', '''''''''''' ) AS NVARCHAR(MAX)) + '''''''', ''NULL'')'
WHEN c.datetype = 'datetime'
THEN ' + '', '' + ISNULL('''''''' + CONVERT(VARCHAR, [' + c.name + '], 120) + '''''''', ''NULL'')'
ELSE
' + '', '' + ISNULL(CAST([' + c.name + '] AS NVARCHAR(MAX)), ''NULL'')'
END
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 10, 'CHAR(13) + '', ('' +')
DECLARE #SQL NVARCHAR(MAX) = '
SET NOCOUNT ON;
DECLARE
#SQL NVARCHAR(MAX) = ''''
, #x INT = 1
, #count INT = (SELECT COUNT(1) FROM ' + #TableName + ')
IF EXISTS(
SELECT 1
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(''tempdb..#import'')
)
DROP TABLE #import;
SELECT ' + #SQLTinyColumns + ', ''RowNumber'' = ROW_NUMBER() OVER (ORDER BY ' + #SQLTinyColumns + ')
INTO #import
FROM ' + #TableName + '
WHILE #x < #count BEGIN
SELECT #SQL = ''VALUES '' + STUFF((
SELECT ' + #SQLColumns + ' + '')''' + '
FROM #import
WHERE RowNumber BETWEEN #x AND #x + 9
FOR XML PATH, TYPE, ROOT).value(''.'', ''NVARCHAR(MAX)''), 1, 2, CHAR(13) + '' '') + '';''
PRINT(''' + #SQLInsert + ''')
PRINT(#SQL)
SELECT #x = #x + 10
END'
EXEC sys.sp_executesql #SQL
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
END
CLOSE [tables]
DEALLOCATE [tables]
In output you get something like this (AdventureWorks.Person.Address):
INSERT INTO [Person].[Address] ([AddressID], [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate])
VALUES
(1, '1970 Napa Ct.', NULL, 'Bothell', 79, '98011', '9AADCB0D-36CF-483F-84D8-585C2D4EC6E9', '2002-01-04 00:00:00')
, (2, '9833 Mt. Dias Blv.', NULL, 'Bothell', 79, '98011', '32A54B9E-E034-4BFB-B573-A71CDE60D8C0', '2003-01-01 00:00:00')
, (3, '7484 Roundtree Drive', NULL, 'Bothell', 79, '98011', '4C506923-6D1B-452C-A07C-BAA6F5B142A4', '2007-04-08 00:00:00')
, (4, '9539 Glenside Dr', NULL, 'Bothell', 79, '98011', 'E5946C78-4BCC-477F-9FA1-CC09DE16A880', '2003-03-07 00:00:00')
, (5, '1226 Shoe St.', NULL, 'Bothell', 79, '98011', 'FBAFF937-4A97-4AF0-81FD-B849900E9BB0', '2003-01-20 00:00:00')
, (6, '1399 Firestone Drive', NULL, 'Bothell', 79, '98011', 'FEBF8191-9804-44C8-877A-33FDE94F0075', '2003-03-17 00:00:00')
, (7, '5672 Hale Dr.', NULL, 'Bothell', 79, '98011', '0175A174-6C34-4D41-B3C1-4419CD6A0446', '2004-01-12 00:00:00')
, (8, '6387 Scenic Avenue', NULL, 'Bothell', 79, '98011', '3715E813-4DCA-49E0-8F1C-31857D21F269', '2003-01-18 00:00:00')
, (9, '8713 Yosemite Ct.', NULL, 'Bothell', 79, '98011', '268AF621-76D7-4C78-9441-144FD139821A', '2006-07-01 00:00:00')
, (10, '250 Race Court', NULL, 'Bothell', 79, '98011', '0B6B739D-8EB6-4378-8D55-FE196AF34C04', '2003-01-03 00:00:00');
UPDATE:
And this script exports rows from specified tables to CSV format in output window for any tables structure.
DECLARE
#TableName SYSNAME
, #ObjectID INT
DECLARE [tables] CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT
'[' + s.name + '].[' + t.name + ']'
, t.[object_id]
FROM (
SELECT DISTINCT
t.[schema_id]
, t.[object_id]
, t.name
FROM sys.objects t WITH (NOWAIT)
JOIN sys.partitions p WITH (NOWAIT) ON p.[object_id] = t.[object_id]
WHERE p.[rows] > 0
AND t.[type] = 'U'
) t
JOIN sys.schemas s WITH (NOWAIT) ON t.[schema_id] = s.[schema_id]
WHERE t.name IN ('<your table name>')
OPEN [tables]
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
DECLARE
#SQLInsert NVARCHAR(MAX)
, #SQLColumns NVARCHAR(MAX)
, #SQLTinyColumns NVARCHAR(MAX)
WHILE ##FETCH_STATUS = 0 BEGIN
SELECT
#SQLInsert = ''
, #SQLColumns = ''
, #SQLTinyColumns = ''
;WITH cols AS
(
SELECT
c.name
, datetype = t.name
, c.column_id
FROM sys.columns c WITH (NOWAIT)
JOIN sys.types t WITH (NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
WHERE c.[object_id] = #ObjectID
AND c.is_computed = 0
AND t.name NOT IN ('xml', 'geography', 'geometry', 'hierarchyid')
)
SELECT
#SQLTinyColumns = STUFF((
SELECT ', [' + c.name + ']'
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 2, '')
, #SQLColumns = STUFF((SELECT CHAR(13) +
CASE
WHEN c.datetype = 'uniqueidentifier'
THEN ' + '';'' + ISNULL('''' + CAST([' + c.name + '] AS VARCHAR(MAX)) + '''', ''NULL'')'
WHEN c.datetype IN ('nvarchar', 'varchar', 'nchar', 'char', 'varbinary', 'binary')
THEN ' + '';'' + ISNULL('''' + CAST(REPLACE([' + c.name + '], '''', '''''''') AS NVARCHAR(MAX)) + '''', ''NULL'')'
WHEN c.datetype = 'datetime'
THEN ' + '';'' + ISNULL('''' + CONVERT(VARCHAR, [' + c.name + '], 120) + '''', ''NULL'')'
ELSE
' + '';'' + ISNULL(CAST([' + c.name + '] AS NVARCHAR(MAX)), ''NULL'')'
END
FROM cols c
ORDER BY c.column_id
FOR XML PATH, TYPE, ROOT).value('.', 'NVARCHAR(MAX)'), 1, 10, 'CHAR(13) + '''' +')
DECLARE #SQL NVARCHAR(MAX) = '
SET NOCOUNT ON;
DECLARE
#SQL NVARCHAR(MAX) = ''''
, #x INT = 1
, #count INT = (SELECT COUNT(1) FROM ' + #TableName + ')
IF EXISTS(
SELECT 1
FROM tempdb.dbo.sysobjects
WHERE ID = OBJECT_ID(''tempdb..#import'')
)
DROP TABLE #import;
SELECT ' + #SQLTinyColumns + ', ''RowNumber'' = ROW_NUMBER() OVER (ORDER BY ' + #SQLTinyColumns + ')
INTO #import
FROM ' + #TableName + '
WHILE #x < #count BEGIN
SELECT #SQL = STUFF((
SELECT ' + #SQLColumns + ' + ''''' + '
FROM #import
WHERE RowNumber BETWEEN #x AND #x + 9
FOR XML PATH, TYPE, ROOT).value(''.'', ''NVARCHAR(MAX)''), 1, 1, '''')
PRINT(#SQL)
SELECT #x = #x + 10
END'
EXEC sys.sp_executesql #SQL
FETCH NEXT FROM [tables] INTO
#TableName
, #ObjectID
END
CLOSE [tables]
DEALLOCATE [tables]
In output you get something like this (AdventureWorks.Person.Person):
1;EM;0;NULL;Ken;J;Sánchez;NULL;0;92C4279F-1207-48A3-8448-4636514EB7E2;2003-02-08 00:00:00
2;EM;0;NULL;Terri;Lee;Duffy;NULL;1;D8763459-8AA8-47CC-AFF7-C9079AF79033;2002-02-24 00:00:00
3;EM;0;NULL;Roberto;NULL;Tamburello;NULL;0;E1A2555E-0828-434B-A33B-6F38136A37DE;2001-12-05 00:00:00
4;EM;0;NULL;Rob;NULL;Walters;NULL;0;F2D7CE06-38B3-4357-805B-F4B6B71C01FF;2001-12-29 00:00:00
5;EM;0;Ms.;Gail;A;Erickson;NULL;0;F3A3F6B4-AE3B-430C-A754-9F2231BA6FEF;2002-01-30 00:00:00
6;EM;0;Mr.;Jossef;H;Goldberg;NULL;0;0DEA28FD-EFFE-482A-AFD3-B7E8F199D56F;2002-02-17 00:00:00
Try using the bcp command line utility, which is very efficient at handling import/export for large data sets:
bcp "select * from [YourTable]" queryout data.dat -n -S YourServer -d "YourDatabase" -T
-T means Trusted Authentication. -n means native format, so you don't need to worry about data types, commas, etc. However, this does mean you can't view the data in an editor; it's only available for loading back into SQL Server. You can use -c instead if you want CSV format.
To import back in:
bcp "[YourTable]" in data.dat -n -S YourServer -d "YourDatabase" -T

SQLite Select mix column, I can't do it

My code is
mDB.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_Name + KEY_Familyname + " as " + KEY_Fullname}, null, null, null, null, null);
So it's not do
Error: "KEY_Name + KEY_Familyname + " as " + KEY_Fullname" ????
Use || operator to concatenate strings
select KEY_Name || KEY_Familyname as KEY_Fullname

Resources