Kısa bir süre önce tabloya resim eklemek için OPENROWSET
kullanmaya başladım. Daha önce, ben her resim (1 resim = 1 INSERT
ifadesi) yolunu belirtin ve resmin ikili dize oluşturmak için PHP kullanırsınız: Ancak, ben Tek bir sorgu ile tüm görüntüleri eklemek çalışıyorumTabloda OPENROWSET ile kayıtlı bir yolu nasıl kullanırım?
INSERT INTO nopCommerce..Picture (PictureBinary, MimeType, SeoFilename, AltAttribute, TitleAttribute, IsNew)
VALUES (
(
SELECT *
FROM OPENROWSET(BULK '" . $this->image['path'] . "', SINGLE_BLOB) AS Binary
),
'" . $this->image['mime_type'] . "',
'" . $this->image['seo_filename'] . "',
'" . $this->image['alt'] . "',
'',
0
)
. Böylece, her görüntüye giden yolu bir tabloya kaydetmeye başladım ve şimdi her birini daha önce yaptığım gibi eklemem gerekiyor (sadece bir PHP dizgisi yerine tablonun yolunu kullanarak). Ben aşağıdaki girişiminde Fakat:
INSERT INTO nopCommerce..Picture (PictureBinary, MimeType, SeoFilename, AltAttribute, TitleAttribute, IsNew)
SELECT
(
SELECT *
FROM OPENROWSET(BULK 'ImagePath', SINGLE_BLOB) AS Binary
),
MimeType,
Name,
Alt,
'',
0
FROM nopRMS..Product_Image_Mappings
: I (boşuna) sütunun adını tırnak ekleme çalıştı, Yani
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near 'ImagePath'.
:
INSERT INTO nopCommerce..Picture (PictureBinary, MimeType, SeoFilename, AltAttribute, TitleAttribute, IsNew)
SELECT
(
SELECT *
FROM OPENROWSET(BULK ImagePath, SINGLE_BLOB) AS Binary
),
MimeType,
Name,
Alt,
'',
0
FROM nopRMS..Product_Image_Mappings
aşağıdaki hatayı alıyorsunuz
Msg 4860, Level 16, State 1, Line 1
Cannot bulk load. The file "ImagePath" does not exist.
Bunu gerçekleştirmenin bir yolu olmalı, hiçbir yerde çevrimiçi olarak doğru sözdizimini bulamıyorum. SQL Server'a dbo.Product_Image_Mappings.ImagePath
yolunu (string) almak için nasıl söyleyeceğini bilen var mı?
GÜNCELLEME sana dbo.Product_Image_Mappings.ImagePath
iade edeceğini bir değerin bir örneğini vermeyi unuttum. Bu
GÜNCELLEME Eirikur Eiriksson this thread bir çözüm sunmuştur, ancak bu aynı amaca ulaşılması bir Çok karmaşık bir yönteme benziyor görünür
... ... \\DEREK\WebImages\1\ca-82300.jpg
gibi yolları var
GÜNCELLEME (Eirikur Eiriksson adlı Yöntemiyle girişimi)
DECLARE @SQL_STR NVARCHAR(MAX) = N'';
SELECT @SQL_STR = STUFF(
(
SELECT
N'
UNION ALL
SELECT '
+ N'(SELECT X.BulkColumn FROM OPENROWSET(BULK '
+ NCHAR(39) + im.ImagePath + NCHAR(39)
+ N', SINGLE_BLOB) AS X) AS PictureBinary,'
+ NCHAR(39) + im.MimeType + NCHAR(39)
+ N' AS MimeType,'
+ NCHAR(39) + im.Name + NCHAR(39)
+ N' AS SeoFilename,'
+ NCHAR(39) + REPLACE(im.Alt, '''', '''''') + NCHAR(39)
+ N' AS AltAttribute,'
+ N'NULL AS TitleAttribute,'
+ N'0 AS IsNew'
FROM nopRMS..Product_Image_Mappings im
FOR XML PATH(''), TYPE
).value('.[1]','NVARCHAR(MAX)'),1,12,N''
)
INSERT INTO nopCommerce..Picture (PictureBinary, MimeType, SeoFilename, AltAttribute, TitleAttribute, IsNew)
EXEC (@SQL_STR);
Bu tür çalıştı, ancak yalnızca (7200 + dışına) 42 satır takılı ... Ben t ihtiyacım % 100 doğru olması için :(itiraf etmeliyim, bu sorgu hakkında bir şey değiştirmem gerekebilir, ama bu konuda bir şey bilmiyorum (temel INSERT, SELECT, vb. dışında)
Ayrıca, bu ekleme deyimini bir birleştirme deyiminin içinde kullandığımı belirtmeliyim. Bunun seçeneklerimi de kısıtlayabileceğine inanıyorum (çünkü Dinamik SQL'in tek seçenek olduğunu görüyorum ve "TARGET İLE DEĞİLDİR)" İçinde Dinamik SQL'i çalıştırabileceğime inanmıyorum. – derekmx271
FYI: Biçimlendirmeyi güncelledim Sorguda biraz, ama aynı zamanda SQL Server Central forumunda bu kodu gönderen kişinin adı "SSCertifiable" terimi bir isim değil, siteye kaç nokta ve/veya oturum açma ile ilişkili bir etikettir –
İlk kod örneğinizde PHP kodunuz var, PHP'yi bir PHP sayfasının içinde oluşturup çalıştırıyor musunuz? Bunu bilmek önemlidir. İkinci kod girişimi ('ImagePath' kullanarak) bir imleç kullanılarak elde edilebilir. Her kayıt için tam dinamik dize ve onu yürütür, ancak yavaş olur –