我一般是 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) 我正在尝试创建一个存储过程,其中将表名作为参数传递,并更新表的内容。这是我到目前为止的代码。
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。谢谢