Welcome to Sign in | Help
in Search

View cu coloane not null

Last post 11-25-2009, 6:34 PM by tebbaerty. 11 replies.
Sort Posts: Previous Next
  •  11-20-2009, 3:11 PM 7845

    View cu coloane not null

    Salut,

    Se poate crea un view in care sa fie explicit specificata proprietatea null sau not null pentru o anumita coloana ?

    un exemplu :

    create table1
    (
    col1 int not null primary key
    )

    create view as

    select -1 * row_number() over (col1) as  col1 from table1
    union
    select col1 from table1

    va duce la crearea unui viu care are col1 de tip null.

    Acum noi stim sigur ca acesta nu poate fi null sau duplicat. tot ceea ce mai ramane de facut este sa ii spunem si viewului ca ala este sigur not null.

    Se poate ?
  •  11-20-2009, 4:43 PM 7846 in reply to 7845

    Re: View cu coloane not null

    Ce vrei sa obtii?
    Stii ca respectiva coloana este sau nu NULL din schema tabelelor de baza...
  •  11-20-2009, 4:45 PM 7847 in reply to 7846

    Re: View cu coloane not null

    Vreau sa creez un view peste 2 tabele dupa care acel view va fi transportat peste un linkserver in o alta baza de date.

    In baza de date destinate vreau sa creez pk inapoi si sa fac un update statistics.

    Problema e ca nu mai pot creea pk inapoi pentru ca coloana devine null.
    :(

    Desigur pot sa verific tipul coloanei ... sa creez un sql dinamic care sa faca un alter table si sa imi puna acel not null pe coloana care o doresc, numai ca as nu dori sa recurg la aceasta solutie pentru ca in functie de tipul coloane trebuie sa pun nimic , (int) pt varchar nvarchar..., (scape,precision) pentru numeric , decimal ... si nu as dori sa fac un case gigantic in care sa harcodez toate tipurile astea. Si in puls pentru o chestie simpla mi se pare ca scriu prea mult cod ....

    O solutie simpla exista ?
  •  11-20-2009, 7:17 PM 7848 in reply to 7845

    Re: View cu coloane not null

    Încearcă un:

    create view v as
    select ISNULL(-1 * row_number() over (col1),0) as col1 from table1
    union
    select col1 from table1

    (poţi să afli dacă SQL Server consideră că acea coloană poate conţine null-uri din coloana IS_NULLABLE în INFORMATION_SCHEMA.COLUMNS)

    Răzvan
  •  11-23-2009, 10:05 AM 7854 in reply to 7848

    Re: View cu coloane not null

    WOW..... super ... merge cu isnull :D. Este exact ceea ce vroiam.
    Pacat ca nu mi-a venit si mie ideea asta din prima ...Multumesc :D

  •  11-25-2009, 2:30 PM 7870 in reply to 7854

    Re: View cu coloane not null

    Nu stiu daca ar trebui sa deskid un topic nou sau sa il pun tot in acesta dar are legatura cu not null .

    am urmatoarea tabela
    table nume
    col1 not null.


    daca aplic un bcp si anume :
    bcp tbl out c:\tbl.dat -S "server" -n -U "user" -P "password"
    bcp tbl format nul -S "server" -n -U "user" -P "password" -f tbl.xml -x


    dupa care dau un

    select * into tbl2 from OpenRowSet (bulk = 'tbl.dat' , formatfile = 'tbl.xml')

    problema e ca acum in tbl2 am col1 cu null desi in tbl am col1 cu not null.

    Cum pot face sa isi pastreze coloanele cu not null ?. M-am uitat prin proprietatile lui openrowset dar nu am observat ceva ce m-ar ajuta.
    Nu se poate asa ceva ?

    Multumesc




  •  11-25-2009, 4:02 PM 7871 in reply to 7870

    Re: View cu coloane not null

    Păi nu merge tot cu ISNULL ?

    Totuşi, eu aş recomanda să nu foloseşti SELECT INTO, ci să faci mai întâi CREATE TABLE şi apoi INSERT. În afară de null-abilitate şi tipurile de date, pot fi multe alte chestii (proprietatea IDENTITY sau proprietatea ROWGUIDCOL, computed columns, primary key, foreign keys, check constraints, filegroup-uri, indecşi, description-uri, drepturi, etc) care poate ar merita să fie copiate la fel în noua tabelă.

    Răzvan

    Later edit: proprietatea ROWGUIDCOL, nu ROWVERSION.
  •  11-25-2009, 4:11 PM 7872 in reply to 7871

    Re: View cu coloane not null

    pai cum cu isnull ? pentru ca eu nu fac un select col1,col2,.... eu fac un select * .

    Nu pot sa creez tabela pentru ca nu stiu structura ei. As vrea sa se creeze automat si dinamic, de aia folosesc acel bcp cu format file.
    Daca stiam structura puteam sa folosesc bpc in si out.

    Si toate cele enumerate de tine momentan stiu sigur ca nu exista si nu vor exista. Am nevoie doar de PK pus peste acea tabela , si de aceea vreau ca col1 sa ramana tot not null.
  •  11-25-2009, 4:23 PM 7873 in reply to 7872

    Re: View cu coloane not null

    Am înţeles... dar dacă nu cunoşti structura tabelei, cum ştii pe care coloană vrei să faci PK-ul? Totdeauna pe prima coloană? Totdeauna pe coloana cu un anumit nume?

    Oricum, dacă vrei doar o anumită coloană să o faci NOT NULL (presupunând că ştii sau poţi să afli numele şi tipul de date al acestei coloane), iar celelalte nu te interesează, atunci poţi să faci un:

    ALTER TABLE tbl2 ALTER COLUMN col1 int NOT NULL

    înainte să faci:

    ALTER TABLE tbl2 ADD CONSTRAINT PK_tbl2 PRIMARY KEY (col1)

    Răzvan
  •  11-25-2009, 4:38 PM 7874 in reply to 7873

    Re: View cu coloane not null

    da stiu numele coloanei . Dar nu stiu tipul ei. acum tipul ei il pot afla din sys.columns join cu sys.types.

    acolo vad daca este int fac

    ALTER TABLE tbl2 ALTER COLUMN col1 int NOT NULL

    daca este  nvarchar fac

    ALTER TABLE tbl2 ALTER COLUMN col1 nvarhcar(x) NOT NULL

    daca este decimal sau numeric fac

    ALTER TABLE tbl2 ALTER COLUMN col1 decimal(x,y) NOT NULL

    Astea fiind dinamice , eu trebuie sa imi pastrez un dictionar cu tipul coloanei si informatii despre faptul ca pun () sau nu sau pun (x) sau (x,y).
    Acesta era motivul pentru care vroiam sa faca openrowsetul direct not null, pentru ca el stie daca coloana respectiva este null sau not null din fisierul de format. Are acolo "NativeFixed" daca e not null, si nu mai are prefix_length ci are length daca coloana este not null.
  •  11-25-2009, 5:33 PM 7875 in reply to 7874

    Re: View cu coloane not null

    Din păcate în fişierul de format nu se stochează informaţia despre null-abilitate în mod explicit. Deşi în schema definită la Schema Syntax for XML Format Files există un atribut opţional numit NULLABLE, se pare că acesta nu este folosit.

    Într-adevăr, pentru unele tipuri de date, se pot observa nişte diferenţe, dar pentru alte tipuri (cum ar fi char(n), numeric(n,m), float, etc), fişierul format arată identic indiferent dacă coloanele sursă permiteau sau nu permiteau null-uri.

    Mai mult decât atât, OPENROWSET nu păstrează cu acurateţe nici tipurile de date în unele cazuri:
    - char(3) devine varchar(3)
    - decimal devine numeric
    - timestamp devine varbinary(8)
    - varchar(max) devine varchar(8000)
    - xml devine nvarchar(8000)
    etc...

    Răzvan
  •  11-25-2009, 6:34 PM 7876 in reply to 7875

    Re: View cu coloane not null

    ok .... am inteles... atunci voi cauta o solutie alternativa :(


    Multumesc,
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems