jak mogę zmienić istniejący klucz podstawowy na sql azure?
<p>chcę zmodyfikować istniejący klucz podstawowy w tabeli sql azure.<br> obecnie ma jedną kolumnę i chcę dodać kolejną.</p><p>teraz na sql server 2008 było to bułka z masłem, właśnie zrobiłem to w ssms, poof. gotowy. tak wygląda pk, jeśli wykonuję skrypt z sql server:</p><pre><code>alter table [dbo].[friend] add constraint [pk\_friend] primary key clustered ( [userid] asc, [id] asc ) </code></pre><p>jednak na sql azure, gdy próbuję wykonać powyższe, to oczywiście się nie powiedzie:</p><p><code>table 'friend' already has a primary key defined on it.</code></p><p>w porządku, więc próbuję upuścić klucz:</p><p><code>tables without a clustered index are not supported in this version of sql server. please create a clustered index and try again.</code></p><p>ok, więc próbuję utworzyć tymczasowy indeks klastrowany, aby usunąć pk:</p><pre><code>create clustered index ix\_test on [friend] ([userid],[id]) </code></pre><p>co skutkuje w: <code>cannot create more than one clustered index on table 'friend'. drop the existing clustered index 'pk\_friend' before creating another.</code></p><p>świetnie, chwila złapania22.</p><p>jak dodać kolumnę userid do mojej istniejącej pk?</p>
<p>uwaga: od wersji 12 bazy danych sql azure te ograniczenia nie mają już zastosowania.</p><p>nie ma czegoś takiego jak „indeks główny”. istnieje coś takiego jak „klucz podstawowy”, a także coś takiego jak „indeks klastrowany”. odrębne koncepcje, często mylone. mając na uwadze to rozróżnienie, przejdźmy ponownie do pytania:</p><p>p1) czy można zmodyfikować indeks klastrowy w tabeli sql azure?<br> a: tak. użyj <code>with (drop\_existing=on)</code>:</p><pre><code>create table friend ( userid int not null, id int not null); go create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>q2) czy można zmodyfikować indeks klastrowy tabeli z ograniczeniem klucza podstawowego?<br> odp .: tak, tak samo jak powyżej, o ile ograniczenie klucza podstawowego nie jest egzekwowane przez indeks klastrowany:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>p3) czy można zmodyfikować ograniczenie klucza podstawowego tabeli?<br> o: tak, dopóki podstawowe ograniczenie nie jest egzekwowane przez indeks klastrowany:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); go create clustered index cdxfriend on friend (userid, id); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key nonclustered (userid) go </code></pre><p>p4) czy klucz podstawowy tabeli może być modyfikowany, gdy jest egzekwowany przez indeks klastrowany?<br> odp .: tak, jeśli tabela nigdy nie miała żadnych wierszy:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key clustered (id, userid) go </code></pre><p>p5) czy klucz podstawowy tabeli można modyfikować, gdy jest wymuszany przez indeks klastrowany, jeśli tabela jest zapełniona?<br> o: nie. każda operacja, która przekształca zapełniony indeks klastrowany w stertę, zostanie zablokowana na sql azure, <em>, nawet jeśli tabela jest pusta </em>:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); delete from friend; go alter table friend drop constraint pk\_friend; </code></pre><p>na marginesie: ograniczenie można zmodyfikować, jeśli tabela jest <em> obcięta </em>.</p><p>obejściem problemu zmiany ograniczenia pk w zapełnionej tabeli jest zrobienie starego dobrego <a href="http://msdn.microsoft.com/en-us/library/ms188351.aspx"><code>sp\_rename</code></a> trick:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); go create table friendnew ( userid int not null, id int not null identity(1,1), constraint pk\_friend\_new primary key clustered (id, userid)); go set identity\_insert friendnew on; insert into friendnew (userid, id) select userid, id from friend; set identity\_insert friendnew off; go begin transaction exec sp\_rename 'friend', 'friendold'; exec sp\_rename 'friendnew', 'friend'; commit; go sp\_help 'friend'; </code></pre><p><code>sp\_rename</code> podejście ma pewne problemy, najważniejsze jest to, że uprawnienia do tabeli nie są przenoszone podczas zmiany nazwy, a także ograniczenia klucza obcego.</p>
Cześć. Prościutko.
  
