Hi there, hope you can help me. What should I do if I want to use a pre-defined string as sql query (SelectCommand)? So I want to use the sqlquery string in the SelectCommand option...
The reason is that this page is request like page.aspx?ID=1234, and I want to use the Request.QueryString option to define the sql query...
<HTML>
<head>
<sript runat"server">
Dim sqlquery As String = New String ("SELECT LastName FROM Employees")
</script>
<BODY>
<FORM runat=
"server">
<asp:SqlDataSource
id=
"SqlDataSource1"
runat=
"server"
DataSourceMode=
"DataReader"
ConnectionString=
"<%$ ConnectionStrings:MyNorthwind%>"
SelectCommand=
"SELECT LastName FROM Employees">
</asp:SqlDataSource>
I have a table which has six fields ID, dateDue, dateReceived, dueday. month, ContactFYEmy query looks likeselect ID, DateDue, dateReceived, dueday, month, ContactFYEfrom Reportwhere (dbo.Report.DateDue BETWEEN dbo.udfDisplayTime(dueday, month, ContactFYE) AND DateDue )user defined functionCREATE FUNCTION dbo.udfDisplayTime ( @dueday int, @month int, @ContactFYE smalldatetime) RETURNS smalldatetime AS BEGIN DECLARE @ReturnString AS smalldatetime Declare @dueday1 as int if (@month =1)beginset @dueday1 = @dueday -7endelse if (@month =2)begin set @dueday1 = @dueday -14end else if (@month =3)begin set @dueday1 = @dueday -60endselect @ReturnString = DATEADD ( dd, @dueday1, @ContactFYE) Return @ReturnStringENDI got a incorrect result when using this query and user defined function.the result that I got was out of between displaytime and datdue. any idea for this , Thanks.
I'm experiencing quite an interesting issue with our database. We're currently running SQL Server 2005 Standard (x64) (v9.00.3054.00) and I have a block of code that just insists on not working within a UDF. Everything I've read seems to point that I'm doing this corerctly but apparently I'm missing something.
Executing the query below:
DECLARE @sp DATETIME DECLARE @ep DATETIME DECLARE @trackType INT
SET @sp = '4/21/2008' SET @ep = '4/28/2008' SET @trackType = 1
SELECT c.unqempid, isnull(count(c.contactid),0) AS contacts, isnull(bookings.count,0) AS bookings, isnull(showed.count,0) AS showed, isnull(ow.totalPurchased,0) AS purchases, isnull(ow.totalSold,0) AS volume FROM contacts c WITH (NOLOCK) LEFT JOIN ( SELECT b.unqempid, ISNULL(count(bookingid),0) AS count FROM bookings b WITH (NOLOCK) INNER JOIN contacts c WITH (NOLOCK) ON c.contactid = b.relcontactid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY b.unqempid ) AS bookings ON bookings.unqempid = c.unqempid LEFT JOIN ( SELECT b.unqempid, ISNULL(count(bookingid),0) AS count FROM bookings b WITH (NOLOCK) INNER JOIN contacts c WITH (NOLOCK) ON c.contactid = b.relcontactid WHERE c.contactdt BETWEEN @sp AND @ep AND didshow > 0 GROUP BY b.unqempid ) AS showed ON showed.unqempid = c.unqempid LEFT JOIN ( SELECT c.unqempid, count(leadid) TotalPurchased, sum(saleprice) AS TotalSold FROM ordermgmt.dbo.orders o WITH (NOLOCK) INNER JOIN ordermgmt.dbo.appointments a WITH (NOLOCK) ON a.weborderid = o.orderid INNER JOIN contacts c WITH (NOLOCK) ON c.personid = a.leadid INNER JOIN bookings b WITH (NOLOCK) on b.relcontactid = c.contactid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY c.unqempid ) as ow ON ow.unqempid = c.unqempid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY c.unqempid, bookings.count, showed.count, ow.totalPurchased, ow.totalSold
Yields no issues however if I put this into a UDF, it runs and never finishes executing. I'm not quite sure what my issue was so I'm hoping someone could point out where my goof is.
Here is the function:
CREATE FUNCTION [dbo].[fnEmployeeSchedulingResults] ( @sp DATETIME, @ep DATETIME ) RETURNS TABLE AS RETURN (
SELECT c.unqempid, isnull(count(c.contactid),0) AS contacts, isnull(bookings.count,0) AS bookings, isnull(showed.count,0) AS showed, isnull(ow.totalPurchased,0) AS purchases, isnull(ow.totalSold,0) AS volume FROM contacts c WITH (NOLOCK) LEFT JOIN ( SELECT b.unqempid, ISNULL(count(bookingid),0) AS count FROM bookings b WITH (NOLOCK) INNER JOIN contacts c WITH (NOLOCK) ON c.contactid = b.relcontactid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY b.unqempid ) AS bookings ON bookings.unqempid = c.unqempid LEFT JOIN ( SELECT b.unqempid, ISNULL(count(bookingid),0) AS count FROM bookings b WITH (NOLOCK) INNER JOIN contacts c WITH (NOLOCK) ON c.contactid = b.relcontactid WHERE c.contactdt BETWEEN @sp AND @ep AND didshow > 0 GROUP BY b.unqempid ) AS showed ON showed.unqempid = c.unqempid LEFT JOIN ( SELECT c.unqempid, count(leadid) TotalPurchased, sum(saleprice) AS TotalSold FROM ordermgmt.dbo.orders o WITH (NOLOCK) INNER JOIN ordermgmt.dbo.appointments a WITH (NOLOCK) ON a.weborderid = o.orderid INNER JOIN contacts c WITH (NOLOCK) ON c.personid = a.leadid INNER JOIN bookings b WITH (NOLOCK) on b.relcontactid = c.contactid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY c.unqempid ) as ow ON ow.unqempid = c.unqempid WHERE c.contactdt BETWEEN @sp AND @ep GROUP BY c.unqempid, bookings.count, showed.count, ow.totalPurchased, ow.totalSold )
What is better for performance, using a user defined function or a sub query to perform an aggregate calculation in a select statement. for eg would it be best to call a user defined function which performs the below calculation of the sub query shown. I'm speaking purely from a performance point of view.
SELECT o.ordersid,
o.orders,
(SELECT SUM(i.total) FROM items AS i WHERE i.ordersid = o.ordersid) AS [total]
Hi, I wonder if its possible to perform a ORDER BY clause in an SELECT DISTINCT sql query whereby the AS SINGLECOLUMN is used. At present I am recieving error: ORDER BY items must appear in the select list if SELECT DISTINCT is specified. My guess is that I cant perform the Order By clauses because it cant find the columns individually. It is essentail I get this to work somehow... Can anyone help? Thanks in advance Gemma
Hi all, In my SQL Server Management Studio Express, I have the following Database "ChemAveRpd", Table "dbo.LabTests", and Content of the Table: dbo.LabTests Column_name Type Length Prec Scale AnalyteID int 4 10 0 (Primary Key) AnalyteName nvarch 510 CasNumber nvarch 510 Result numeric 5 8 2 Unit nvarch 510 SampleID int 4 10 0 (Foreign Key)
1) Rows ordered using textual id rather than numeric id
Code Snippet select cast(v.id as nvarchar(2)) id from ( select 1 id union select 2 id union select 11 id ) v order by v.id
Result set is ordered as: 1, 11, 2 I expect: 1,2,11
if renamed or removed alias for "cast(v.id as nvarchar(2))" expression then all works fine.
2) SQL server reject query below with next message
Server: Msg 169, Level 15, State 3, Line 16 A column has been specified more than once in the order by list. Columns in the order by list must be unique.
Code Snippet select cast(v.id as nvarchar(2)) id from ( select 1 id union select 2 id union select 11 id ) v cross join ( select 1 id union select 2 id union select 11 id ) u order by v.id ,u.id
Again, if renamed or removed alias for "cast(v.id as nvarchar(2))" expression then all works fine.
It reproducible on
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
and
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
In both cases database collation is SQL_Latin1_General_CP1251_CS_AS
If I check quieries above on database with SQL_Latin1_General_CP1_CI_AS collation then it works fine again.
Could someone clarify - is it bug or expected behaviour?
If i want to have a primary key with a self defined value for SQL Server 2000, is it possible to achive that ?
For example: i want the PK to start with "PK001" and it will autogenerate everytime a new record insert into the Table by increament the PK to "PK002", "PK003", "PK004".....etc
Hi, i'm a beginner in DTS / Activex , in SQL Server 2000.
I need to update 500.000 records of a TableB (containing 2.000.000 rows) with a TableA (containing 500.000 rows)
With Enterprise Manager I made a new DTS package (my first package!)
I define / drag 2 Connections as OLE (the first-right icon) (but i don't define any Activities as dts. Then i define the following ActiveX (VBs) :
Function Main()
if DTSDestination("NDG") = (DTSSource("NDG")) THEN
DTSDestination("BANCA") = DTSSource("BANCA") DTSDestination("NDG") = DTSSource("NDG") 'Pao: LA LOGICA DELLA TRASFORMAZIONE if (DTSSource("PTF")) > 0 THEN IF (DTSSource("SEGMENTO")) > 0 THEN DTSDestination("CAMPO_N1") = DTSSource("SEGMENTO") DTSDestination("PTF_CLIENTE_OLD") = DTSSource("PTF") ELSE DTSDestination("CAMPO_N1") = DTSDestination("SEGMENTO_CLIENTE") DTSDestination("PTF_CLIENTE_OLD") = DTSSource("PTF") END IF ELSE IF (DTSSource("SEGMENTO")) > 0 THEN DTSDestination("CAMPO_N1") = DTSSource("SEGMENTO") DTSDestination("PTF_CLIENTE_OLD") = 0 ELSE DTSDestination("CAMPO_N1") = DTSSource("SEGMENTO") DTSDestination("PTF_CLIENTE_OLD") = DTSSource("PTF") END IF END IF END IF Main = DTSTransformStat_OK
End Function
+++++++++++
but when I run it I obtain the following error message: DTSDestination not defined, idem for DTSSource.
I have a UDF that takes my input and returns the next valid business day date. My valid date excludes weekends and holidays. It works perfect except for one issue. It doesn't check to see if today's date is a holiday. I pass a query to sql server like so " select dbo.getstartdate('01/ 10/2007',2)" It then moves ahead two business days and returns that date. Here is the current code. Hopefully someone can tell me how to do the holiday check on the current date. I really don't want to rewrite the whole script . Code--------------------------------------------------------- SET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS OFF GO --DROP FUNCTION GetStartDate --declare function receiving two parameters ---the date we start counting and the number of business days CREATE FUNCTION GetStartDate (@startdate datetime, @days int) RETURNS datetimeASBEGIN --declare a counter to keep track of how many days are passingdeclare @counter int /*Check your business rules. If 4 business days means you count starting tomorrow, set counter to 0. If you start counting today, set counter to 1*/set @counter = 1 --declare a variable to hold the ending datedeclare @enddate datetime --set the end date to the start date. we'll be -- incrementing it for each passing business dayset @enddate = @startdate /*Start your loop.While your counter (which was set to 1), is less than or equal to the number of business days increment your end date*/WHILE @counter <= @days BEGIN --for each day, we'll add one to the end dateset @enddate = DATEADD(dd, 1, @enddate) --If the day is between 2 and 6 (meaning it's a week --day and the day is not in the holiday table, we'll --increment the counter IF (DATEPART(dw, @enddate) between 2 and 6) AND (@enddate not in ( select HolidayDate from tFederalHoliday where [HolidayYear] = datepart(yyyy,@enddate) ) ) BEGIN set @counter = @counter + 1 END --end the while loopEND --return the end dateRETURN @enddate --end the functionEND GOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO ---------------------------------------------------------------------------------------------
I've a view in which one of the fields were DATEDIFF(day,contract date,received) AS AgeOfAccount. I changed it to DATEDIFF(day, m.received, CASE WHEN m.clidlp > m.clidlc THEN m.clidlp ELSE m.clidlc END) * - 1 AS AgeOfAccount. When I execute the view I'm getting an error. But the results are getting displayed properly. That's what's puzzling me. Could someone tell me what the error is.
The following errors were encountered while parsing the contents of the sql pane. Your entry cannot be converted to a valid date time value.
Hi all.I am using VB.Net 2002 (.Net Framework 1.0) and Sql Server 2005 Express Edition as a database. I am following a tutorial to create a connection to a database.I have written this code to import namespaces at my .aspx file. <%@ import namespace = system.data%><%@ import namespace = system.data.sqlclient%>And, I also put this code at my Page_Load event that resides at .aspx.vb file. Dim conn As sqlConnection conn = New sqlConnection("server=SEN-M092082D001SQLEXPRESS;database=test;Trusted_Connection=Yes") conn.open() lblItem.Text = "Connection Opened!" Those codes builds an error which is "Type sqlConnection is not defined". Can someone explain to me why this happen? I already imported the namespaces
I have a search returning many 'car' records (regno, mileage, color, etc)
In a seperate table I have two columns: accessory and regno. This can have many rows for each regnumber.
Within the storedprocedure that returns the 'car' records I need to also return the relevant accessories for that car as one column.
I have written a function as such (with some help!):
ALTER Function getAccs(@regNo varChar(20)) RETURNS varChar AS BEGIN Declare @List varchar(1000) SELECT @List = COALESCE(@List + ', ', '') + accessory FROM frxrep2.dbo.usedaccessories WHERE regnumber = @regno return @List END
I was hoping that I could simply use this in the 'car' SELECT statement.
ie:
SELECT regNo, color, mileage, dob.getAccs(regno) as AccessoryList FROM tableBla etc
I'm not even sure if the function works - How can I test in SQL analyzer?
Hi everyone, I am tring to pass acomma delimited string to a function and this function is parsing the string so that I can see individual values so for example I am passing 1,2,3,4,5 as a parameter to my function and I am parsing this string so that I can write something like this Select * from tableA where userID in(1,2,3,4) It is working fine. Only problem is if the user passes word 'all' instead of 1,2,3,4 then I have to doSelect * from tableA My function looks like this. How can I modify this function if I pass 'all' as a paramater. Any help will be appreciated.CREATE FUNCTION [dbo].[ParseText2File] (@p_text varchar(4000), @p_Delimeter char(1)) RETURNS @results TABLE (id varchar(100)) AS BEGIN declare @i1 varchar(200) declare @i2 varchar(200) declare @tempResults Table (id varchar(100)) while len(@p_text) > 0 and charindex (@p_Delimeter, @p_text) <> 0 begin select @i1 = left(@p_text, charindex(@p_Delimeter, @p_text) - 1) insert @tempResults select @i1 select @p_text = right(@p_text, len(@p_text) - charindex(@p_Delimeter,@p_text)) end insert @tempResults select @p_text insert @results select * from @tempResults return END Thanks
HiI try to retriveing data from database using following code (code-behind page). then put data into form fields. It tells me SqlDataReader is not defined. What does this mean? I am using Visual Studio.net and new to it. Please help. thnaks.---------------------------------------------------------------------------------------Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim myReader As SqlDataReader = myCommand.ExecuteReader() If myReader.HasRows Then Do While myReader.Read() txtfname.Text = myReader("fname") txtlname.Text = myReader("lname") Loop Else Console.WriteLine("No rows returned.") End If myReader.Close() End Sub
I know that we cannot have User Defined Functions in SQL 7.0, but is there a work around. I am trying to standardize the date according to the time zone using a function and use it as part of a select statement.
I cannot believe that is not possible in SQL 7.0, can somebody tell me what is the work around, I am running against time. I really appreciate any help on this one.
I am a new user for SQL server. Coming from an oracle background, I find it very difficult to live without user defined functions. At the moment, I urgently need to have a function returning an custom-made ID string, so that it can be used in one of my stored procedures. I have heard the rumours that SQL server 7 does NOT support user defined functions, (which SQL 6.5 does). I would be really grateful if anyone can clarify this for me, and if possible, suggest a get-around approach.
all schedulled task on server failed for 18450 Process Exit Code 1. ...t Utility, Version 6.50.240 Copyright (C) Microsoft Corporation, 1995 - 1996 [Microsoft SQL-DMO] Error 18450: [SQL Server] Login failed- User: sqlexec Reason: Not defined as a valid user of a trusted SQL Server connection. Any information on how to solve it
Is it possible to change the owner of a User Defined Dataype? I've recently had to change the owner of one of my databases and the tables from a specific user to 'dbo'. The UDD's are the only objects I am unable to change the ownership of.
Any suggestions anyone? Thanks for any advice! Toni Eibner
I am trying to compare the data from one table (shipments) with the data from a view. The point of the function is to match the correct territory with the account depending on the data. Basically, I this deals with accounts that are transfering from one territory to another. The transfers take effect on the first day of the month, retroactive, therefore we need to allocate the sales data to the correct territory in the shipments table. Here is my function. Can someone tell me how I can get this to work and insert a territory ID for the account that has transfered into the shipments table?
CREATE FUNCTION fnShipments () RETURNS @Shipments TABLE (AccountID CHAR(10), DateInvoice DateTime, DollarShipments Money, TerritoryID CHAR(10)) AS BEGIN INSERT @Shipments (AccountID, DateInvoice, DollarShipments, TerritoryID) SELECT Shipments.AccountID, Shipments.DateInvoice, DollarShipments, ISNULL((SELECT TerritoryID FROM vwAccountTransfers
WHERE Shipments.AccountID = vwAccountTransfers.AccountID
AND vwAccountTransfers.EffectiveMonth =
(SELECT MIN(EffectiveMonth) FROM vwAccountTransfers
WHERE Shipments.AccountID = vwAccountTransfers.AccountID AND DatePart(m,Shipments.DateInvoice) < vwAccountTransfers.EffectiveMonth)), (SELECT TerritoryID FROM vwAccountTransfers WHERE Shipments.AccountID = vwAccountTransfers.AccountID AND vwAccountTransfers.EffectiveMonth Is Null ) ) AS Territory FROM Shipments
ORDER BY Shipments.AccountID, Shipments.DateInvoice; RETURN END
User: Will be sending me a datetime e.g '9 Nov 2004 15:00:00' I want the UDF to do the following for me Return in hours the difference between what the user has send and now (lets say now = '10 Nov 2004 11:00:00') So the UDF will return to me 20. But I dont want 20, I want the UDF to avoid any all hours which are not work related (any time after 16h00 until 8h00 in the morning), so I want this UDF to return 4. That means from '9 Nov 2004 15:00:00' I have calculated 1hr until 16h00 and 3hrs from 8 until 11h00 on '10 Nov 2004 11:00:00'
AGAIN IT MUST NOT CALCULATE WEEKENDS. Lets say '12 Nov 2004 15:00:00' was Friday and now = '15 Nov 2004 11:00:00', I must still get 4 as a return from UDF
I would also like now to be my getdate(), but it seems like you can't use it in UDF
I am implementing an encrypted data system whereby captured data is encrypted using MS CAPICOM when written to DB and decrypted when displayed. It works well. However, each time you write the data back on update the encryption is different from the previous time.
I have a search screen that allows users to enter text data and submit it looking for matches. Of course, the user is entering unencrypted text and the DB data is encrypted.
This means that you can't encrypt the input data before you try to match because the encryption alogorithm used on the input data will not match that which was used to encrypt the DB data.
Are you with me so far?
So, you have to compare the uncencrypted input data with DECRYPTED DB data - in other words, decrypt the DB data on the fly within the where clause of your query.
I have accomplished this by writing a UDF that instantiates an instance of the CAPICOM encryption module and calling the UDF when applying the query eg where udf(columnname1) = 'inputtext' or udf(columnname1) = 'inputtext'.
It works, I get the results that I want.
But, alas, the performance has taken a search severe hit.
I am running a procedure that declares a table with a user defined variable called ZipCodes8000. This datatype is on the systypes table as a valid datatype that we created. Here is the code and the error that is returned. Can anyone help me understand why I receive the error that I do.
Code:
DECLARE @SortPlanBinZipCodeRanges TABLE ( SortPlanBinZipCodeRangeIDINT IDENTITY (1, 1) NOT NULL, SortPlanBinID INT NULL, SortPlanID INT NULL, BinTypeID TINYINT NULL, BinFlagTypeID TINYINT NULL, BinNumber INT NULL, ZipCodeRanges ZipCodes8000 NULL )
error: Msg 2715, Level 16, State 7, Line 1 Column or parameter #7: Cannot find data type ZipCodes8000.
I've been doing some reading on UDT's and have a question...
It was suggested in one of the pieces I read that you could create a UDT for, in their example, cities. And every table that had a reference to city could share this datatype. Now, my initial thought was "wow, what a great idea! I wouldn't have to remember the exact datatype for my primary keys (was it a char(5) or char(6)?) and have a "central depository" for my key datatypes.
So the first question is; what are the disadvantages of such a design?
And the second is; How do you update a UDT? If business requirements change and udt_city needs to be changed from varchar(30) to varchar(60), for example, what would be the way of echoing the change thoughout your database?
My gut reaction for the answers are 1) performance will decrease as effectively the dbms has to "parse" every insert/update to a UDT field in a different method.
2) create a new udt and alter any tables referencing the old one before dropping it.
Is there a way that I can create a user defined variable in my database? I have a fairly large chunk of xml that I would like to store in the database that can be updated by clients ( in rare cases ). I could use other mechinisms to allow access to it, but all other application related information is stored nicely in this one place, I hate to vary for this single piece.
When I define a UDF in SQL 2000 I can't execute it without qualifiction. Here's the code: CREATE FUNCTION GetLastShipDate(@DO_No CHAR(10)) RETURNS CHAR(10) -- DROP FUNCTION GetLastShipDate BEGIN DECLARE @v_last_ship_date CHAR(10)
SELECT @v_last_ship_date = COALESCE(CONVERT(CHAR(10), MAX(Asn.Asn_Ship_DateTime), 110), '') FROM Asn,Asn_Do WHERE Asn_Do.Asn_Number=Asn.Asn_Number AND Asn_Do.DO_Number = @DO_No AND Asn.ASN_STATUS in ('SENT','RESENT')
Iam trying to create a geo-database. For that i need to have a spatial data type called polygon which takes in values as int. so it can be declared as: POLYGON(0 0, 100 0, 100 100, 0 100, 0 0)
How do i do that. plz help.
--- Iam not real any more Iam just an Illusion ---