And it's also surprising to see how often this type of select statement is in a trigger, handling only one (random) record instead of all of the records being affected.
Wayne
Microsoft Certified Master: SQL Server 2008
Author - SQL Server T-SQL Recipes
Oh yes and, of course you should not do this:
SELECT @variable1 = (SELECT column1 FROM table WHERE column2 = 'somevalue')
unless you want an error for selecting multiple rows in a subquery...
MM
select geometry::STGeomFromWKB(0x0106000000020000000103000000010000000B0000001000000000000840000000000000003DD8CCCCCCCCCC0840000000000000003DD8CCCCCCCCCC08408014AE47E17AFC3F040000000000104000CDCCCCCCCCEC3F9C999999999913408014AE47E17AFC3F9C99999999991340000000000000003D0000000000001440000000000000003D000000000000144000000000000000400400000000001040000000000000F03F100000000000084000000000000000401000000000000840000000000000003D0103000000010000000B000000000000000000143D000000000000003D009E99999999B93F000000000000003D009E99999999B93F8014AE47E17AFC3F400000000000F03F00CDCCCCCCCCEC3FA06666666666FE3F8014AE47E17AFC3FA06666666666FE3F000000000000003D1800000000000040000000000000003D18000000000000400000000000000040400000000000F03F000000000000F03F000000000000143D0000000000000040000000000000143D000000000000003D, 0);
mister.magoo (11/24/2010)
Oh yes and, of course you should not do this:
SELECT @variable1 = (SELECT column1 FROM table WHERE column2 = 'somevalue')
unless you want an error for selecting multiple rows in a subquery...
I would say that would be the best way to do it. Getting an error because the subquery returned multiple rows is WAY better then randomly getting ONE value. If i get an error i can fix it, if it just keeps on going thats BAD. If you get an error you either did something wrong or something is terribly wrong in the DB (if its not supposed to be able to return more then one row). Either way... error = good.
/T
tommyh (11/24/2010)
mister.magoo (11/24/2010)
Oh yes and, of course you should not do this:
SELECT @variable1 = (SELECT column1 FROM table WHERE column2 = 'somevalue')
unless you want an error for selecting multiple rows in a subquery...
I would say that would be the best way to do it. Getting an error because the subquery returned multiple rows is WAY better then randomly getting ONE value. If i get an error i can fix it, if it just keeps on going thats BAD. If you get an error you either did something wrong or something is terribly wrong in the DB (if its not supposed to be able to return more then one row). Either way... error = good.
/T
Hi Tommy, I appreciate your point, but at no point did I suggest allowing a random selection...I am just warning against the pitfalls of a subquery that could conceivably return multiple rows. I would heartily recommend doing something safer such as
DECLARE @myVariable VARCHAR(10)
SELECT TOP 1 @myVariable = column1 FROM myTable WHERE column2='something'
IF @@ROWCOUNT <> 1
BEGIN
-- put some error handling here
-- maybe setting a default value such as NULL
SET @myVariable = NULL
END
--carry on using @myVariable safe in the knowledge that is will be set correctly
MM
select geometry::STGeomFromWKB(0x0106000000020000000103000000010000000B0000001000000000000840000000000000003DD8CCCCCCCCCC0840000000000000003DD8CCCCCCCCCC08408014AE47E17AFC3F040000000000104000CDCCCCCCCCEC3F9C999999999913408014AE47E17AFC3F9C99999999991340000000000000003D0000000000001440000000000000003D000000000000144000000000000000400400000000001040000000000000F03F100000000000084000000000000000401000000000000840000000000000003D0103000000010000000B000000000000000000143D000000000000003D009E99999999B93F000000000000003D009E99999999B93F8014AE47E17AFC3F400000000000F03F00CDCCCCCCCCEC3FA06666666666FE3F8014AE47E17AFC3FA06666666666FE3F000000000000003D1800000000000040000000000000003D18000000000000400000000000000040400000000000F03F000000000000F03F000000000000143D0000000000000040000000000000143D000000000000003D, 0);
Viewing 6 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply