2015-09-04 61 views
3

我想写一个接受两个输入(内容ID和内容类型)的SQL查询,根据用户设置的内容从不同的源表填充临时表作为内容类型,然后最后对临时表运行查询。我想我会陷入将我的临时表合并到我的IF/ELSE语句中。使用IF/ELSE并插入临时表

所以我的问题是,为什么这回几个非零数字结果:

DECLARE @contentID int, @contenttype varchar 
SET @contentid = 28861 
SET @contenttype = 'resource' 

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int) 

INSERT INTO @tags_current (contentID, taxonomyID, isPrimary) 
SELECT resourceID as contentID, taxonomyID, isPrimary 
FROM resource2taxonomy r2t 
WHERE r2t.resourceID = @contentID 

SELECT * FROM @tags_current 

而这将返回结果为零:

DECLARE @contentID int, @contenttype varchar 
SET @contentid = 28861 
SET @contenttype = 'resource' 

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int) 

IF (@contenttype = 'resource') 
BEGIN 
    INSERT INTO @tags_current (contentID, taxonomyID, isPrimary) 
    SELECT resourceID as contentID, taxonomyID, isPrimary 
    FROM resource2taxonomy r2t 
    WHERE r2t.resourceID = @contentID 
END 

SELECT * FROM @tags_current 

而且,我已经试过这一点,它也返回零个结果:

DECLARE @contentID int, @contenttype varchar, @command varchar 
SET @contentid = 28861 
SET @contenttype = 'resource' 

DECLARE @tags_current TABLE (contentID int, taxonomyID int, isPrimary int) 

IF (@contenttype = 'resource') 
BEGIN 
    SET @command = 'INTO @tags_current (contentID, taxonomyID, isPrimary) SELECT resourceID as contentID, taxonomyID, isPrimary FROM resource2taxonomy r2t WHERE r2t.resourceID = @contentID' 
END 

EXECUTE(@command) 
SELECT * FROM @tags_current 

我对this读了,thisthis,但由于某种原因,它只是不为我点击。我使用MS SQL Server 2014,以防万一。这是SQL Fiddle。谢谢!

回答

5

这其实很简单,你没有给出长度为@contenttype,因此,默认情况下它的长度为1个字符。

,如果你做这将是明确的:

DECLARE @contentID int, @contenttype varchar 
SET @contentid = 28861 
SET @contenttype = 'resource' 
SELECT @contenttype 

结果是r,所以,IF (@contenttype = 'resource')是不是真的

+0

谢谢你 - 这就是答案。对于我来说,接受它作为答案还为时过早(不能在10分钟内接受答案),但我会回来做这件事。 – Scott