小编use*_*054的帖子

使用动态 SQL 定位行时出现问题

我一般是 SQL 新手,所以我在设计的一些存储过程中遇到了一些问题。我的程序接受 3 个参数。位置(或表名基本上是 varchar)、房间号 (varchar) 和 'xxx-xxxx' 形式的电话号码 (char)。这是该过程的代码。

ALTER PROCEDURE [dbo].[AddPhoneNumberToRoom]
    @Location    varchar(25),
    @Room        varchar(10),
    @PhoneNumber char(8)

AS
BEGIN
SET NOCOUNT ON;

    DECLARE @String varchar(100);
    SELECT @String = ' UPDATE ' + @Location + 
                     ' SET PhoneNumber = ' + @PhoneNumber +
                     ' WHERE Room = ' + @Room;
    EXEC(@String);
END
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

UPDATE 语句与 FOREIGN KEY 约束“FK_Apartments_PhoneNumbers”冲突。冲突发生在数据库“CMPhone”、表“dbo.PhoneNumbers”、列“PhoneNumber”中。

电话号码在 PhoneNumber 表中,所以当我这样做时:

UPDATE Apartments SET PhoneNumber='123-4567' WHERE Room='2'
Run Code Online (Sandbox Code Playgroud)

它工作得很好。该PhoneNumbers表还看起来是这样的,只是在它的一个数字。

PhoneNumber
-----------
123-4567
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures dynamic-sql t-sql

1
推荐指数
1
解决办法
79
查看次数

创建以 TableName 为参数的存储过程

我正在尝试创建一个存储过程,其中将表名作为参数传递,并更新表的内容。这是我到目前为止的代码。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE TableSelect
    @TableName varchar(100)
AS
BEGIN
    SET NOCOUNT ON;

    Declare @String varchar(100)
    SELECT @String = 'Update '
    SELECT @String = @String + @TableName
    SELECT @String = @String + 'Set Internet = 1'

    EXEC (@String)

END
GO
Run Code Online (Sandbox Code Playgroud)

当我尝试通过此命令执行时:

EXEC TableSelect 'Waterford';
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Msg 102, Lvevl 15, State 1, Line 1
Incorrect syntax near 'Internet'.
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒。仅供参考,互联网专栏,有点像 0/1 或 False/True。谢谢

sql-server stored-procedures

-1
推荐指数
1
解决办法
1万
查看次数