使用 IF/ELSE 并插入临时表
Working with IF/ELSE and inserting into temp tables
我正在尝试编写一个 SQL 查询,它接受两个输入(一个内容 ID 和一个内容类型),根据不同的来源 table 填充一个临时文件 table基于用户设置的内容类型,然后最终针对临时 table 运行查询。我想我在将我的临时 table 合并到我的 IF/ELSE 语句中遇到了困难。
所以我的问题是,为什么 return 一些非零数量的结果:
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
而这个 return 的结果为零:
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
另外,我已经试过了,它也是 return 零结果:
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, this, and this, but for some reason it's just not clicking for me. I'm using MS SQL Server 2014, in case that helps. Here's the SQL Fiddle。谢谢!
这其实很简单,你没有给 @contenttype
一个长度,因此,默认情况下它的长度是 1 个字符。
如果你这样做就会很清楚:
DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'
SELECT @contenttype
结果是r
,所以,IF (@contenttype = 'resource')
不成立
我正在尝试编写一个 SQL 查询,它接受两个输入(一个内容 ID 和一个内容类型),根据不同的来源 table 填充一个临时文件 table基于用户设置的内容类型,然后最终针对临时 table 运行查询。我想我在将我的临时 table 合并到我的 IF/ELSE 语句中遇到了困难。
所以我的问题是,为什么 return 一些非零数量的结果:
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
而这个 return 的结果为零:
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
另外,我已经试过了,它也是 return 零结果:
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, this, and this, but for some reason it's just not clicking for me. I'm using MS SQL Server 2014, in case that helps. Here's the SQL Fiddle。谢谢!
这其实很简单,你没有给 @contenttype
一个长度,因此,默认情况下它的长度是 1 个字符。
如果你这样做就会很清楚:
DECLARE @contentID int, @contenttype varchar
SET @contentid = 28861
SET @contenttype = 'resource'
SELECT @contenttype
结果是r
,所以,IF (@contenttype = 'resource')
不成立