【问题标题】:Inline SQL Error内联 SQL 错误
【发布时间】:2013-11-18 18:37:50
【问题描述】:

我是使用内联 sql 的新手,但在关键字“更新”错误附近不断收到不正确的语法。

这是我正在使用的语法,有人可以指出(可能是一个非常非常新手的问题导致了这个问题?)

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Create Table #TableNames
(
 TableName varchar(50)
)

Insert Into #TableNames(TableName)
Values('Pixel')
Values('HellFire')

Declare curX Cursor for Select TableName from #TableNames
Open curX
Fetch Next from curX Into @MyField
While @@ Fetch_Status <> -1
Begin

Set @Sql = N'(Update (trixieIce.dbo.' + @FieldName + N' Set Shipped = 'Yes' ShippedDate = GetDate() WHERE ShippedDate IS NULL And Shipped IS NULL)'

Exec sp+executesql @SQL
Fetch next from curX into @FieldName
End

Close curX
Deallocate curX

【问题讨论】:

  • inline sql”是什么意思?您可能是指动态 Sql 吗?
  • 你是对的,对不起!
  • 不清楚您在这里要做什么。请添加一些解释。
  • 添加了更多代码,希望能进一步解释。
  • 如果您在循环体内执行EXEC(@SQL),我目前在下面发布的代码应该可以工作。

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

我必须假设您正在尝试实现 Dynamic SQL。如果是这样,是这样的:

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Set @Sql = N'Update trixieIce.dbo.' + @MyField
           + N' Set Shipped = ''Yes'', ShippedDate = GetDate()'

然后你可以用EXEC(@Sql)执行它。

您还应该注意,如果@MyField 确实是您从客户端应用程序接收的参数,则需要对其进行正确验证,否则您将容易受到 SQL 注入攻击。这在这里解释:https://stackoverflow.com/a/1246848/109122

【讨论】:

  • 这是不完整的,因为@MyField 需要在其中包含一些内容。另外,我假设那是表名,所以如果不是,那就是另一个问题。如果它仍然对您不起作用,请发布您尝试执行的全部内容,以便我们解决。
  • 在 '+' 附近仍然出现不正确的语法 这可以在 SQL Server 2000 上运行吗
  • @user2954053 是的,这应该适用于 SQL Server 2000。请发布您现在尝试执行的完整示例,以便我们自己进行测试。我发布的内容应该有效,所以我需要看看你实际在做什么来判断问题所在。
【解决方案2】:

我不认为你已经关闭了所有的 ()

Declare @MyField As varchar(100)
Declare @Sql As nvarchar(1000)

Set @Sql = (Update **(**trixieIce.dbo.' + @FieldName + ' Set Shipped = 'Yes' ShippedDate = GetDate())

您打开了那个但没有关闭。 还有,在设置字段中的字段上

将@MyField 声明为 varchar(100) 将@Sql 声明为 nvarchar(1000)

Set @Sql = (Update **(**trixieIce.dbo.' + @FieldName + ' Set Shipped = 'Yes', ShippedDate = GetDate())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多