SQL Server select for update empty value - sql-server

Hi I tried to update an image in a varbinary column with the following example How to insert a blob into a database using sql server management studio
Yet to do a select after doing update the varbinary column is blank, any idea why this happens?
UPDATE digital_files
SET digital_file = (
SELECT *
FROM OPENROWSET( BULK N'C:\Program Files (x86)\Apache Software Foundation\Apache Tomcat 6.0.26\bin\celebrity-pictures-spongebob-patrick-meth-that.jpg',
SINGLE_BLOB) AS IMAGE)
WHERE digital_id = 1

Related

Load image file on miscrosoft SQL Server

How can we load a .png image into a SQL Server table?
I tried this but it didn't work:
INSERT INTO tableName(state, image)
VALUES ('Ready',
(SELECT * FROM OPENROWSET (BULK 'imagePath'), SINGLE_BLOB) As image));
Here is an example to save Image file in a SQL Server table, first of all we need to have a column that can handle Image files.
VARBINARY is data type that we can use to store Images or any other type of files.
Let's create the table with Varbinary Datatype and then import the image by using below script.
CREATE TABLE dbo.TableName
(ID INT Identity(1, 1)
,NAME VARCHAR(100)
,Image VARBINARY(MAX))
GO
--Import Image to SQL Server
INSERT INTO dbo.TableName
(NAME
,Image
)
SELECT 'Capture1.PNG'
,BulkColumn
FROM Openrowset(BULK 'C:\MyImage.PNG', Single_Blob) AS Image
The image path must be accessible by the SQL server. The SQL server can access files within its server folder. Locate the server folder. The folder name starts with MSSQLXX.MyDatabaseServer. If you had not changed the default installation path, you should be able to find it in "C:\Program Files\Microsoft SQL Server" Place your image file in "C:\Program Files\Microsoft SQL Server\MSSQLXX.MyDatabaseServer\MSSQL".
Specify the image path in sql like this ->
FROM Openrowset(BULK 'C:\Program Files\Microsoft SQL Server\MSSQLXX.MyDatabaseServer\MSSQL\MyImage.PNG', Single_Blob) AS Image
If you still encounter error message "file does not exist or you do not have the rights to access the file", try placing your image file in the DATA folder where your primary Data File is stored.
CREATE TABLE dbo.ImageStore
(ID INT Identity(1, 1)
,[NAME] VARCHAR(100)
,[Image] VARBINARY(MAX))
GO
--Insert image to SQL server table using bulk import.
INSERT INTO dbo.ImageStore
([NAME]
,[Image]
)
SELECT 'Error_image_1.PNG'
,BulkColumn
FROM Openrowset(BULK 'C:\Issue_dataload_two Graphs.PNG', Single_Blob) AS Image
select * from [dbo].[ImageStore]
This will store the image in binary format in your database. This works for me.
You can also paste the image data in as a hex string. This is useful if you don't have access to a file system on the SQL server.
Open the binary image file (e.g. jpeg) in a hex editor such as HxD and view the file as Hexadecimal. Copy the hex and paste into a query like this - you'll have to do a "find / replace" to remove some whitepace.
drop table if exists #img
create table #img
( icon varbinary(max))
insert into #img(icon)
select
icon=convert(varbinary(max),'0x'+
'FFD8FFE000104A46494600010101004800480000FFDB00430006040506050406060506070706080A100A0A09090A140E0F0C1017141818171416161A1D251F1A1B231C1616202C20232627292A29191F2D302D283025282928FFC0000B080033003201011100FFC4001A000100030003000000000000000000000006000405030708FFC4002E1000020201030303030304030000000000010203040506111200132107223114153223335108161741244271FFDA0008010100003F00F54F46ADEA59ECDA9A9699C5CB95B30BB472D895CD6A513A9D8AB4E558B9DC3A911249C5D78BF0F9EAAC3A73534F24F364F5CDE8E4770638B158EAB0411A0551B01324EE49218925FF00EDB0036EB97FB6B3717EA41AE33724ABEE44B5568BC2CC3E03AA57462BFC8575246FB329F22A36A4CE69AA162CEB9C7D6931F5FB924996C3079238E2524879ABB6F2C7EDE1FB66600F32C5146FD35EA74435C59BB93B55B4A61A6BD52CE410C9772549D03E36A83E5BDDE449290D1C640DC7EA38FDA20AAA95A0A7561AB4E18A0AD022C7145120548D146C1540F000000007595A7355E0353497934F6628E49A8BAC760D5984810B2865F23C1041F91B8DC30DF756026AFD5584D1D866CAEA5C845428ABAC7DC70CC59DBE155541663F27600F804FC027AD5A9660B9561B54E68A7AD3A2C914B1386491186E1948F04104104742B035A9685D509A7E9C32C184CDBC9631B1A23BC55AD2AB3CF003F8C51B2812C683C72163E0705E9D744340CAF91C9EADCBC904A91CF967A956498A97686B2240CA362488C4E965954EDF9B36C399DD7F5E65FE91346EA8D2D9FD5A35053BD8BACA90C06B58ABB259943BED2472FC30401C7B0956EE83BF81BB0FEAD74EE63527A65521C063ACE46C56C9C562486B2192411F6E54DC20F2DEE75F0013B127E0123B03D28A36B1BE99695A790367EAE1C6575912CA049226EDAFE9950ABB70FC76237D946E49DC99EA9FE97A7D9BBCBFBB8C87EEB083F8B4B558588D5BF952F12860362413B107C855D0AF4F27B4BA7F3F5E1A7C6FD3CD651522B3288D6467B52CD192579322B2CA87765DF62182952A5AAFA45AD731ADA1D4536670D5B11F6DC9BE356BC768CF22C91A27755C850A7663E194EC41DB6F6F277FD4E8AFAA5A9E4D19A1327A8615ACED47B4E63B05C2CAA6545280A0243302554EC4062A5BDA0F595AC2F65323E876A8B59EC47D9B252616FF00768FD4AD8ED6D1C817F517C36EA0378F8DF6FF005D3AA95D2AD586BC46568E1458D4CB2348E401B0E4EC4B31FE49249F927A1F39ABA57D417B966C76286A8ED57DE59C88D721129540AA491CA68871DC051BD55079348A3AC5F502A5DD1BAA0FA8782A72DDAC6AFD36A1A113A45CEAC6AD20B6BBB2869A30BC406E4595B88E1E4F4EB4CEA2C3EA8C54792D3D91AD90A4FB0EE40E1B8B150DC587CAB00C3756008DFC81D5BCA64A8E2284B7B2B76B51A516DDCB166558A34DC803766200DC903FF48EBAAB0D77FCC1AAB1B9886B594D03829BEAA9493C7D87C864A37654997E58C08BB91F86EEDB306E255556AF6FBF6AAC2698AD3598FE966833991648BD9D889D8C11990A9019EC468DC46C4A432F91E3935EB3F3F86C76A1C35BC4E6AA45731D693B734320F0C3E4791E41040208D8820104103A2B5B319BD2121ADAC5E5CAE265B4E2B67608541AD0F12FFF0039102AC61762BDE41C3600B88FE5B8AC7A7DE9E6B29A9EA1AD8CC6D9944CF661C9E26C181A4979EED2196BB2F360EBF9124820EDB127AA9FE1DF4DB1567EF3770559BE8E1F74D92B93588638923E039ACCEC9C55000390D9428DB6D86DB736AC9F312415F43568B2B1CAE526CB3B1142AA716DA4571B7D490C38F6E23E0821DE3F07ADAD3D82AB8286D0AD2599EC5C9BEA6DD9B3299249E6E0A85CFF00A5F6A28E281514001540F1D6AF53A9D15BBE9E694B7956CA7D92B55CA37709BD44B54B05A460CEDDD88AB723C762DBEFB338DF67606A47E9668AFAF7BD6F4FD6C95D93973B19477BD23EE107B9A76727611205DFF11CB8EDC9B76BD4EA75FFD9'
, 1)
select * from #img

