Function Problem (Sorry Thats Not Very Descriptive)
Mar 11, 2004
Hiya Peeps,
Got a basic update table:
CREATE PROCEDURE CraigSource2Dest AS
INSERT INTO TCraigDest(
MyCertN
,MyResult
,MySpec)
SELECT
TOP 10 dbo.TCertResults.ICertResultsN
,dbo.TCertResults.ICertValue
,dbo.fx_source2dest(dbo.TCertResults.ICertValue)
FROM dbo.TCertResults
GO
As you can see theres a function in the middle of select statement, that returns a value based on what passed into it. The procedure above works fine.
The problem I have is this, can I use the value that the function returns later in the SELECT statement. As an example lets say the table had 4 columns and in the fourth column I wanted to insert the value that the function returned + the word 'TEST'.
I've tried 2 methods of doing this the first :
CREATE PROCEDURE CraigSource2Dest AS
INSERT INTO TCraigDest
(
MyCertN,
MyResult,
MySpec,
MyDerivedColumn
)
SELECT TOP 10 dbo.TCertResults.ICertResultsN
,dbo.TCertResults.ICertValue
,dbo.fx_source2dest(dbo.TCertResults.ICertValue) AS MyNewValue
,MyNewValue + 'TEST'
FROM dbo.TCertResults
GO
When I try this I get the error that MyNewValue is not a valid column name.
And the 2nd method was to try to assign the value returned from the function to a variable. Something like this
CREATE PROCEDURE CraigSource2Dest AS
DECLARE @MyNewValue AS VARCHAR(65)
INSERT INTO TCraigDest
(
MyCertN
,MyResult
,MySpec
,MyDerivedColumn)
SELECT TOP 10 dbo.TCertResults.ICertResultsN
,dbo.TCertResults.ICertValue
,@MyNewValue = dbo.fx_source2dest(dbo.TCertResults.ICertValue)
,@MyNewValue + 'TEST'
FROM dbo.TCertResults
GO
This way gives me ERROR 141 : A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.
Bit stumped really up to the point that I don't even know what to search for to look for help.
Currently I have an event handler on my package that executes a script task on the "OnError" event (at the package level).
One of the error handler's script task's job is to capture the "System::ErrorDescription" and store it to a user variable which is then later sent in an email. That part works fine.
But what I am wondering is, there a way to make the error description more descriptive?? I would like to send a custom error message from one of the tasks in my package, if possible. The task is a script task.
Currently, the "System::ErrorDescription" is just: The Script returned a failure result.
Which isn't too terribly descriptive! But this is the default error description.
Is there something I can do to change the default error message for my script task?? Is there a way I can set the "System::ErrorDescription" on this script task, perhaps? Or is there another way?
I hope I'm posting this in the right section but I have a few SSIS packages that run as SQL Agent jobs that bomb out and does not give me much of a description as why it did. I only get a message that the package failed.
On a different machine, a sql cluster more specific, the job history use to be more elaborate and told me exactly which component errored out.
Is there a setting that I must set somewhere to get a more descriptive error message in the job history?
The following error occurred but did not provide any additional info.
[DTS.Pipeline] Error: The PrimeOutput method on component "Pgrs - tr_hist" (14596) returned error code 0xC02090F5. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing.
For this package I am trying to use DataDirect's ODBC driver for a Progress OpenEdge Database version 9.1E to move data to SQL Server 2005 in order to make use of SQL's BI suite. I have consulted the DataDirect and have that the driver is functioning properly. The driver works perfectly from another application. They suggest that the problem is in the the datareader's or the connection manager's implementation of the driver.
Please tell me what is the cause of this or at least how to troubleshoot this problem.
hi all, I am developing an application in C# which creates SSIS package programatically.These packages perform various activities like transfering data from one server to another,extract data from table,transfering data from sql to msaccess etc.Here I am using the following code to get the description of the SSIS errorcode.
For example if the error code is 0xC0204018,the application shows its equivalent description as "The "%1!s!" has a precision that is not valid. The precision must be between %2!ld! and %3!ld! "
But the actual error message is "The Output column "fund" has a precision that is not valid. The precision must be between 1 and 18"
My question is how to show more descriptive error message..like how to replace "%1!s!" to the actual field.
I have this function in access I need to be able to use in ms sql. Having problems trying to get it to work. The function gets rid of the leading zeros if the field being past dosn't have any non number characters.For example:TrimZero("000000001023") > "1023"TrimZero("E1025") > "E1025"TrimZero("000000021021") > "21021"TrimZero("R5545") > "R5545"Here is the function that works in access:Public Function TrimZero(strField As Variant) As String Dim strReturn As String If IsNull(strField) = True Then strReturn = "" Else strReturn = strField Do While Left(strReturn, 1) = "0" strReturn = Mid(strReturn, 2) Loop End If TrimZero = strReturnEnd Function
I need to be able to pass the output of a function to another function as input, where all functions involved are user-defined in-line table-valued functions. I already posted this on Stack Exchange, so here is a link to the relevant code: [URL] ...
I am fairly certain OUTER APPLY is the core answer here; there's *clearly* some way in which does *not* do what I need, or I would not get the null output you see in the link, but it seems clear that there should be a way to fool it into working.
Can anybody know ,how can we add builtin functions(ROW_NUMBER()) of Sql Server 2005 into database library. I get this error when i used into storeprocedure : ROW_NUMBER() function is not recognized in store procedure. i used MS SQL SERVER 2005 , so i think "ROW_FUNCTION()" is not in MS SQL SERVER 2005 database library. I need to add that function into MS SQL SERVER 2005 database library. Can anbody know how we can add that function into MS SQL SERVER 2005 database library?
I want to write function to call another function which name isparameter to first function. Other parameters should be passed tocalled function.If I call it function('f1',10) it should call f1(10). If I call itfunction('f2',5) it should call f2(5).So far i tried something likeCREATE FUNCTION [dbo].[func] (@f varchar(50),@m money)RETURNS varchar(50) ASBEGINreturn(select 'dbo.'+@f+'('+convert(varchar(50),@m)+')')ENDWhen I call it select dbo.formuła('f_test',1000) it returns'select f_test(1000)', but not value of f_test(1000).What's wrong?Mariusz
Ok, I'm pretty knowledgable about T-SQL, but I've hit something that seems should work, but just doesn't... I'm writing a stored procedure that needs to use the primary key fields of a table that is being passed to me so that I can generate what will most likely be a dynamically generated SQL statement and then execute it. So the first thing I do, is I need to grab the primary key fields of the table. I'd rather not go down to the base system tables since we may (hopefully) upgrade this one SQL 2000 machine to 2005 fairly soon, so I poke around, and find sp_pkeys in the master table. Great. I pass in the table name, and sure enough, it comes back with a record set, 1 row per column. That's exactly what I need. Umm... This is the part where I'm at a loss. The stored procedure outputs the resultset as a resultset (Not as an output param). Now I want to use that list in my stored procedure, thinking that if the base tables change, Microsoft will change the stored procedure accordingly, so even after a version upgrade my stuff SHOULD still work. But... How do I use the resultset from the stored procedure? You can't reference it like a table-valued function, nor can you 'capture' the resultset for use using the syntax like: DECLARE @table table@table=EXEC sp_pkeys MyTable That of course just returns you the RETURN_VALUE instead of the resultset it output. Ugh. Ok, so I finally decide to just bite the bullet, and I grab the code from sp_pkeys and make my own little function called fn_pkeys. Since I might also want to be able to 'force' the primary keys (Maybe the table doesn't really have one, but logically it does), I decide it'll pass back a comma-delimited varchar of columns that make up the primary key. Ok, I test it and it works great. Now, I'm happily going along and building my routine, and realize, hey, I don't really want that in a comma-delimited varchar, I want to use it in one of my queries, and I have this nice little table-valued function I call split, that takes a comma-delimited varchar, and returns a table... So I preceed to try it out... SELECT *FROM Split(fn_pkeys('MyTable'),DEFAULT) Syntax Error. Ugh. Eventually, I even try: SELECT *FROM Split(substring('abc,def',2,6),DEFAULT) Syntax Error. Hmm...What am I doing wrong here, or can't you use a scalar-valued function as a parameter into a table-valued function? SELECT *FROM Split('bc,def',DEFAULT) works just fine. So my questions are: Is there any way to programmatically capture a resultset that is being output from a stored procedure for use in the stored procedure that called it? Is there any way to pass a scalar-valued function as a parameter into a table-valued function? Oh, this works as well as a work around, but I'm more interested in if there is a way without having to workaround: DECLARE @tmp varchar(8000) SET @tmp=(SELECT dbo.fn_pkeys('MyTable')) SELECT * FROM Split(@tmp,DEFAULT)
Yesterday Peso was gracious enough to help me with creating function/views/sp's
I took those examples and extended what had from excel into function in SQL
however I see myself repeating certain parts of the query and i'm wondering if there is a way to call a function (in part or in whole) from another function?
Here are excerpts two functions I have:
We'll call this function UserUsage() ------------------------------------ RETURN( SELECT ut.LastName, ut.FirstName, CEILING(Sum(hu.session_time)/ 60000) AS [Time Spent(MIN)], Max(hu.time_stamp) AS [Last Log Date], pct.Title, cat.topic_name FROM ZSRIVENDEL.dbo.UserTable ut, ZSRIVENDEL.dbo.history_usage hu, ZSRIVENDEL.dbo.pc_CourseTitles pct, ZSRIVENDEL.dbo.cam_topics cat WHERE ut.student_id = hu.student_id AND hu.course_id = pct.CourseID AND hu.topic_id = cat.topic_id AND ((ut.ClientID=@ClientID) AND (pct.ClientID=@ClientID) AND (ut.GroupID=3400) AND (hu.time_stamp>= @StartDate And hu.time_stamp< @EndDate) AND (hu.session_time<21600000)) GROUP BY ut.LastName, ut.FirstName, pct.Title, cat.topic_name )
and will call this function UserSummary(): ----------------------------------------- RETURN ( SELECTut.LastName, ut.FirstName, CEILING(SUM(hu.Session_Time) / 60000.0) AS [Time Spent(MIN)] FROM ZSRIVENDEL.dbo.UserTable AS ut INNER JOIN ZSRIVENDEL.dbo.History_Usage AS hu ON hu.Student_ID = ut.Student_ID WHERE ut.ClientID = @ClientID AND ut.GroupID = 3400 AND hu.Time_Stamp >= @StartDate AND hu.Time_Stamp < @EndDate AND hu.Session_Time < 21600000 GROUP BY ut.LastName, ut.FirstName )
As you can see the first part of the both query are simlar. In particular the:
SELECTut.LastName, ut.FirstName, CEILING(SUM(hu.Session_Time) / 60000.0) AS [Time Spent(MIN)]
and also the variables @StartDate and @EndDate.
In C# it would create a method and just call that method as well as the variables. However i'm not sure how to do that with sql functions. Could someone shed some light please?
Hi,I have written a stored proc with some temporary tables and also useda getdate() in my stored proc. When i try to call the sproc the erroris that we can only use extended sprocs or function inside a sproc.Now if try to write the stored proc directly inside a fuction ie copypaste after changing my temp tables to tables the problem is , i get aerror invalid use of getdate in sproc.What do i do to get somethingfor my results inside a table.Thanks in advance.RVG
I have a table:tblRateUserUserIDJudge intUserIDJudged intscore int this table contains the userid of the person giving a score (judge) and the person receiving the score (judged) and the score itself. Each user can only score another user once. tblRateUser content:judged judge score6 5 87 5 107 6 515 7 415 5 9 When a new score is inserted I want to get the average score for the rated user by counting all scores for that user and divide by the number of records. declare @avgscore decimal(4,1) set @avgscore=(select avg(score) from tblRateUser WHERE UserCodeJudged=@ID) print 'avg score: '+ cast(@avgscore as nvarchar(15)) in the above example this results for usercode judged 7 in an average score of 7.0 whereas I would expect 7.5 (10+5)/2 what am I doing wrong?
I have this scalar -valued function in sql called dbo.GetGoodCustomer ALTER function [dbo].[GetGoodCustomer](@client_id int)returns numeric(10, 2)asbegin declare @getgoodcustomer as numeric(10, 2) declare @review_type as int select @review_type = item_num from customers where client_id = @client_id if @review_type = 0 begin select @getgoodcustomer = getgoodcustomer from customers where client_id = @client_id end if @review_type > 0 begin select @getgoodcustomer = l.g from customers c inner join detail l on c.client_id = l.client_id where c.client_id = @client_Id and c.item_num = l.item_num endReturn @getgoodcustomerendNow, how can I use this function in asp.net (vb.net) ?Because whatever is getgoodcustomer would give me I need to display that in datagrid's text box.Loop thru datagrid If CType(dgItem.FindControl("txtID"), TextBox).Text = 13 ThenDim txtgoodcustomer As TextBox = CType(dgItem.FindControl("txtcust"), TextBox)basically amount returns from function would be showing in txtcust textbox.I don't know I have never done this before..
DECLARE @TotalAmount AS INTEGER DECLARE @TotalPoints As INTEGER SELECT @TotalAmount = SUM(Amount) From Rewards WHERE MemberID = @MemberID AND Redeemed = 1 @TotalPoints = @TotalAmount MOD 20
I have the code above but I keep getting an error message around the last line that I am not sure what it means. Can anyone please help?? Thanks in Advanc3e
SQL Server has no Last() and Max() pulls the Max not the last. Is there a way to pull the Last payment amount with the date of that payment, in SQL Server????
I'm creating DTS packages to load data from text files. I'm finding that a lot of the data needs to be transformed in the same way (e.g trailing "." removed). Rather than writing individual activex scripts to do this, is it possible to write my own DTS function which I call from my DTS packages?
I am upgrading an AccessXP database to SQL 2000 and have an issue with week numbers.
There is currently a piece of VBA that calculates the week number for time recording purposes using the DatePart function as DefaultVal_WeekNo = DatePart("ww", TaxDate, vbMonday, vbFirstFourDays)
I have tried to get this replicated in SQL by using
declare @TaxDate as datetime declare @TheWeek float
set @TaxDate = @TheDate -90 -7
set @TheWeek = cast(datepart("ww",@TheDate) as numeric (30)) - cast(datediff("wk", @TaxDate, @TheDate) as numeric (30))
but this is not reurning the correct values, i belive this is because the VB function has the vbMonday argument. Can anyone tell me how i can get wround this please?
We have len() function in some of our stored procedures. Why one of our SQL servers (6.5) will not recognize this function while others do? While we transfer the stored procedures, the stored procedure can not be transfered to the database of that server. Your immediate help will be appreciated. Su
I am having some difficulty with the Max function. I would expect it to return one row when you use it in a select statement (as long as there is truly one unique row)
Executing the query below give me the following result
select * from lead_with where id= 80430 ORDER BY 1 DESC
I have a function dbo.Validlan which is takes 4 paramentes: par1,par2,par3,par4 I would like to select all 4 at run time: SELECT par1,par2,par3,par4 FROM table1 t1 INNER JOIN table2 t2 ON t1.enrl=t2.enrl
I have the following problem statement: Quote: What was the most expensive merchandise item sold in July? Display sale date, sale price and merchandise description. Sort output by descending sales price. (hard-coding date is OK). Here's my query statement: Code:
SELECT saleDate AS "Sale Date", salePrice AS "Sale Price",description AS "Merchandise Description"FROM Sale, SaleItem, MerchandiseWHERE salePriceAND DATENAME(MONTH, dateBorn) = 'July'ORDER BY salePrice DESC
I want to know how I would use the MAX function on my query since I know this would give me the most expensive item. Am I writing my query statement correctly? Do I have to declare the MAX function in the SELECT statement and on the WHERE statement of just on the WHERE statement? Any clarifications/help would be appreciated
CREATE PROCEDURE [dbo].[Cat] @gets nvarchar(200) AS begin select * tbl where id in (@gets) order by id desc end GO
the type of id field is identity number also I tried @gets int
gets is called from my asp page.
in asp page, I use prodecure like below
Code:
ids="11,12,13" Rs.Open "Cat '"&ids&"'", db,1,3
it doesn't work!
I get the following error
Code:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07) [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '11,12,13' to a column of data type int.
How can i change data_type of a table from varchar to timestamp. I have also lot of data in that table. When i create a the table i just put vchar for that column and now i have to perform max function on that date column. for example table_1 ID serial employee_id date vchar name vchar
query select max(date) from table_1 group by employee_id