Wciskasz ctrl+alt+delete jednocześnie i wybierasz opcję Zmień hasło. Wpisujesz stare i podajesz nowe. Jak starego nie pamiętasz to musisz niestety resetować. Po pierwsze: Tak, to jest coś, co należy do Wniosku o dokładnie określonym reson: Co się dzieje po nowe profile użytkowników są tworzone? Oczywiście, jeśli używasz domeny jest możliwe, aby mieć jakiś materiał umieścić w rejestrze stworzenia, ale to naprawdę nie jest przypadek użycia. Wniosek powinien sprawdzić, czy istnieją seetings i jeśli nie korzystać z ustawień domyślnych.


Mając na uwadze powyższe, możliwe jest, aby zmienić Inni użytkownicy Keys przez HKEY\_USERS ula.


Nie mam doświadczenia z Visual Studio 2003 projektu instalacji, więc tutaj jest trochę (całkowicie niezwiązanego) kod VBScript, że może po prostu dać ci pomysł, gdzie szukać:



```
const HKEY_USERS = &H80000003
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = ""
objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys
strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing"
For Each subkey In arrSubKeys
    objReg.SetDWORDValue HKEY_USERS, subkey & strKeyPath, "State", 146944
Next

```

(Kod uprzejmości [Jeroen Ritmeijer](http://jritmeijer.spaces.live.com/blog/cns!8A48A27460FB898A!965.entry) ) Często jest to realizowane za pomocą [„Data Driven Subskrypcje”](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , ale ta funkcja jest dostępna tylko w niektórych wersjach SQL: Enterprise i Business Intelligence, ale nie w standardzie.


Tak więc istnieje wiele twórczych obejścia. Ale nie lubię żadnego z nich, a wszystko to wymaga uczciwej trochę pracy poza SSRS.


Do obejścia widziałem to: Tworzenie subskrypcji, a następnie wyłączenie lub włączenie zadanie SQL, który wysyła subskrypcję (zidentyfikowanego przez GUID).


Tworzenie .exe .NET otoki do obsługi wysyłania wiadomości e-mail. Można go uruchomić kwerendę najpierw sprawdzić, ile zwracane są wiersze, a następnie w razie potrzeby wygenerować raport i umieścić go w wiadomości e-mail. sam sobie odpowiem: solved. w menadżerze poświadczeń wystarczyło wpisać „guest” jako użytkownika. dzięki [@darek0107](/u/darek0107) za naprowadzenie mnie. Jeśli masz obawy związane z bezpieczeństwem swojego konta, zmień hasło. Można spróbować toczenia Zameldowanie ograniczenia off na DataSet (to jego właściwości) lub zmiany właściwości tego związku, i zmienić klucz do prostego odniesienia - do Ciebie. po prostu zainstaluj wersję 64bit i aktywuj swoim kluczem problem rozwiązany w inny sposób - zmieniłem xfce na plasmę.

[@azja](/u/azja) dzięki za podpowiedź. musisz podać hasło takie które składa się z przynajmniej jednej wielkiej litery oraz z małych liter i cyfr :) np. "przykład12345" :) jest tak zrobione po to żeby włamanie się na cudze konto było jak najbardziej utrudnione. IAM nie wiem, to jest to, czego szukasz, ale jeśli rozumiem można to zrobić:


-on sprawdzić obciążenie aktualizacja wartości QS, jeśli jej nie ma użyć ukrytego pola wprowadzania.


-pierwsze czas ładowania strony z QS, zrobić swoje normalne przetwarzanie i przechowywanie wartości QS w polu wejściowym ukrytym. 


-Jeśli nie ma QS następnie użyj ukrytej wartości wejściowej


-po odświeżenie strony, można przekierować do tej samej strony, w tym momencie można użytkownik Request.Form [], aby odzyskać pole wprowadzania ukryty, nadal załadować dane poprawnie, ale pozbyć się QS.


to miało sens w mojej głowie, nie jestem pewien, że to ma sens teraz, ale ja nie pozwolę ci zdecydować.