copy results of a view query into azure sql

I'm trying to create historic data for my company; previously i asked how to copy a table with a timestamp into the same mssql database. realistically, it dawned on me that what i really need to do is the following
1) log onto my local mssql box
2) run a query of a view (select * from view_whatever)
3) copy the results of the query and add a timestamp into another database, hosted using azure SQL
if i were doing this from the same database to another table, i'd something like this:
DECLARE #copyDate DATETIME2 = CURRENT_TIMESTAMP
INSERT INTO Hst_Opportunities
SELECT OppName, Oppvalue, #copyDate AS copyDate
FROM dbo.opportunities
the from part is what im struggling with - how do i copy cross server and database when the source database is MSSQL and the target is Azure SQL?
Based on my test, it appears you could create a linked server on your local box and insert the data using four part name:
EXEC master.dbo.sp_addlinkedserver #server = N'SQLAZURE', #srvproduct=N'sqlazure', #provider=N'SQLNCLI', #datasrc=N'NAME.database.windows.net', #catalog=N'TestDb'
EXEC master.dbo.sp_addlinkedsrvlogin #rmtsrvname=N'SQLAZURE',#useself=N'False',#locallogin=NULL,#rmtuser=N'USERNAME',#rmtpassword='Password'
GO
DECLARE #copyDate DATETIME = CURRENT_TIMESTAMP;
INSERT INTO [SQLAZURE].[TestDb].[Schema].[Table]
SELECT TOP (10)
[Column1]
,[Column2]
,#copyDate AS copyDate
FROM [Localdb].[Schema].[View];

