mercoledì 30 dicembre 2009
Numerare le righe in SQL
SELECT ROW_NUMBER() OVER(ORDER BY IdTabella) AS Numero
FROM Tabella
martedì 15 dicembre 2009
Visualizzare il log di Sql Server
Per aprirlo dal management di sql server aprire Strumenti > Sql Profiler
Creare una traccia (prima icona a sx)
Togliere dalla seconda tab le opzioni non necessarie, eseguire e vedremo in diretta tutte le operazioni eseguite dal Sql Server.
A fine procedura stoppare la traccia e chiudere.
lunedì 9 novembre 2009
Gestione Condizione in trasformazioni XSLT
Nella condizione è possibile utilizzare più di un parametro utilizzando le parole chiave "and" e "or" rigorosamente in MINUSCOLO!!!
es.
xsl:choose>
xsl:when test="IdCategoriaAnnuncio = 15 or IdCategoriaAnnuncio = 21">
!-- Quello che si vuole inserire -->
/xsl:when>
/xsl:choose>
lunedì 2 novembre 2009
Modificare i prerequisiti in Visual Studio per i Setup
Per la modifica di un'installazione Sql Express, ad esempio, troviamo nella cartella
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\SqlExpress\it
per Visual Studio 2005,
mentre per Visual Studio 2008 lo troviamo in:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\SqlExpress\en
il file package.xml, andando a modificare i parametri per il comando di esecuzione è possibile modificare ad esempio il nome dell'istanza e la password per l'utente sa
command packagefile="sqlexpr32.exe" arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all instancename=NOMEISTANZA SAPWD=PASSWORDSA SQLAUTOSTART=1" estimatedinstalledbytes="225000000" estimatedtempbytes="225000000" estimatedinstallseconds="420"
CORREZIONE!
Ho notato che se modifichiamo il nome dell'istanza al tentativo di installazione non si rende conto che una versione di SqlServer è già installata.. è comunque possibile mantenere la password inserita
Quindi questa è la versione corretta:
command packagefile="sqlexpr32.exe" arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all instancename=SQLEXPRESS SAPWD=PASSWORDSA SQLAUTOSTART=1" estimatedinstalledbytes="225000000" estimatedtempbytes="225000000" estimatedinstallseconds="420"
modificare impostazioni MSDTC con Vista
dcomcnfg
dopo impostare l'msdtc sotto Servizi Componenti > Computer > Computer Locale > Distributed Transaction Coordinator >
tasto destro su DTC locale e da proprietà troviamo le impostazioni dell'MSDTC.
giovedì 8 ottobre 2009
Full-Text Search su SQL Server 2008
--installare il pdf IFilter di Foxit (o similari)
--installare l' IFilter per Office 2007 in modo da abilitare la ricerca sui documenti di office 2007
--Eseguire le 2 store procedure che abilitano i cambiamenti appena effettuati
exec sp_fulltext_service 'load_os_resources', 1
exec sp_fulltext_service 'verify_signature', 0;
--Riavviare il servizio SQL
exec sp_fulltext_service 'update_languages'
exec sp_fulltext_service 'restart_all_fdhosts';
--Verificare l'abilitazione dell'estensione funzionante
select document_type, path from sys.fulltext_document_types where document_type = '.docx'
select document_type, path from sys.fulltext_document_types where document_type = '.pdf'
--Creare un indice per la tabella interessata
--Generazione del catalogo
--CatalogoFiles = nome catalogo
--TbFiles = nome tabella
--PK_tbFiles_1 = nome Indice della tabella
--FileType = campo della tabella che contiene l'estensione del file
exec sp_fulltext_database @action='Enable'
exec sp_fulltext_catalog 'CatalogoFiles', 'create'
exec sp_fulltext_table 'TbFiles', 'create', 'CatalogoFiles', 'PK_tbFiles_1'
exec sp_fulltext_column 'TbFiles', 'systemFile', 'add', @type_colname='FileType'
exec sp_fulltext_table 'tbFiles', 'activate'
exec sp_fulltext_catalog @ftcat='CatalogoFiles', @action='start_full'
exec sp_fulltext_table 'TbFiles', 'Start_change_tracking'
exec sp_fulltext_table 'TbFiles', 'Start_background_updateindex'
--Sintassi per l'eliminazione del catalogo
exec sp_fulltext_table 'TbFiles', 'drop'
exec sp_fulltext_catalog @ftcat='CatalogoFiles', @action='drop'
--Ricerca del testo desiderato
-- FREETEXT Predicato utilizzato per eseguire una ricerca su colonne che contengono tipi
-- di dati carattere per valori corrispondenti al significato e non all'esatta formulazione
-- del testo nelle condizioni di ricerca. Se si utilizza FREETEXT,
select * from tbFiles where FREETEXT (systemFile, 'via Garibaldi')
--Predicato utilizzato in una clausola WHERE per eseguire ricerche in colonne contenenti
-- dati di tipo carattere per corrispondenze esatte
-- e se vogliamo combinare più parole per la ricerca abbiamo bisogno di aggiungere "and" o "or" nella ricerca.
select * from tbFiles where CONTAINS (systemFile, 'via OR Garibaldi')
giovedì 24 settembre 2009
martedì 22 settembre 2009
Scaricare immagini dal web lato codice
Dim client As New System.Net.WebClient
client.DownloadFile("http://www.sitoweb.com/foto/appartamento.jpg", "C:\immagine.jpg")
martedì 8 settembre 2009
Aggiungere modulo di una stampante in Windows 7
venerdì 4 settembre 2009
Convertire un DataGridViewRow in DataRow
Ecco come convertire la riga selezionata di una griglia in una DataRow.
CType(grid.SelectedRows(0).DataBoundItem, DataRowView).Row
martedì 11 agosto 2009
Contare il numero di indici di una tabella MySql
SELECT COUNT(*) FROM information_schema.statistics
where table_schema = 'DBname' and table_name = 'TabName' and index_name = 'IndexName'
mercoledì 5 agosto 2009
Impostare la lingua per lo Script Manager
asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true" EnableScriptGlobalization="true" />
lunedì 3 agosto 2009
Visualizzare Date e Decimal in griglia DevExpress WPF
dxg:GridColumn FieldName="NPZ_ART_CONF" Header="Paia" >
dxg:GridColumn.EditSettings>
dxe:TextEditSettings >
dxe:TextEditSettings.Mask >
dxe:MaskProperties MaskType="Numeric" EditMask="n"/>
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>
in CodeBehind
Dim col As New DevExpress.Wpf.Grid.GridColumn
Dim txt As New DevExpress.Wpf.Editors.Settings.TextEditSettings
Dim mask As New DevExpress.Wpf.Editors.MaskProperties
mask.MaskType = DevExpress.Wpf.Editors.MaskType.Numeric
mask.EditMask = "n"
txt.Mask = mask
col.FieldName = "NPZ_ART_CONF"
col.EditSettings = txt
Colonna per visualizzare date non popolate se dataset risponde campo Null
dxg:GridColumn FieldName="DataScadenza" Header="DataScadenza" >
dxg:GridColumn.EditSettings>
dxe:TextEditSettings >
dxe:TextEditSettings.Mask>
dxe:MaskProperties MaskType="None" EditMask="dd MM yyyy" AutoComplete="None" />
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>
in CodeBehind
Dim col As New DevExpress.Wpf.Grid.GridColumn
Dim txt As New DevExpress.Wpf.Editors.Settings.TextEditSettings
Dim mask As New DevExpress.Wpf.Editors.MaskProperties
txt.DisplayFormat = "dd/MM/yyyy"
mask.AutoComplete = DevExpress.Wpf.Editors.AutoCompleteType.None
txt.Mask = mask
col.FieldName = "DataScadenza"
col.EditSettings = txt
GridControl2.Columns.Add(col)
Colonna per visualizzare numeri con 2 decimali
dxg:GridColumn.EditSettings>
dxe:TextEditSettings DisplayFormat="#0.00" >
dxe:TextEditSettings.Mask>
dxe:MaskProperties MaskType="Numeric" />
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>
in CodeBehind
col = New DevExpress.Wpf.Grid.GridColumn
txt = New DevExpress.Wpf.Editors.Settings.TextEditSettings
mask = New DevExpress.Wpf.Editors.MaskProperties
mask.MaskType = DevExpress.Wpf.Editors.MaskType.Numeric
txt.Mask = mask
txt.DisplayFormat = "#0.00"
col.FieldName = "Prezzo"
col.EditSettings = txt
GridControl2.Columns.Add(col)
venerdì 17 luglio 2009
mercoledì 24 giugno 2009
Backup dei DB in SqlServer
DECLARE @name VARCHAR(50) -- Nome del Database
DECLARE @path VARCHAR(256) -- Cartella destinazione file di backup
DECLARE @fileName VARCHAR(256) -- Nome file di backup
DECLARE @fileDate VARCHAR(20) -- Data file di backup (accodata a @fileName)
DECLARE @SqlStatment VARCHAR(MAX) -- Statement T-SQL che esegue il backup
SET @path = 'F:\TEST\'
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')
ORDER BY name
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Elaborazione backup ' + @name + ' in corso...' + CHAR(13)
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
SET @SqlStatment = 'BACKUP DATABASE ' + @name + ' TO DISK = ''' + @fileName +
''' WITH NOFORMAT, INIT, NAME = N''' + @name + ' - Completo Database Backup''' + ', SKIP, NOREWIND, NOUNLOAD, STATS = 10'
EXEC (@SqlStatment)
PRINT CHAR(13) + 'Elaborazione backup ' + @name + ' terminata!' + CHAR(13)
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
venerdì 12 giugno 2009
ricavare tipo dei campi dal database
public sub RicavaCampi()
Dim dtType As DataTable = getTables()
For Each row As DataRow In dtType.Rows
If Not row(2).Equals("sysdiagrams") Then
Dim res(3) As String
res(2) = row(2) 'nome della tabella
If res(2).Equals("Categories") Then
Dim dtCol As DataTable = _Connection.GetSchema("Columns", res)
If dtCol.Rows.Count > 0 Then
dim colName as string
dim colType as string
For Each col As DataRow In dtCol.Rows
colName = col("COLUMN_NAME")
colType = col("DATA_TYPE")
Next
End If
End If
End If
Next
end sub
Public Function getTables() As DataTable
_Connection.Open()
If Not IsNothing(_Connection) Then
Dim restriction(3) As String
restriction(3) = "BASE TABLE"
Dim dtTables As DataTable = _Connection.GetSchema("Tables", restriction)
Return dtTables
Else
Throw New Exception("Nessuna Connessione attiva...")
End If
_Connection.Close()
End Function
martedì 14 aprile 2009
Connessione a SqlServer da remoto
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
E' fondamentale settare il firewall affinchè abiliti l'accesso alla porta 1433.
Convertire un campo DB da float a datetime
convert(datetime, (select dateadd(second, op_orachia * 3600, '2000-01-01 00:00:01'))) as OraChiamata
martedì 10 marzo 2009
Personalizzazione di una ComboBox con DataTemplate
L'uso di una ComboBox è piuttosto semplice, così come il suo popolamento mediante una collezione di ComboBoxItem:
ComboBox SelectedIndex="0">
ComboBoxItem> Yellow /ComboBoxItem>
ComboBoxItem> Green /ComboBoxItem>
/ComboBox>
Solitamente però, si utilizzano le funzionalità di binding per caricare automaticamente i dati, anche in formato XML:
Canvas>
Canvas.Resources>
XmlDataProvider x:Key="colors" XPath="/items/item">
x:XData>
items xmlns="">
item color="Red" />
item color="Yellow" />
item color="Blue" />
item color="Green" />
/items>
/x:XData>
/XmlDataProvider>
/Canvas.Resources>
ComboBox SelectedIndex="0" ItemsSource="{Binding Source={StaticResource colors}}"
DisplayMemberPath="@color" />
/Canvas>
Con la proprietà ItemsSource indichiamo qual è la sorgente da utilizzare, mentre con DisplayMemberPath specifichiamo qual è il path (in questo caso l'attributo) da mostrare come testo per ogni item. Possiamo però personalizzare e decidere in dettaglio l'aspetto di ogni item inserendo qualsiasi Visual presente in WPF: controlli, immagini e perfino video. Per fare ciò con la proprietà ItemTemplate possiamo indicare, definendo come risorsa o inline per la solo ComboBox, un DataTemplate da utizzare per ogni item.
ComboBox SelectedIndex="0" IsEditable="true" TextSearch.TextPath="@color"
ItemsSource="{Binding Source={StaticResource colors}}">
ComboBox.ItemTemplate>
DataTemplate>
StackPanel Margin="2" Orientation="Horizontal">
Rectangle Width="25" Height="25" Fill="{Binding XPath=@color}" />
TextBlock FontSize="15" Text="{Binding XPath=@color}" />
/StackPanel>
/DataTemplate>
/ComboBox.ItemTemplate>
/ComboBox>
All'interno di un template lo scope di binding è relativo al singolo item che stiamo caricando, perciò ci è concesso fare riferimento direttamente agli attributi dell'elemento item della sorgente. Nell'esempio disegniamo un rettangolo e una scritta relativi al colore corrente. Una menzione particolare la meritano le proprietà IsEditable e TextSearch.TextPath. La prima indica che la ComboBox è editabile e l'utente può immettere del testo di ricerca. La seconda è una attached property sull'oggetto TextSearch e ci permette di indicare qual è la proprietà sulla quale fare lookup per ogni ricerca che l'utente effettua. E' importante impostare questo path perché personalizzando il layout degli item il motore non è in grado di sapere qual è il testo rappresentativo dell'elemento. Il risultato di questa personalizzazione è il seguente, dove digitando "G" viene automaticamente suggerita la voce "Green".
Aggiungere un Font alle risorse
FontFamily="Resources\#Onuava"
in questo modo verrà utilizzato questo font anzichè quello di default
Update in SQL, come inserire una datetime
UPDATE | Nome_Tabella |
SET | Nome_Colonna = Nuovo_Valore |
WHERE | Nome_Colonna = Un_Valore |
Per aggiornare più colonne:
UPDATE | Nome_Tabella |
SET | Nome_Colonna1 = Nuovo_Valore1 |
, Nome_Colonna2 = Nuovo_Valore2 | |
, Nome_Colonna3 = Nuovo_Valore3 | |
WHERE | Nome_Colonna = Un_Valore |
Per inserire un valore DateTime:
UPDATE | Nome_Tabella |
SET | Nome_Colonna = convert(datetime,'31122099') |
WHERE | Nome_Colonna = Un_Valore |
lunedì 9 marzo 2009
Progetto Setup, impostare TextBox Criptato
The only tool you need is ORCA. ORCA is a Microsoft utility for modifying and validating Windows Installer packages. It is a database tool created for setup authors and administrators who work with the Windows Installer Service. This utility is a part of the Windows Installer SDK download along with other MSI related tools.
You can use ORCA to open and modify MSI packages.
To download and install ORCA, follow these steps:
Visit the SDK Platform Site page to download the Windows Installer SDK. The link to Windows Installer SDK should be on the left hand side frame on the above site.
Click on that link to go to the next page to download Windows Installer SDK, which includes ORCA.
After downloading and installing Windows Installer SDK, go to \Program Files\Microsoft SDK\Bin folder on the machine to look for Orca.msi.
Run Orca.msi by double clicking on it, which is the setup to install ORCA on your machine.
After installing ORCA on your machine, you will be able to right click on any MSI package and open it in ORCA.
Using the code
The first thing to do, is generate our VS.NET setup project and identify our future password textbox. You can see Edit2Property in our example that is EDITA2.

Now, we start to modify the MSI to enable our password text changing attributes for our textbox EDITA2.
First of all, we've to start ORCA and open the MSI file generated by VS.NET, and go to 'Control' table.

Normally, all textboxes are called CustomTextA, and we've to identify our textbox by Property column. In our case, we can see our row, has '7' as attributes. Let's go to see what means this '7'.
The attributes are set in binary format, so '7' is 111. 100 + 10 + 1 and this is 4 + 2 + 1 in decimal format. Now, we can go to control attributes table here and check what attributes are 4,2,1.
We can see that our textbox has the following properties: Enabled, Sunken and Visible. Now, check that there's an advance properties table for textboxes, and there's a Password property with value 2097152.
Now we have to add this property to the initial property value (7). 2097152 + 7 = 2097159, that's our new property value. Set in attributes cell and save the MSI File.
Now, check your MSI, and you could see that our textbox is a password textbox!!!
martedì 10 febbraio 2009
Verificare Administrator della macchina
bool IsAnAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
lunedì 9 febbraio 2009
abilitare la scrittura per una colonna della DxGrid
dxg:GridControl.View>
dxg:GridColumnView NavigationStyle="CellNavigation" Name="GridColumnView" AllowEditing="True">
/dxg:GridColumnView>
/dxg:GridControl.View>
Inoltre se la sorgente dati della griglia viene caricata dinamicamente dobbiamo fare attenzione a non impostare il valore di default della colonna, altrimenti non avremo la possibilità di modificare il contenuto.
dtFiltra.Columns.Add("IsSelected", System.Type.GetType("System.Boolean"))
giovedì 29 gennaio 2009
ContextMenu in WPF
Per aggiungere un ContextMenu ad un bottone basta inserire il seguente Codice.
Per Gestire l'evento click degli elementi basta attivarlo su ogni MenuItem.
Button.ContextMenu>
ContextMenu Padding="0" Margin="0" Name="ContextMenu1">
MenuItem Name="MenuItem1">
MenuItem.Header>
TextBlock Text="Option 1" VerticalAlignment="Center">
/TextBlock>
/MenuItem.Header>
MenuItem.Icon>
Border Background="LightGray" Padding="2">
Image Source="Resources/MSG_Error.png" Width="{StaticResource ImageSize}" Height="{StaticResource ImageSize}">
/Image>
/Border>
/MenuItem.Icon>
/MenuItem>/ContextMenu>
/Button.ContextMenu>
mercoledì 28 gennaio 2009
Posizione di una colonna in una griglia DxGrid
Per calcolare la posizione di una colonna nella griglia DxGrid:
Dim visibleIndex As Integer = DevExpress.Wpf.Grid.GridColumn.GetVisibleIndex(column)
martedì 27 gennaio 2009
DialogResult in WPF
In una finestra di dialogo è in genere disponibile un pulsante speciale per l'annullamento, che corrisponde al pulsante la cui proprietà IsCancel è impostata su true. Un pulsante configurato in questo modo consente di chiudere automaticamente una finestra quando un utente lo seleziona o preme ESC. In entrambi i casi, DialogResult rimane false.
In una finestra di dialogo è in genere disponibile anche un pulsante speciale per l'accettazione, che corrisponde al pulsante la cui proprietà IsDefault è impostata su true. Un pulsante configurato in questo modo genererà l'evento Click quando l'utente lo seleziona o preme INVIO. Tuttavia, la finestra di dialogo non verrà chiusa automaticamente e DialogResult non verrà impostata su true. È necessario scrivere manualmente questo codice, in genere dal gestore dell'evento Click per il pulsante predefinito.
Dopo la chiusura di una finestra di dialogo, è possibile ottenere il risultato dal valore restituito dal metodo ShowDialog o controllando la proprietà DialogResult.
DialogResult può essere impostata solo quando un oggetto Window viene aperto chiamando il metodo ShowDialog.
Esempio Apertura ShowDialog:
MyDialog dialog = new MyDialog();
dialog.ShowDialog();
if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
MessageBox.Show("User clicked OK");
else
MessageBox.Show("User clicked Cancel");
nella Window ShowDialog sono inseriti 2 bottoni (Ok, e Cancel) così gestiti:
Button Width="100" Content="OK" IsDefault="True" Click="ButtonOkClick"/
Button Width="100" Content="Cancel" IsCancel="True"/
e l'evento del bottone OK va ad impostare il valore della ShowDialog:
DialogResult = true;
Aggiungere un'immagine delle risorse in WPF
pctIcon.Source = New BitmapImage(New Uri("Resources/MSG_OK.png", UriKind.Relative))
Attenzione, se l'oggetto nel quel vogliamo inserire l'immagine è in una sottocartella rispetto alla root, per accedere alle risorse è necessario aggiungere una / prima dell'indirizzo dell'immagine.
es.
pctIcon.Source = New BitmapImage(New Uri("/Resources/MSG_OK.png", UriKind.Relative))
lunedì 26 gennaio 2009
If isValidEMail("IndirizzoE-Mail") Then
MsgBox("Indirizzo valido")
Else
MsgBox("Indirizzo non valido")
End If
function IsValidEmail(email)
isitvalid = true
dim names, name, i, c
names = Split(email, "@")
if UBound(names) <> 1 then
isitvalid = false
exit function
end if
for each name in names
if Len(name) <= 0 then
isitvalid = false
exit function
end if
for i = 1 to Len(name)
c = Lcase(Mid(name, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 and not IsNumeric(c) then
isitvalid = false
exit function
end if
next
if Left(name, 1) = "." or Right(name, 1) = "." then
isitvalid = false
exit function
end if
next
if InStr(names(1), ".") <= 0 then
isitvalid = false
exit function
end if
i = Len(names(1)) - InStrRev(names(1), ".")
if i <> 2 and i <> 3 then
isitvalid = false
exit function
end if
if InStr(email, "..") > 0 then
isitvalid=false
Exit Function
end If
IsValidEmail = isitvalid
End Function
venerdì 23 gennaio 2009
Inviare una e-mail tramite VBScript
Dim SendMail Set SendMail = CreateObject("CDO.Message")
SendMail.From = "Indirizzo del mittente"
SendMail.To = "Indirizzo del Destinatario"
SendMail.Subject = "e-mail di prova inviata con un VBScript"
SendMail.HTMLBody = "Inserire qui il testo del messaggio con i Tag HTML"
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "indirizzo smtp del server di posta"
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "25" SendMail.Configuration.Fields.Update
SendMail.Send
giovedì 22 gennaio 2009
Expander WPF
Grid>
Grid.RowDefinitions>
RowDefinition Height="Auto"/>
RowDefinition />
/Grid.RowDefinitions>
Expander Header="Exp di prova">
StackPanel>
TextBox />
Button Content="Ciao" />
/StackPanel>
/Expander>
Button Content="Fuori dall'expander" Grid.Row="1" Height="25" />
/Grid>
venerdì 9 gennaio 2009
Aggiungere un CheckBox Column ad un DXGrid (DevExpress) WPF
my:GridColumn FieldName="ImportThis" Header="Import" Width="60"
my:GridColumn.CellTemplate
DataTemplate
CheckBox IsChecked="{Binding Path=ImportThis}" HorizontalAlignment="Center" /
/DataTemplate
/my:GridColumn.CellTemplate
/my:GridColumn
giovedì 8 gennaio 2009
Passare stringa di valori come parametro di una query
per risolvere la questione ecco come ricavare i vari valori:
In SqlServer:
SELECT *
FROM t
WHERE (',' + @ElencoIdSedi + ',') LIKE ('%,' + ltrim(rtrim(str(t.IdSede))) + ',%')
In MySQL:
SELECT *
FROM t
where concat(',', ElencoIdSedi,',') LIKE concat('%,', t.IdSede, ',%') ;