【问题标题】:Using a variable for a table in a SELECT statement which is in a IF statement在 IF 语句中的 SELECT 语句中为表使用变量
【发布时间】:2017-03-02 15:32:19
【问题描述】:

我已经在寻找解决方案,但答案不够具体,无法解决我的问题。

所以我有这个声明:

IF NOT EXISTS
(SELECT InternalRepositoryId FROM Tfs_GitInterface.dbo.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

当然也可以:

IF NOT EXISTS
(SELECT InternalRepositoryId FROM dbo.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

它的工作完全正常。我想提一下,dbo 是另一个数据库的模式。现在我想做这样的事情:

DECLARE @schema [nvarchar](400);
SET @schema = 'dbo';

IF NOT EXISTS
(SELECT InternalRepositoryId FROM @schema.tbl_GitRepository WHERE Name = @repositoryName)
BEGIN
    ...
END

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';

IF NOT EXISTS
(SELECT InternalRepositoryId FROM @schemaTable WHERE Name = @repositoryName)
BEGIN
    ...
END

现在我已经尝试了一些动态 sql,但它不会没有错误:

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';
DECLARE @sql [nvarchar](4000);
SET @sql = 'SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ' + @repositoryName;

IF NOT EXISTS
(EXECUTE sp_executesql @sql)
BEGIN
    ...
END

然后我在执行时收到错误:“'EXECUTE' 附近的语法不正确。期待 '(', or SELECT”和一些小错误。

有人知道怎么做吗?

编辑:IF 语句是个大问题

【问题讨论】:

标签: sql-server dynamic-sql sp-executesql


【解决方案1】:

您需要将整个 IF NOT EXISTS 放入您的动态 sql 中。

DECLARE @schemaTable [nvarchar](400);
SET @schemaTable = 'dbo.tbl_GitRepository';
DECLARE @sql [nvarchar](4000);
SET @sql = 'IF NOT EXISTS ( SELECT InternalRepositoryId FROM ' + @schemaTable + ' WHERE Name = ''' + @repositoryName + ''' )' + CHAR(10) +
'BEGIN SELECT 1' + CHAR(10) + ' END';

EXECUTE sp_executesql @sql

其中 select 1 是您放置实际语句的位置

【讨论】:

  • 我认为按照我链接的副本中的建议使用@@ROWCOUNT 会是一个更好的解决方案。
  • 对我来说这看起来更好,我试试看。但我需要 CHAR(10) 做什么?
  • Nvm 我找到了 CHAR(10) :)
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2013-10-18
相关资源
最近更新 更多