OPENQUERY option to bulk insert data into a table on remote server

I have SQL Server 2014 and was trying to find out if there's a way to bulk insert data into a table on a remote server like below.
SELECT * FROM OPENQUERY([REMOTESERVER],
'BULK INSERT [DBNAME].[dbo].[demo] FROM ''\\Share\data\demo.dat''
WITH (DATAFILETYPE = ''widenative'')');

Store images on temporary table

I'm trying to store/pull some images on a temporary table on SQL Server 2012.
For example, a user drops/creates a QR code for an invoice on
C:\InvoiceImg
The image is called
QR_312784.jpeg
I would like to "pull" or store this image in SQL Server 2012 and then reference it with an invoice number so I can use it on a custom report with SSRS.
Is this possible?
CREATE TABLE #temp(id INT identity,img IMAGE)
DECLARE #pic VARBINARY(MAX)
SET #pic=(SELECT * FROM OPENROWSET(BULK 'C:\InvoiceImg\QR_312784.jpeg ', SINGLE_BLOB) AS pic)
INSERT INTO #temp(img) VALUES(#pic)
SELECT * FROM #temp

SQL Server 2012 Import CSV to mapped Columns

I'm currently trying to import about 10000 rows (from a CSV file) into an existing table.
I only have 1 column which I'm trying to import, but in my table I have a another column called TypeId which I need to set to a static value i.e. 99E05902-1F68-4B1A-BC66-A143BFF19E37.
So I need something like
INSERT INTO TABLE ([Name], [TypeId])
Values (#Name (CSV value), "99E05902-1F68-4B1A-BC66-A143BFF19E37")
Any examples would be great.
Thanks
As mentioned above import the data into a temporary table and then insert the value into the actual table
DECLARE #TempTable TABLE (Name nvarchar(max))
BULK INSERT #TempTable
FROM ‘C:\YourFilePath\file.csv’
WITH ( FIELDTERMINATOR = ‘,’,
ROWTERMINATOR = ‘\n’
)
INSERT INTO TABLE ([Name], [TypeId])
Select Name,'99E05902-1F68-4B1A-BC66-A143BFF19E37' from #TempTable
If you are ready to use a tool to do this you can use the SQL Server Import and Export Wizard. You can start the SQL Server Import and Export Wizard from the Start menu, from SQL Server Management Studio, from SQL Server Data Tools (SSDT), or at the command prompt.
You can map the destination and source column very easily using this tool. Later on if u wish to update the other column you can do using code.

Resources