Hallå, Är inte helt säker att jag förstått hela din problemställning. Min lösning var bara för att visa ungefär vad jag ville. Linus, kan vi reda ut en sak. Japp, Det var precis det jag ville. Missuppfattade bara hur koden skulle funka. Det blev en något omständigare lösning. Jag blev nämligen tvingad att spara datat i db trots allt. Så jag löste det med en Create view med data manipulering vid insert
Sitter på ett litet angenämt problem. Jag skulle vilja skapa en vy och samtidigt manipulera datat som kommer in. Jag vill alltså inte skapa en vy för att sedan manipular datat där utan göra det direkt i vyn.
Alltså ungefär så här
CREATE VIEW AS
SELECT col1
,('0' + col2) AS col2
,col3
,col4
FROM table
Bakgrunden till det hela är att jag läser från xls via OPENDATASOURCE och 0'or trimmas bort om de är i början av ett numeriskt fält. Så för en person som är född "010101" ser det ut så är i vyn "10101".
Allt görs i SQL 2005 i 2000 mode.
Alla tips och tricks är välkomnaSv: Create view med data manipulering vid insert
Ditt förslag fungerar om col2 är en sträng kolumn.
Fast då får du en nolla varje gång.
Det här kan vara en lösning på ditt problem:
<code>
CREATE VIEW MyView AS
SELECT col1
,RIGHT('000000' + col2, 6) AS col2
,col3
,col4
FROM table;
</code>
Sexan byter man ut till den längd man vill ha på strängen.Sv:Create view med data manipulering vid insert
Det borde funka. Problemet är att jag inte vet hur många siffror/tecken som kommer in men jag vill att den ska fylla på till höger med 0'or upp till 10 siffror/tecken. Alltså det kan komma in 10, 9, 8 eller 7 siffror. i de olika fallen ska man alltså fylla på 0, 1, 2, och 3 0'or. Jag har testat med REPLICATE men det funkar inte.
Kan det ha att göra med att jag läser från ett excel ark?Sv: Create view med data manipulering vid insert
I mitt exempel ovan med funktionen RIGHT() så får man den paddingeffekt av nollor som du efterfrågar.
(om jag inte missförstått dig helt).
Ex.
Vill man att det ska vara 10 tecken (siffror) så anger man bara 10 nollor och 10 som antal tecken.
Har man då:
DECLARE @temp varchar (10);
SET @temp = '224';
SELECT RIGHT('0000000000' + @temp, 10); ---> 0000000224
SET @temp = '101224';
SELECT RIGHT('0000000000' + @temp, 10); ---> 0000101224
SET @temp = '8101224';
SELECT RIGHT('0000000000' + @temp, 10); ---> 0008101224
SET @temp = '98101224';
SELECT RIGHT('0000000000' + @temp, 10); ---> 0098101224
osv, osv....
Vill man padda åt andra hållet använder man LEFT().
Var det inte detta du efterfrågade?
Att alltid få dynamiskt utfyll med nollor till 10 tecken.Sv:Create view med data manipulering vid insert
CREATE VIEW MyView_VW AS
SELECT
Col1
,CAST(Col2 AS bigint) AS Col2
,Col3
FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0','Data Source=e:\MyXls.xls;Extended Properties=Excel 8.0')...Sheet1$
för att sedan trycka in det i en tabell med
INSERT INTO MyTable_TB(
Col1
,Col2
,Col3)
SELECT
Col1
, REPLICATE('0', 10-LEN(CAST(Col2 AS varchar(10)))+CAST(Col2 AS varchar(10)))AS Col2
,Col3
FROM MyView_VW
Det som händer när man importerar från xls är att alla numersika fält kommer in som FLOAT vilket inte riktigt är vad jag vill ha så därför blir jag tvingad att i första läget casta om till en bigint.
Tack för hjälpen i alla fall.
/Linus